关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( H% P7 J1 l7 p) F' v/ e. N
0 o0 q/ Y3 J) M/ f1 l5 f' p1 {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; d5 D* e' n* w
8 J8 \$ z- `. ~2 \& j8 q' T其他程序段。。。。。
' y+ _) }9 I: Q+ a* m+ f! \' ` 1 ?4 j+ q) t1 X/ |5 i
   free(x_d);4 K: J6 `  t! w+ y% ]  A
9 I9 W, Z, e6 g
使用DSP侧单独调试功能,验证动态申请没有问题,
( L& i# P2 E! d0 Z, z
- U9 A" d& ^9 c  d: }, _+ L. N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. B  {! C7 O9 s* Q7 u# T) a
& B# ^- w" a( Y: X0 M- w7 J8 |

+ h8 K' B# V" Z: c' a9 W
$ c9 }8 f% |; r1 i  f+ O% x1 I+ M: \1 R5 V9 X* g

$ O) R$ |5 P9 C. U9 q. l, \
6 J2 f" M0 r# ?6 j2 c/ e
3 V& m1 v4 _9 w
% [* w4 [5 Q; G' d5 v+ b% I. b3 W& |5 I/ t6 r+ j

: Q  B$ M9 o! R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  ~9 G* o0 r/ d/ I" `
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ L  ~3 v/ a) Y% [1 b, C" v(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ \- g  ]- B4 F/ F
$ m) Q: F3 i! `* @0 t! k
是不是需要在DSP.CFG中进行配置
7 M( W6 ?3 S; o6 Q5 C我现在的配置为
. N$ Q% m5 ^7 S- c9 P7 h; h  j6 y8 f8 e4 Q4 [$ J; |
/*) M: u- z3 @- _( [/ [. M) b  D5 f
*  ======== Operating System Configuration ========* F% \) x7 ^2 S+ U! B
*/
% {" |: h; S4 o4 p; [# V: r
: B2 H* f7 J' E2 A( u/* no rts heap */
' [" W3 p" k- ~  fProgram.heap = 0;
$ Q/ P1 B/ H6 q2 s& IProgram.argSize = 100;  /* minimum size */7 q* C2 Y' y' [" Z8 |" Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 ^/ r3 ]7 o/ h8 [' ^& u
3 Y. [: _0 `8 Y
/* create a default heap */3 v) ^3 r# e+ L1 o8 D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 J! T5 W* L  uvar heapMemParams = new HeapMem.Params();
# c  \( c- D( f, h+ ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. `0 H% g7 r* u5 C8 `8 J; k+ x
7 E+ H5 Y7 s7 _4 F" D2 I4 G" q, W
var Memory = xdc.useModule('xdc.runtime.Memory');
+ x0 ^4 c. |2 ?; gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; v  _4 _' A% p5 Z' _. u1 V: k/ N- j
, ~4 P5 L1 s) `7 \/* configure System module */8 s7 O- w$ g" f0 N. h$ T2 {
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# |, a/ M1 o1 Y) n* Q" f) CSysMin.bufSize = 0x1000;7 C( w% w+ {+ p6 |; U+ r2 t+ J; p
SysMin.flushAtExit = false;
& i0 {- z3 q1 r2 H, G; ]+ z" ]# z9 Q) H0 ~
var System = xdc.useModule('xdc.runtime.System');
: O0 x! D* r+ J2 JSystem.SupportProxy = SysMin;
. ?6 F% d) ]8 o$ S. |3 h1 L0 P8 d* L0 a; Z( ~" r! M
/* configure SysBios to use the lower half of Timer 1 */3 b0 v# f7 F& f! a! |# a% m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 H) H" [- K* j" [* Z7 |. lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');2 J6 G# m' r1 u7 Y; O9 u
Timer.timerSettings[1].master = true;$ o' d6 J4 O0 H" u: b
Timer.defaultHalf = Timer.Half_LOWER;) ^; \  }. W) P7 |$ C; E, Q3 ?4 m
Clock.timerId = 1;( J. y" F0 V% _7 h1 P
7 \+ N4 ?& g9 x6 V) Y

/ G, n' l' S! k" B: v4 Z8 s/*2 W# w2 L- P; v8 g! e7 q5 O3 `
*  ======== Miscellaneous Configuration ========+ a1 E7 m( J; g! i: W; X
*/
1 D. m3 [% e+ w. y  ^) g( m* n9 r+ i3 n( w/ U% P2 E- `' i
/* set default diags mask */
5 n0 g* t6 ?, a' K1 ~0 p* Y& ~var Diags = xdc.useModule('xdc.runtime.Diags');4 R9 q( d- |( [7 r
var Defaults = xdc.useModule('xdc.runtime.Defaults');; z8 U: r/ F8 C" g$ ?
, H% }8 f( C" J! `+ O# P( L0 u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ e  A5 J' T! h! B& }% @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! ]/ L  b) Z3 V% hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 l  `: k6 s6 b$ v9 g6 B1 Q* u- y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; u$ f& t( T$ G6 y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 _4 v3 y/ C  w4 QDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 s( l% K8 M# s0 ~, h3 PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ W- f' O2 A  t$ w  k2 N5 N& VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 H0 M  Z" s" m; ?3 {! n( pDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# @5 S6 l7 w5 D2 M7 RDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( b9 g1 i4 ^/ \% R1 _/ {6 v2 q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* o1 ?1 s, z' a) i3 rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ H* _9 w7 l, P8 r$ p% ^2 V$ C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 U  I& z$ m6 G  w& \* Q. Y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. |/ I+ L% t; \9 T+ Y# }, n3 u

, H8 E: r% E9 \  ?/* override diags mask for selected modules */
5 I" d& p  w4 r* e9 Xxdc.useModule('xdc.runtime.Main');% O4 s7 }  U' N: D+ A  E
Diags.setMaskMeta(: }+ q" x. A! D) ~
    "xdc.runtime.Main",( z9 u4 w: n( i2 _
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- s9 Y" ]' ~. V" u9 T& z& [
    Diags.RUNTIME_ON( d1 U1 T( v7 c9 ?, Y
);* K2 z# g& A* l" L% r# Z( r/ l; K

' g  ]" @, p1 cvar Registry = xdc.useModule('xdc.runtime.Registry');
$ B/ w, c2 P: e6 Z& dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, j+ b# B' j' G  T0 B% `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 T& o- z2 t+ J- \: K- o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 S8 f7 Z% c, t3 R/ g4 GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: X2 p3 H: }8 P! K9 Z+ z
' ?4 n) U( e6 Q, {! C
/* create a logger instance */' W  g0 s# \$ d- Z3 ~* m
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" t, c' [9 C0 s) ~' }' Pvar loggerBufP = new LoggerBuf.Params();
! M6 L3 U9 N% \* w+ p+ G0 `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% Q$ K2 a, J! a3 ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" [4 N9 t! v# a* Z1 A
* G# @& c: ?0 fvar appLogger = LoggerBuf.create(loggerBufP);
, T, g4 w; A* s- j/ O% g9 gappLogger.instance.name = "AppLog_Core1";" G8 a$ Y( }+ f5 V6 V% E
Defaults.common$.logger = appLogger;* [9 R4 R4 B# ~! L' K/ \
Memory.defaultHeapSize = 0x8192;    . }4 p( S, k$ K) D% @- w2 S' u
Idle.idleFxns[0] = "&LEDStatus";: q" J$ o+ R& b6 Q
Cache.initSize.l2Size = Cache.L2Size_32K;
9 `1 q+ p# f, a( F: _; N& s/ p. z1 c1 z6 |) L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
# w# |2 H) C# Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 h4 p# ~% j2 [* g4 x; z, Ovar heapMemParams = new HeapMem.Params();
0 A' U2 U7 j1 {# ?/ AheapMemParams.size = 0x4000;
( n3 @2 I+ Z7 x; z+ @3 s1 m1 R, a( U8 _0 o, s3 i
var Memory = xdc.useModule('xdc.runtime.Memory');
: _( I4 b. _% [, I& yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, A% p, S( S) |8 B9 Y) Q& z  A: a* U- |, Z5 z. G: q
我大约calloc  每次共计大小为5K*16bits,
: g  o$ \" R) K1 i$ x而默认配置才0x4000、需要改大。
0 d: j2 e# Z! I% h0 _5 N2 P- D" X$ _' S# K. R( w$ [2 l3 ?$ ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, t3 T) m* h: `
Program.heap = 0;
! \) u3 B3 P& e% \  dProgram.argSize = 100;  /* minimum size */  W/ r: k2 p5 G0 n( c% E
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-30 12:17 , Processed in 0.041427 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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