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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 G" @0 N( s0 t. n8 g+ c' d: [4 p7 K# U  ?6 x1 t2 m- t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 ~8 Z) O/ M0 i

" F. f0 o: }6 G' G* J1 ]3 W其他程序段。。。。。
# l* V4 h$ v5 l
  u5 K, h; |% U" m2 I( d   free(x_d);
: ]5 l: b1 @  m' u! ^; C
8 W. `! Q$ l( d- d) V使用DSP侧单独调试功能,验证动态申请没有问题,
: i/ a7 b" |: d7 \& u2 ^
1 W. n9 I) l+ D9 t0 e. h但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 g* x7 r: }! p% T2 g, \
; g6 I- a% v( H! c
3 b5 d1 k) I. ?6 c; I2 Y

: Y( U- U$ ^- l" O& }3 `+ S) P* L! _

2 S2 }; F( j2 w1 d
0 `1 r$ N2 X' o/ [3 V' z! _$ Q' B# r7 o* x0 W9 `4 U4 d% d! U

5 @) d6 V2 E0 u, o( ]  C& T9 [4 B0 m1 j
6 R+ v3 e* E+ p: X# Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- r6 O& L& r  M* {$ T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! D0 }  V" _3 m0 F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" t; _6 C5 r: P# K. p
8 e2 d+ X: R$ h
是不是需要在DSP.CFG中进行配置
: c5 f% m( T% x$ G2 v* K我现在的配置为3 _/ e; c$ ~& e# l( Z

5 c" A6 y! y" `5 ]" e' _/*. k2 b* `4 }% K! f0 O- D
*  ======== Operating System Configuration ========2 l( x/ L& o4 w! P
*/
6 w8 |/ x6 t9 i9 i5 Q) _
7 V6 C' D7 n+ \+ ?+ d% G/* no rts heap */4 J  t3 k. t- g) h3 g% C
Program.heap = 0;
; i( S4 y/ |, B* J  N+ b; q' ^Program.argSize = 100;  /* minimum size */& Y# d  m4 i2 D* A$ R/ c0 p- z7 B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 H+ @% v# o" Q" O# a: S# @, `: Y
6 R/ Z7 v7 n) g7 ]2 f/* create a default heap */
; d! r1 G4 D; X8 ^' p3 {4 i! t. \/ Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ ?. c2 P" r0 G" z' \" l/ Ovar heapMemParams = new HeapMem.Params();( X; ~, w. c: e& I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. Y  n2 B7 ?! l8 K
! U2 A1 A. H. w5 r) n: ]" M1 T; H
var Memory = xdc.useModule('xdc.runtime.Memory');
/ j6 x) \, a$ I4 |0 r/ pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' a2 i# K! b2 X, b, j6 j; \# c
* A8 s' D% N: f9 d
/* configure System module */
+ G2 I8 |* ?6 n  f; S5 U$ M2 `6 xvar SysMin = xdc.useModule('xdc.runtime.SysMin');
) b* h! a( R' \8 f& [& Q( \SysMin.bufSize = 0x1000;
9 o+ K5 U% j4 XSysMin.flushAtExit = false;
  f9 }+ h5 {, @) c0 H
8 i+ z8 P& |3 dvar System = xdc.useModule('xdc.runtime.System');$ \2 K( g( D7 r  c8 I! R
System.SupportProxy = SysMin;3 \- n# I' g+ w2 T
6 [; Z. S: o& G1 `5 _. S
/* configure SysBios to use the lower half of Timer 1 */
$ Z/ u* E1 ?% {* g* ]1 w% y0 evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 e8 b. q+ G# C- W, g. Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* a5 ^8 L. N. |' X, C6 TTimer.timerSettings[1].master = true;
) t% H& @2 o) B5 |Timer.defaultHalf = Timer.Half_LOWER;
3 O; \# ]4 i! o9 iClock.timerId = 1;
# b2 l9 X5 y+ [* K0 s9 q! X9 R. v. U. s3 P% p! B4 |& \; P

/ B) @/ J1 `1 R/*0 z3 q- K1 \& r- z* C' ]0 f
*  ======== Miscellaneous Configuration ========
* ^& ?* t! g8 M: T: D  S6 `2 V */
2 U9 a9 O! b0 }- s( M0 J. X
% h& P! i: h+ p. P- l/* set default diags mask */8 R6 i! S% a' I! G+ o8 g# d% K  @
var Diags = xdc.useModule('xdc.runtime.Diags');+ @7 R( _6 Z9 G
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' f* a' o4 q' @" t, \5 Q' J' P8 D4 A- f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ h( Y2 ?$ K) t6 Y' B. ]; ]0 h% LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) w) L" G; N( s1 W7 X
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 H  Z1 l; j$ l9 ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) x, j# s, ~$ [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 H1 l  a) F  ~
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, y0 i6 G' {9 r  g7 Z' X( L7 `
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: o5 a7 f$ d7 ]$ P
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) g4 V! ], z5 \& ~" a/ c+ W
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- K9 l" O, Q1 `/ q" cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: I5 P6 F) D" Z( e4 y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 c# d/ n+ E5 v/ ?+ x. W6 O9 P/ |" _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, \: F# p3 O2 O2 \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 @! w2 Q# _7 D3 f2 `Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) L0 b0 T" U4 H5 t* E8 ?6 s
- N+ a5 c' S3 v% u4 W8 l/* override diags mask for selected modules */8 L' Y0 m+ j( _- }3 y+ u
xdc.useModule('xdc.runtime.Main');' K6 M+ D( h( u2 C4 p+ P2 ~# `
Diags.setMaskMeta(6 O" X; l9 M2 ^1 z! K  W8 W
    "xdc.runtime.Main",$ t0 }* h; e9 |$ J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 D2 m: T/ n! _5 q
    Diags.RUNTIME_ON
0 ]+ `2 Z' y: j5 O* h- G);
# \/ o! u$ r4 ]
, C; ~( Q( h# H: \* w  Wvar Registry = xdc.useModule('xdc.runtime.Registry');
5 `: W! \  u0 PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. Z. }$ N: s! ?: c! N: nRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# P* J7 U& m: y# X" K  A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 ?0 Q! d/ D8 f7 s3 bRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' D; @# j/ I. |" L6 c5 K
. h% O. d( U; a0 F/* create a logger instance */
. r& u4 h  m' F2 Q  xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ c" w, z: m! S0 C, _' @var loggerBufP = new LoggerBuf.Params();) h; Y. G" Y& u; v! q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 F* Q0 Q) }1 Y7 g9 K& z* qloggerBufP.bufType = LoggerBuf.BufType_FIXED;8 _& N4 ^: i* v6 d2 |

: ?4 T+ b9 h- Zvar appLogger = LoggerBuf.create(loggerBufP);8 G5 |" Y4 z  R7 w$ K
appLogger.instance.name = "AppLog_Core1";3 Y& M( B* l0 J) _: h9 n% ?3 P6 k
Defaults.common$.logger = appLogger;2 G3 ]3 o: m% @; m0 O/ `
Memory.defaultHeapSize = 0x8192;    - V8 V1 R) H- J& ?. p% r
Idle.idleFxns[0] = "&LEDStatus";* ~8 k/ w' Y8 A/ }, w5 ]# a
Cache.initSize.l2Size = Cache.L2Size_32K;
' o$ u1 E! i/ n/ y* a# o$ \- E. }4 n7 W  m" o' q: q
回复 支持 反对

使用道具 举报

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 */5 _' o  d; |* B, |0 L3 u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% Q( `9 A; D6 J# l" \7 o
var heapMemParams = new HeapMem.Params();( y- u) p. A: z/ k+ G* n" h* d
heapMemParams.size = 0x4000;
0 u* ?1 W2 w3 q" ^
) g9 T8 a, V/ W) T! Avar Memory = xdc.useModule('xdc.runtime.Memory');
. q! ^. R' X, N* \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) i1 E6 y1 a0 @

; B7 K, L. V( l我大约calloc  每次共计大小为5K*16bits,( b) ?0 A" ?# b' r6 p# X6 ?
而默认配置才0x4000、需要改大。
$ ]0 r, [! C- J7 Q% b
, X9 u8 U; z9 `. c( X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 s# L# g0 Y# b0 I, L
Program.heap = 0;# L/ v0 J, l0 T7 D
Program.argSize = 100;  /* minimum size */
' p; B$ y6 g8 Z4 PProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 03:11 , Processed in 0.042865 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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