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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. J" R! \  X6 \- C- u/ R+ N8 F( O0 S, o) y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. `) W: T8 C$ X- Q& i2 R4 c+ E7 a' c
其他程序段。。。。。
$ G  ~+ i7 H4 `; {1 A ! Y  h  l! L* v5 w' S4 J3 Q
   free(x_d);4 \2 Q8 i+ r1 Z( H  L( C$ D

6 T2 U1 W0 F6 A  H* x# o& T使用DSP侧单独调试功能,验证动态申请没有问题,; b) e" W7 o# |8 _) D0 E$ {
$ L# o0 d. ~$ F1 t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. q3 I( G8 o" C, X
' w* ?4 t4 H, Z3 e9 R
4 O5 O. `9 P" F5 c- |3 f

9 x# J8 ^0 L' F) R
0 L0 M5 d! y5 H" _% k
" _9 u* I+ Z3 L; z' n) \7 U" E) ^) z% |) s$ {1 I

& Q! ]9 ?) J3 X% [
2 [* _9 t* T0 t+ N0 i$ H( S3 @% c; V& g/ W& u9 T
6 p4 t- Z# O. X5 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 w7 Y5 ~8 y" I我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 B7 V; q. `( H7 t. G0 g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" z; X; B2 L3 [7 n+ n

' k# q+ U) p8 X- \; V# m是不是需要在DSP.CFG中进行配置, d" o+ S' x+ f$ Z
我现在的配置为  W0 k! R% \# N# ]6 f8 Y
. W: K5 r& O4 ^0 a
/*6 h  G2 c6 z& `7 c1 h$ Q
*  ======== Operating System Configuration ========
& `* e9 O) L, p2 y& E */: a2 b( f3 k& k/ [) _

( s, E: \- P' X- S+ O/* no rts heap */4 A7 i) N  E, G/ H+ \0 @: N: s
Program.heap = 0;6 k$ {' h9 ?+ M* f
Program.argSize = 100;  /* minimum size */
- f# q8 T4 B1 c6 LProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% o. Q7 @2 e1 b+ C+ U$ i$ m8 b- W

( p3 O9 i1 X, z/ y6 C2 b/* create a default heap */
  e* M: e& w) w$ _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 G( b) k/ y+ J+ b  m
var heapMemParams = new HeapMem.Params();6 u* b( z2 V; U! c0 ]& D
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 ?4 ]6 e( ?/ E0 f2 c

5 |) \8 v; D0 |- \; }+ G
var Memory = xdc.useModule('xdc.runtime.Memory');. {% U' I3 z4 r* h! q+ V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 I+ i. R% ]/ j( B$ ?2 R$ I
; O/ v* B6 z8 N2 H/* configure System module */
/ \( N. k2 d& l4 Evar SysMin = xdc.useModule('xdc.runtime.SysMin');
  [6 I/ _& k5 r2 G0 B- XSysMin.bufSize = 0x1000;; i& M0 V/ U+ c" g
SysMin.flushAtExit = false;) A5 w; x/ e/ u' A
) e1 t# U) T  S
var System = xdc.useModule('xdc.runtime.System');) F) d, b1 \2 A' p! i+ p9 b+ b
System.SupportProxy = SysMin;
& h+ D0 O0 a; X) q  f; W0 C+ ?" p
/* configure SysBios to use the lower half of Timer 1 */
. A+ I( P* ]+ O6 }var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# K0 z$ t* }; t; x5 J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: j/ z) j5 x5 n/ x
Timer.timerSettings[1].master = true;
) c& g& A4 f8 i6 ^/ y0 c8 E+ [( m; aTimer.defaultHalf = Timer.Half_LOWER;
! N  _9 D! P; B# j* w$ PClock.timerId = 1;
5 R' r% R" b( o& Q$ U, c& c3 s# Z. L# u1 r6 c! L; [' V. p& v

$ H6 z! U5 I* _5 q7 m/*
$ C# d; M1 i8 ^/ p *  ======== Miscellaneous Configuration ========6 M$ K0 O3 T' O
*/6 m% J) ^+ p/ J& N( W" A

' h4 Z6 n3 |! ?. y2 U* W$ j0 p+ [/* set default diags mask */
% s& Z# a9 f1 y8 P5 Dvar Diags = xdc.useModule('xdc.runtime.Diags');
3 g$ C4 \9 W8 l5 Dvar Defaults = xdc.useModule('xdc.runtime.Defaults');& b4 L$ D# a4 m" k* J$ e- B

1 s% F1 c8 r) z7 l+ X* HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: R' e% |( @7 O- C* k2 m$ ^
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 P% F" s' S9 R/ z6 F& q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 I8 c6 n# l) w, `/ V6 J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 K  Y$ e6 p( {- R$ }+ QDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: s. J" d5 C2 G& e% m' f$ Q7 h5 JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- A. ]' c3 |- w4 O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" d- ^& ]8 |0 X' y7 n8 vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: A$ p$ Y8 L7 b$ _% NDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# F$ n- }& }3 G1 T5 r' x  W
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 p/ K8 G) s0 vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& M4 J7 s4 Z1 W  i# X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" {7 z, {  o% M. ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 m2 \0 S7 K8 o0 O0 ~0 J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 k4 ?% r7 j, H' L( b0 c7 j. H7 g2 h
8 E  M3 J  X/ B) q  s1 {5 J3 |/* override diags mask for selected modules */% `) c- R% w  R1 Q
xdc.useModule('xdc.runtime.Main');
- y& A4 S, J8 y& U' EDiags.setMaskMeta(' t# p9 K( l! O, N
    "xdc.runtime.Main",
" A  j- @; {( d: E: n& R    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ F% @/ J0 V; _) e+ e; S- G    Diags.RUNTIME_ON
8 i: Z7 o" x$ [% t);
9 X' R/ p" s3 a  I/ [0 U% z+ G' Z0 V8 ]
var Registry = xdc.useModule('xdc.runtime.Registry');
' U% U& W% D3 @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  G6 j& ?9 O( g; o7 P
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. q9 f) o6 |7 o) ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" \; \* u+ S( m! BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 S; P) `# m' U3 S- ]7 b( @2 A3 ~* {. U8 p
/* create a logger instance */: `) V3 Y/ }. |8 Q0 l% [! U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 ^# f) h, A/ yvar loggerBufP = new LoggerBuf.Params();
. \, c8 K+ ]" X, [( h) X! c- `5 gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' H, S( i, O  Z. r! G: X: ?7 n2 UloggerBufP.bufType = LoggerBuf.BufType_FIXED;9 Y+ W+ C. s2 D, o& Q/ J
& ^9 h. y; w5 K" n4 k+ Q
var appLogger = LoggerBuf.create(loggerBufP);
# z7 o# I  r" S8 t+ H1 e3 s4 A  eappLogger.instance.name = "AppLog_Core1";, r' u* F( @$ G1 P+ ~
Defaults.common$.logger = appLogger;
# ?/ b! S- Y+ x8 n# @* `( M- `Memory.defaultHeapSize = 0x8192;    / S8 ?, k6 f/ R% p
Idle.idleFxns[0] = "&LEDStatus";
( r2 j* q. h4 R( UCache.initSize.l2Size = Cache.L2Size_32K;/ s) ^8 v/ E$ C

$ M5 f0 ?7 H/ ~$ H3 y* ?+ S& n' t
回复 支持 反对

使用道具 举报

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 */. e/ Q8 T3 K# W1 u) [1 C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 H) N# b3 g  e% B, O
var heapMemParams = new HeapMem.Params();/ }* v0 L7 v( m: G6 T( M
heapMemParams.size = 0x4000;
, H; d' o& ^# _# l) Q$ [
1 a: M1 _$ u- X" ~var Memory = xdc.useModule('xdc.runtime.Memory');
: p( j$ Q# |9 t3 l) `/ rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 E, B: D& i! u) e! O$ ^
/ G: c4 o( m" N+ O! U2 e
我大约calloc  每次共计大小为5K*16bits,
; X7 z) O3 Q: e而默认配置才0x4000、需要改大。* U* w7 }( v8 b8 m
7 r- e. Q: z; A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; Q, p/ Y0 V2 ?" A
Program.heap = 0;
% ]9 k5 q2 @( H$ ]( K5 y8 ?8 oProgram.argSize = 100;  /* minimum size *// I' x# z' ~; x, j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 13:27 , Processed in 0.053120 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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