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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. Q5 Y2 q8 P/ g' \
3 t: }9 |# ]1 _- _6 U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' H0 ~% L* u0 L6 f3 a5 ~% }

( F! L7 t: r8 o! q其他程序段。。。。。
( I9 m* g# Z/ [$ t7 G) x
% o4 g! J( N4 i7 n7 f   free(x_d);, }  t. I8 Z/ L6 e$ D+ Y
3 L9 f" p( ]& v0 l& V9 P; o2 V
使用DSP侧单独调试功能,验证动态申请没有问题,
3 {7 Q; I, Z1 L' X+ ~- Q( a" [+ ^( l6 E% Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! r' m7 b1 o  M

: ]( C& Y9 v% c, k  U, T
0 B/ z% ~% V7 W: l# H4 K
8 Q: ]) X- b# G, p9 A$ T6 I  ?" s: z4 z" u

+ C/ [4 W* z( y! I0 U& S9 }
4 @8 ?  `- u: {2 d* \
5 P  B! G; F) b/ I; X: Q- Y: J) }
9 r5 O  [! p4 u3 Y. ]- v0 t: x, l+ c
8 O1 D8 L4 [* ?( @0 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' X! H6 o/ w+ o) R" F9 T1 B
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 x: ^( b8 Y6 d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 f9 P3 t) [8 H1 w  s4 n- @

( F# X) G) b0 q% F$ p0 ~* h是不是需要在DSP.CFG中进行配置
- I. J7 p: C5 N7 i7 \! M我现在的配置为4 ~6 g6 \0 p& {6 Q  ?

5 Y8 d3 Y+ c5 v8 c3 Q" h/*2 r6 O2 n  ~& p( e
*  ======== Operating System Configuration ========6 q8 Y& C/ F# \- _; P/ B+ f. M* C
*/
& b) l/ @: |' P( [" ^: E- |% K% a! ]2 q/ n0 D
/* no rts heap */
- u6 J  v) _. `' q' I9 BProgram.heap = 0;  W1 t1 D& Q" Z; T5 @
Program.argSize = 100;  /* minimum size *// c+ b/ p; N+ N3 W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( C  M( h  @, V: Z  ]# T1 H! N! v8 h; }9 z" Q
/* create a default heap */
4 \: Z; n; O# h3 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( K: @3 ~3 E  t
var heapMemParams = new HeapMem.Params();
2 A6 H1 j5 T2 f3 a& D0 DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 j, m# {. e9 r

- k8 c+ d: n) d8 n0 W5 M
var Memory = xdc.useModule('xdc.runtime.Memory');
' J1 w: z0 ~1 }% lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; a4 g. [' V: P: _

& X, U; W4 o5 t) y! H/* configure System module */( q! ^, _& ^$ J/ z$ `  j. m
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 A0 m8 k( `2 E* P  Z+ L- rSysMin.bufSize = 0x1000;3 r0 w( q, D  ?1 c3 t
SysMin.flushAtExit = false;& K* u$ Z7 Q: ~9 m

5 \7 a4 ~( p6 G5 G1 l! \! mvar System = xdc.useModule('xdc.runtime.System');6 L" |- C& G. n% u. V6 }% T" |
System.SupportProxy = SysMin;7 S$ m# Z1 }; V9 B) q4 r% c! L1 P
9 ~0 t# m- k& A  [: V' l- V
/* configure SysBios to use the lower half of Timer 1 */* [; Q& S; J* ~% A4 k) Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 v- c; t9 {  d# ]& Jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
( G$ x4 ?! w6 ]* sTimer.timerSettings[1].master = true;# @* S# S. |% e7 P4 E. Q. j
Timer.defaultHalf = Timer.Half_LOWER;
! ?, J6 H/ }4 WClock.timerId = 1;
- @3 H5 A4 c+ P2 S, }
# H0 @3 q% _6 S/ ?& G7 }3 h$ Z+ s$ B* u
4 q4 |( @; O  R! r+ x4 y1 e  l/*& ?$ `# _2 b1 j+ X
*  ======== Miscellaneous Configuration ========+ V0 `  U# {$ C
*/
; p* ~; b: g# ^( Z6 J1 _& D- [: ]* x7 F
/* set default diags mask */6 I# I6 K6 J) V$ s) s
var Diags = xdc.useModule('xdc.runtime.Diags');7 M: S$ a$ \9 _. @0 g( `
var Defaults = xdc.useModule('xdc.runtime.Defaults');, h- l4 D: k+ ~2 {! ~  u2 U; @+ t
4 H% |; X! l% a. d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" g% ]) A7 ]" z3 w5 mDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% L4 f5 o2 X. ?# Y5 sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 _& r9 N" u- Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" o& ], a9 Y) ~% fDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 {/ U/ F$ Y/ y1 Y( ], O0 M1 Z4 p3 UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# h0 P7 g7 y+ |7 c1 _' s" a+ yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 ~8 O: E( C& |, _+ M0 T4 E! r- YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! w1 r8 r% r; Z) y) s5 mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, u. m" _! ?% g0 Q8 A) X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, W! Y/ Z8 ?' K. V) WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ G& ?" Q' L+ G* PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ {( k6 b3 Y; L2 o' ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ y+ t* n3 @' b. L, v4 Z% C: s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' D  \: y" f0 i" O0 A7 J0 M( I+ A' h

) E% P5 j: n. ]; R! J/ }# g/* override diags mask for selected modules */6 f& O7 p0 O% w; O# X) e+ ~; S
xdc.useModule('xdc.runtime.Main');
' M9 X: q5 `0 I* fDiags.setMaskMeta(
; ~6 I  s" l; X) V0 \3 I& u    "xdc.runtime.Main",
6 ~, r9 ]+ |( Y' t    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 I* M5 q# Y( c; c) V* ~% P
    Diags.RUNTIME_ON3 w$ E5 B! N& `' m0 W
);3 T5 I9 s# w5 q

& \: B% A" `0 w5 l' L1 Ivar Registry = xdc.useModule('xdc.runtime.Registry');
7 X9 k2 |/ Y: P! XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' M: j8 y' @( |& p2 V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" t0 {; N" y0 P. {, k# C& vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;' z  d% H9 g7 N4 E* F/ n7 C- S5 P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* p5 H6 U- n% N% ]6 U
0 ]# N1 E0 i- x% C9 C/ q% B4 P8 |/ p
/* create a logger instance */& H! \* i: M/ s# p- s, Q  Y7 Z) A9 \4 C
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ P( n' n2 d$ Zvar loggerBufP = new LoggerBuf.Params();7 Y+ U: `5 u8 l" U- S  c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 ?5 k9 R) ]+ K# ^3 R, x( {loggerBufP.bufType = LoggerBuf.BufType_FIXED;) }' }2 L. n0 Q. X0 ?3 e

9 c& A( [* _3 P/ `var appLogger = LoggerBuf.create(loggerBufP);1 ^& `2 W: k1 X" B
appLogger.instance.name = "AppLog_Core1";
- K. ]  [' J% gDefaults.common$.logger = appLogger;
' p- u3 ~2 {2 U# Y6 M- w+ y# l3 P' \Memory.defaultHeapSize = 0x8192;   
: n( X0 {( D; p: r% TIdle.idleFxns[0] = "&LEDStatus";
3 P5 w: ~* u+ r7 x3 K' T5 \Cache.initSize.l2Size = Cache.L2Size_32K;
( `; b0 e# b2 \: j9 P( y7 M& [8 N3 j, 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 */
$ e5 _$ U8 u, t+ Y! k* p- Z7 evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 C; F, S- l! c' e3 J& z
var heapMemParams = new HeapMem.Params();
% ^. a, z9 e  a# }heapMemParams.size = 0x4000;$ U: h! N7 w$ [' V
9 `  f" I' i! Y+ b6 C
var Memory = xdc.useModule('xdc.runtime.Memory');+ ^1 O6 ?+ \3 i' b8 r0 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 h2 i" ~/ q6 b) ]' Q8 y* O/ i7 E4 q  L
我大约calloc  每次共计大小为5K*16bits,
: w, h5 B, d( q* U$ ]1 C0 l而默认配置才0x4000、需要改大。
" h' E% }2 Q" F5 {: T
. W5 Q% J: U, h: a2 }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 W8 R; J' {( ^: z; y
Program.heap = 0;* z1 S3 r! O7 Q  i& L
Program.argSize = 100;  /* minimum size */2 _" t' V- I' H0 t- ], }* m2 H& x
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-14 23:01 , Processed in 0.049206 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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