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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ ~: U7 }9 a8 _3 W0 M5 @! b6 U& |% g5 W5 T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 X! G1 S+ Q. ^' C

* n% T2 E: c( d  u. p6 U, P其他程序段。。。。。
/ s0 q$ N! h7 j/ h! {" h3 O & h& Y" ]7 ~, @( H
   free(x_d);
: c6 S, p8 T; \% ?  ]3 u
( I1 L1 z7 ^2 N$ h' L* I" E! \使用DSP侧单独调试功能,验证动态申请没有问题,8 T/ q5 O4 [8 H2 V3 @5 k# m2 x
; \% |9 y( S4 z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; N! |& b9 I- x  D

) A/ O- m$ b; S) c8 r8 s; \
! t9 J2 R6 n  u2 J1 w# y. G* R9 _1 M# k+ E, a
5 m/ _8 b% C& e; J
4 u: A3 K, g; U* |% s7 P

/ Z* N% \: _# A: t3 d' \
' ^9 X4 C  q* t# z9 x+ H" X/ P/ M- V: V- j0 s
9 m# z0 C& ]4 |! ^/ {$ I

& L8 ]) A9 [' T2 x5 `+ e8 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 f9 e1 B3 h  m+ ^/ q( G( T) V
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( W1 Q: x) ^8 ^8 k+ K8 R/ p! w6 H8 H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# e5 \" j6 }/ k4 m+ m$ k; c
; S2 v1 F6 I# N6 ]$ k) f. O
是不是需要在DSP.CFG中进行配置
" Z8 P1 G  W/ P) h+ R7 |我现在的配置为' S) Z; U5 l1 `+ _' k/ z$ G
* o8 [; n- P$ l$ s
/*) d5 e+ F6 T% G
*  ======== Operating System Configuration ========
2 B/ ~5 e  n* y *// r+ c6 I; h1 i) n% v

3 g4 v. z: z1 s$ ]8 j/* no rts heap */  R5 D3 z- Z9 h
Program.heap = 0;: ]9 W' b  J# T1 c
Program.argSize = 100;  /* minimum size */3 p0 S( c) t( d2 B+ l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 M8 p  N$ p: j% S! M
. m9 M  ?. t( d1 ]4 p+ C4 j6 F/* create a default heap */
) a# H  `0 z2 `  ~' L0 |! l  V- gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& ~7 G1 m6 W4 m- ]
var heapMemParams = new HeapMem.Params();
+ S( [/ U: |4 a' I. D/ g$ UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 l7 D$ Q3 @. N8 ?
$ R$ U) p4 u* F( ?" Z9 C
var Memory = xdc.useModule('xdc.runtime.Memory');! T: b% l- V, T2 z6 a2 Q! K% I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 v6 ]- ~& R6 k: j* F# R3 X0 [$ k% j0 R9 s1 y* f
/* configure System module */5 G, ^, R- k" {5 s6 N7 Y
var SysMin = xdc.useModule('xdc.runtime.SysMin');  v; g; M; O+ P% L( F8 Z
SysMin.bufSize = 0x1000;8 k4 ^# c8 a. h" {% H
SysMin.flushAtExit = false;) ~7 w! Q# @  G7 W4 s

$ H1 H# k5 j# n( e$ ~1 E/ p& Avar System = xdc.useModule('xdc.runtime.System');3 Q) j' G& E4 m1 T, {# F/ t
System.SupportProxy = SysMin;
( J" y! Y% a8 L6 h6 R7 ~( K: u  M, |. T7 L- c% P6 l. g
/* configure SysBios to use the lower half of Timer 1 */+ I" o. s5 [$ U* @9 K1 Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! l4 n  r0 J+ m6 h2 l& [* V5 ]  x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ X+ e6 g( G9 }# ^Timer.timerSettings[1].master = true;
) p2 k  v  J4 G4 rTimer.defaultHalf = Timer.Half_LOWER;4 n8 s6 Z& G, J% }( N5 Y- n* L7 [
Clock.timerId = 1;
# D& O# l8 ~& w
4 x9 z6 d# c' q9 U( ]4 K
( B1 Z2 y7 @& Q  ~  k; \/*8 V; T' O1 }- }& C% K8 i
*  ======== Miscellaneous Configuration ========. U8 G3 Y" d' x. W# x5 @  j
*/
1 {# s) M& Q& V! ]) C" z2 ^( N) Y- S6 Y
/* set default diags mask */
: J+ q! r! |( J! O9 uvar Diags = xdc.useModule('xdc.runtime.Diags');
2 j7 R9 `- a* r4 p. t: x2 H3 cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
. D# q4 x, \9 {. J. i, j# F7 V1 u0 L8 ]
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 v% _% ~; A2 }& r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- f3 ^1 N9 }) l( r4 K# wDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 f5 @# a# ?, ?( n$ H+ ]8 EDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- a) Q7 y: t+ l" R1 y% z, I8 I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% g9 k: a6 V, y9 v2 O$ ?4 P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 D0 f8 R4 L/ ^0 t9 ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 s& y! ?" y2 o- L; Y; e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- I( G. N! f8 z0 r5 J+ f0 P; WDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& M3 u5 ^7 y6 Q' W1 DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# H3 O/ C/ \: T) }3 Y5 vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. ^" B& ?7 V9 J1 x  Y; B3 a
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ r8 c# m! H' t7 `+ v6 @$ F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# ?" x. v7 F  q% K) E6 G+ K6 [4 }# d
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 K. V" t3 [+ t# o8 N
0 d3 l0 M2 a5 W. U+ J% F& L, \# \/* override diags mask for selected modules */
% p( x5 L% ?0 L5 [. [( pxdc.useModule('xdc.runtime.Main');( _, b. B  R8 \
Diags.setMaskMeta(
7 x/ U# e* h, ?( \9 ?    "xdc.runtime.Main",* E# t/ z7 [# |  ~; r4 ^5 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; b7 o3 J' }5 M" c8 h- X2 q) I
    Diags.RUNTIME_ON+ L) e# a0 u& N) O5 T6 y+ K
);6 s' Q1 M" ?# |- J2 B: ]" U0 J7 |
2 N1 J% [" p8 N" U  G
var Registry = xdc.useModule('xdc.runtime.Registry');
8 Z; D% _! k# U: zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 S% v$ V: o7 v% n9 [0 z3 D" `
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# y/ z8 @. y  |/ z2 o( sRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;  n0 r2 B" [" @6 H. [" H
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" q- g% w9 L$ X7 H, {( o! r
5 }2 _' i5 }, p/* create a logger instance */
2 i3 \& f2 L4 F- X5 {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* |. ^2 _8 ~; N# N1 Y% l! }% R! [
var loggerBufP = new LoggerBuf.Params();
; }2 N/ o7 s* S6 s" ]loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; t! }8 u) x& ^+ w. Y, ^loggerBufP.bufType = LoggerBuf.BufType_FIXED;
: |/ t: t  V* m7 h  b! q! k8 I. J+ M$ g$ H. N, a
var appLogger = LoggerBuf.create(loggerBufP);
/ J8 S6 A- ?. v' WappLogger.instance.name = "AppLog_Core1";, ]6 \4 J* f# ~$ T' h
Defaults.common$.logger = appLogger;
( f8 P- l9 R1 `. x& HMemory.defaultHeapSize = 0x8192;    , @& e4 b5 X" e& }3 z8 Q) R
Idle.idleFxns[0] = "&LEDStatus";/ J7 b- Z1 w& a" k" M! a1 Q
Cache.initSize.l2Size = Cache.L2Size_32K;1 S3 }! ?* Y; D1 w3 z8 y* G

. _. V" y; w. k% W. x$ j; I9 m/ x
回复 支持 反对

使用道具 举报

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 */! T9 y7 I8 \% x* c) w: y( _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' d3 Q6 `, \2 S) zvar heapMemParams = new HeapMem.Params();  q  }7 F" {5 A* t0 \" H
heapMemParams.size = 0x4000;
2 M5 S+ I0 ?; ]: Z. s
1 f$ Y9 e5 _+ T2 ~var Memory = xdc.useModule('xdc.runtime.Memory');
7 J' P7 O8 `* A* i( i/ mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! }% q- S# @$ l4 A/ N5 r

# u& S" r- Y; b1 N  U6 \0 S我大约calloc  每次共计大小为5K*16bits,- G, h5 m/ z6 u) e' I" X( X1 u2 p
而默认配置才0x4000、需要改大。
' F8 r2 |# ?3 X. _0 I
' ^' T$ a0 y7 r/ [; i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 S5 D+ |; z! N( dProgram.heap = 0;
0 A8 }6 J2 a% n/ e& _$ y; DProgram.argSize = 100;  /* minimum size */
! P- F$ b" b. x: RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-3 03:19 , Processed in 0.045516 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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