关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7763|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- l5 _) m$ R6 a  ?3 o
" z; ^" }) G7 x5 j! s5 g! s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% `, ?0 N2 |; L3 ~) _/ i& T& c# K
. w# S$ b8 ]6 Z. G7 G2 W8 V6 T* y
其他程序段。。。。。
9 i/ ?! L" Z9 y/ u2 `% C  } " P! z0 ~2 Y" N! d
   free(x_d);
; w( m) v' r2 I$ C% ]" j8 j
/ m4 G3 V. l4 e( v) q' Z使用DSP侧单独调试功能,验证动态申请没有问题,, \% S( d9 I, V6 C% `

6 C. o" W. V: g( H6 y8 H: q3 u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% d! |7 }2 C, u2 [
, s; t) E/ A7 z7 |2 B+ T

1 q2 I8 y  O) K9 Q! G  z9 I( A3 y; ]( Y: G  w$ u

4 ]5 [5 ?# c2 ^; f# O' Z* }5 n% T$ j/ h8 x1 r/ e% R, F

2 Y. ?* @) z- l# t; j  [- d8 R3 O. w* L$ e; ~
6 @" U) [+ u/ E* M) q3 m8 @9 k& H
/ E; p% w8 u6 M; R6 o. b+ i# a

- _* Y; X* y% f3 y# R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 z; s: S* `. v! h7 u9 R
Program.heap = 0;- B+ A; R4 z& r" N
Program.argSize = 100;  /* minimum size */
9 `, ^) ~, ~$ Y8 b0 ]) M7 y1 D2 IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
7 i" l5 `9 q4 t5 c: E5 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 E' s. _5 y2 M0 ]4 @6 C( `2 C5 Hvar heapMemParams = new HeapMem.Params();% a* @4 K- c7 y) F
heapMemParams.size = 0x4000;) e9 s7 [$ r. y; Y# Q- G/ x' ]+ r

7 g; ]& }/ z* F3 wvar Memory = xdc.useModule('xdc.runtime.Memory');4 F! [% Z9 l9 i2 D2 [7 L' }# {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* F8 {7 [0 X& t' T

# g9 V. \( H7 {. u& w5 h我大约calloc  每次共计大小为5K*16bits,% V7 u. N  M. o/ O/ C- c/ H
而默认配置才0x4000、需要改大。
4 }3 `6 E' y9 P6 s5 w& I* f  X, m5 `5 E3 _( l5 \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 X- @/ q# v) a, q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 v; U5 g% `6 N' `1 _  t9 ?2 _
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( ?. v2 u- H7 O! i$ P+ t/ @
4 i/ M! x  M1 o, t  J
是不是需要在DSP.CFG中进行配置
7 y1 a+ ~3 R* N; H. H$ i9 A我现在的配置为8 V1 p2 [# x! _6 M# Q& s
  g; v7 A' }+ l3 O
/*; V* H2 d8 f8 P; T- b. W
*  ======== Operating System Configuration ========. ^/ A0 G' u" }6 ^% I2 E" [* H
*/
" f  \, s) j6 M2 t! H* E( g9 M  a
/ \3 N9 e& I0 i; ]5 x/* no rts heap */, ]* z8 _' ?3 N- _# Z
Program.heap = 0;: a& R- l  n: H8 {7 r# E; M
Program.argSize = 100;  /* minimum size */" `$ r% }; V  ?; O( v6 N% v( s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 O, {" T( N; Z5 w& K) d, R
; p  f5 E+ {6 _3 E
/* create a default heap */& M" _3 o8 P& b6 k2 ]( {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, X; x: X9 z8 u! x, M; a6 Q) |, D9 s6 C1 uvar heapMemParams = new HeapMem.Params();
$ b3 }8 l, D; f0 |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 h, A4 r* _& r8 I* @: t! V; D+ m. U0 ?  Y5 n
var Memory = xdc.useModule('xdc.runtime.Memory');
" }2 M2 f7 B+ @8 }! T8 W, zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 `& ^9 v+ ]( z1 i9 Z- ^" n0 x
; X. D' p0 U5 S( G& `- w; ~5 i! ]
/* configure System module */
/ _; `7 h$ u( t1 L# S# gvar SysMin = xdc.useModule('xdc.runtime.SysMin');
: R* A# {9 M' D4 Q0 GSysMin.bufSize = 0x1000;
' \: {+ P; [! T! _6 Z( q" fSysMin.flushAtExit = false;
4 ]- G* t. J# m6 w2 H0 K  K7 i" }  q, m" o$ M
var System = xdc.useModule('xdc.runtime.System');
4 ~/ L6 C9 |5 X1 ]$ Y3 z$ OSystem.SupportProxy = SysMin;
4 d  `2 W  G2 {2 B+ t$ A
( T( y$ Q, h, r1 g/* configure SysBios to use the lower half of Timer 1 */
: {- |8 j: j1 b4 x$ S7 Q2 yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 a! z9 f& C" h2 M; a6 [var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* {+ |6 F/ x: ~( LTimer.timerSettings[1].master = true;/ f7 U$ c) g1 G
Timer.defaultHalf = Timer.Half_LOWER;9 t' H3 s! Z1 Y# m7 D+ R2 D
Clock.timerId = 1;
. ^' C# v, G; |- B% E/ Z. U$ Q
! m! R+ U% g# S, B4 B
8 x2 k& l3 ^6 R6 Z7 @- J/*, C8 T/ t) y0 E1 m9 u8 P1 d
*  ======== Miscellaneous Configuration ========+ |8 ?& |/ s6 ?$ E' T) J4 Y
*/! \0 _$ K9 J) q) g; I

' ]$ g  H3 A+ ~  L8 J/* set default diags mask */
( u2 C* L8 y- x5 Rvar Diags = xdc.useModule('xdc.runtime.Diags');
+ f0 I- t- ?' gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
) J) K9 A0 W5 M3 W+ C4 Z2 r+ G$ ?- c
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 T: U2 F2 ^* d# ^7 [6 [: oDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& @6 s# A* W+ v* L  l% BDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 x. u  S4 w  t4 ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! Q* |; Q; _1 |$ _7 H9 tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- Y% h3 d5 f) M6 b( l' }7 g# _
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: L' D1 s& I# S) f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  U& ^4 A1 ~4 ~1 R! B$ v
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, M: \/ C$ ?& y' B! X# ]
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& w2 q+ ?9 j6 ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& i4 }( Q- p. i4 \7 P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 g9 |6 _9 l( U. e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" i$ N: W2 u% }- g/ A/ G& S( }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: p: z0 e2 d1 D" fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* R3 Y- n* r* a' C( e$ N' E' D
0 H* p6 K: C/ g3 @9 U/* override diags mask for selected modules */0 S& l: P# P7 x! a! Z$ n  }( |
xdc.useModule('xdc.runtime.Main');5 Z* |" B# L9 U7 J
Diags.setMaskMeta(
) @% w& x) W! m, [7 x1 B    "xdc.runtime.Main",/ O0 ^5 ?  B! Z/ O
    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ q( E2 w' H  |4 E( O& c( }5 j  o. _  R
    Diags.RUNTIME_ON
8 G3 [( t! y4 U);
) P6 a7 K( W! l& C* A/ q* K% Z! [1 s% |0 ~
var Registry = xdc.useModule('xdc.runtime.Registry');
( F. G4 R& f/ E( I- X) d$ S2 XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" y  \" U6 S5 Z9 E# P, ], s
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 Z3 K: Q! l0 W! l4 ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% b# D& v* t, E2 `0 R0 d) d6 h7 w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 D2 y& Y2 K4 k# ?' g- q
% o0 K, R& h7 N  |- k: D& o" M/* create a logger instance */) H4 w9 t  }9 `0 M2 t6 b1 B
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  f2 V! i  z0 `# D- uvar loggerBufP = new LoggerBuf.Params();
$ U( ~- Y3 x# ]9 N3 U) aloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* z2 G5 Q# s, P0 g2 ologgerBufP.bufType = LoggerBuf.BufType_FIXED;
/ m6 f( ?' R+ X
2 K$ z& t4 p3 ]% {# y1 L- K9 a8 Vvar appLogger = LoggerBuf.create(loggerBufP);
/ B- Q7 j, |; u+ A/ h. ?appLogger.instance.name = "AppLog_Core1";
) Y1 ~. }, i: }' a1 y! N8 NDefaults.common$.logger = appLogger;  G5 ~0 r6 o5 o5 o. i
Memory.defaultHeapSize = 0x8192;   
( \" Y- d4 C% j$ e) u8 h8 s6 t- SIdle.idleFxns[0] = "&LEDStatus";
- x$ b) S" o3 |$ P* T2 f% [Cache.initSize.l2Size = Cache.L2Size_32K;
: K" G, i" h2 ?. j& F, D
9 w! o( {: U" ?5 I3 H: G
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-21 23:12 , Processed in 0.044509 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表