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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 M3 s7 m, n1 J4 j5 P

0 H$ o: n  I1 m: t2 c3 W6 O    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& H4 L9 `# D( Q; ~# F9 K
) T! N2 ~0 a/ A1 s其他程序段。。。。。
* X1 }! Q  z* G5 m5 |) o
/ y' R% X( m. ]1 w" C" ~! M: Q   free(x_d);: \8 m8 f3 P: T7 r, x9 x3 g

* O' s" |$ u8 j使用DSP侧单独调试功能,验证动态申请没有问题,
3 E* T- P/ {- I+ Y# w: l
# r3 y3 q8 X* w$ G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 w8 j6 b/ l# _7 J+ R% m2 h8 e
+ R1 N1 A8 s9 z" k4 J

9 X6 S, S/ s7 A1 Q0 T2 H: S: C* @& n) H, ]8 j- n+ q$ K) g* k5 }, R$ @* J0 r: Z
' U* w1 d* p: d
7 D7 ^9 G! N# H$ u! {5 T+ c$ b
! u5 f. a* P9 K% Z% S& K! a, a" k
) R5 X# O$ a5 x+ q9 P' _% c
/ P% D3 ]5 L1 R

* Y; ]) u& K$ J5 B/ k* Q+ M' |' x, k* b: m, Z% B6 s6 {. A- C0 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) E  j' R. t0 }$ Y8 L! B) t3 j: V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) Q9 X- |$ h  s1 n5 l; ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ d# P( L% Q* s. T% m7 a8 r; G' v' G9 m

+ F7 ~, W; W  Z5 `是不是需要在DSP.CFG中进行配置
2 Q' Z, y; ?0 d* ?我现在的配置为
8 W8 D, i* q7 N. C
+ r: `$ H. H0 p; S/*+ Z, ~6 U6 g4 r
*  ======== Operating System Configuration ========. Z: R( v, c0 \1 V7 I
*/- S) z# [& ]2 _) R# ~# p1 a- v
6 e: D2 ?0 U" a( g. G" u* M
/* no rts heap */
' q/ r. {) h  N+ L! dProgram.heap = 0;
4 H" n) c. L% y5 F9 MProgram.argSize = 100;  /* minimum size */
) y7 u( l$ N! {+ }3 |" y/ p: r7 y2 d1 h) o0 TProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 e2 ^& A- b5 U* h  G* o. I1 _* a* z$ R( t  N# V9 U
/* create a default heap */
5 c' }/ m8 X. bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 }' m5 E! Z8 dvar heapMemParams = new HeapMem.Params();
. l; a$ |! n1 s. [8 ?# e9 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% G% `" e! Y4 ]+ A; e" d5 q3 t
* D: S6 p# J. a" o- n
var Memory = xdc.useModule('xdc.runtime.Memory');
4 J6 Z1 N& T+ l" w' sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 `9 h" D* L: N) d: c8 O( `
1 P; ~) {- V8 t" W
/* configure System module */. B- ]8 P+ _$ ~3 @
var SysMin = xdc.useModule('xdc.runtime.SysMin');6 X; h2 ?( X5 \, c$ y
SysMin.bufSize = 0x1000;
2 a( s1 C- d2 N8 bSysMin.flushAtExit = false;: l* I6 x3 L  f- ~

) S# {6 Z- j; R% V& K) t" B; avar System = xdc.useModule('xdc.runtime.System');+ s# y- M; V/ C" m# L) D
System.SupportProxy = SysMin;
" T  R: Y) h) \0 @
, E! C7 u: L1 k9 L5 _/* configure SysBios to use the lower half of Timer 1 */. N: l! v7 A% D* J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 {1 s. b. y0 ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');1 }: d6 u8 h  d) i9 d0 u5 n- K$ i
Timer.timerSettings[1].master = true;3 a- `( _- R5 W6 h" D
Timer.defaultHalf = Timer.Half_LOWER;
3 {. q8 `; @( Y6 D4 p" CClock.timerId = 1;
+ y1 E1 O8 c/ T' O4 J' S; _% S& |, ]" U; C5 F

+ u( }) q: u" h* w5 f$ d: m/*0 g) p# `- W( {7 M
*  ======== Miscellaneous Configuration ========$ M, E; e- C1 x7 `: }
*/
4 x! o9 h9 y7 {& y9 @: a, n& V( |( y: E* D' a, P9 v) a7 ~% K! d
/* set default diags mask */
9 d7 j9 D' b/ f% Tvar Diags = xdc.useModule('xdc.runtime.Diags');
* @3 Q" m" R- m9 [! X- K) Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 e7 [6 q# i+ Z; [: d, Q8 U
. T( i: s5 j# u* U# U, B) _; nDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 C3 v: n+ p' k" Q: ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) u6 R# A0 n- N& d* J% ~) P( uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: m' f  |* J: U0 R/ h: cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 A/ f( M' F6 |4 ^3 k' F# `Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 e: d  w* V/ {2 U; zDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) h7 G, i; I# q3 W6 J$ g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! c2 p6 o7 z( G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) k9 F/ |1 h# a% b# x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( n% `: l' X# V, R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# H1 M$ E7 W6 Y! y& ]! }4 HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- o* E: Y' }; k- C% Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ X1 y2 n3 a. v" C" X1 u! G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) ]( F. h) J% x4 P  c) `* Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 x6 ?! E7 o3 J) P! m. q
. p+ |+ e2 U) H) W9 K7 r( O4 ^
/* override diags mask for selected modules */
/ v1 v5 t9 w$ H: ~: Uxdc.useModule('xdc.runtime.Main');
% y( |0 s' T: y( y+ wDiags.setMaskMeta(
' s2 e/ d9 n2 s, @    "xdc.runtime.Main",2 m5 e- g! d! C% i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 H" a0 r4 k1 X+ D8 O6 T    Diags.RUNTIME_ON: n$ H5 u1 m) T( y. R' B
);/ _# H' Q3 t) ^' E/ f2 K3 J
+ ^7 z1 M% Z5 Z5 E/ Z, b
var Registry = xdc.useModule('xdc.runtime.Registry');- o& o; t2 }' j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 k, B0 c! A& U6 y6 P: }. X% C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# H5 Q9 P* [& c3 q, I: g; qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 D  n( J3 \3 SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) ]3 y3 G" X; Z! e) Z
4 G1 ]! k) Q' G
/* create a logger instance */5 j* k3 U# G* }) Z* h2 D0 A, d
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 M2 i3 i* D9 j4 |) E6 S
var loggerBufP = new LoggerBuf.Params();
# t4 m! ?- b* {1 B( O/ r- p9 K; tloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 n/ Y: d9 C9 ~0 s/ q/ i) k2 ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 t0 C8 f7 ^: i' i; y& J4 Q  {- }0 }( E

7 Y5 V; |* G3 B) R, H' i0 N0 Ovar appLogger = LoggerBuf.create(loggerBufP);! G+ h9 {1 ]2 w: g
appLogger.instance.name = "AppLog_Core1";0 M$ X4 V3 H) B) w+ k
Defaults.common$.logger = appLogger;
# R7 d8 \6 o1 z7 [8 D/ }  O: DMemory.defaultHeapSize = 0x8192;    5 L4 |' ~  G/ b
Idle.idleFxns[0] = "&LEDStatus";9 P  j& x0 j5 q5 ]/ j6 @) ?: Z1 `
Cache.initSize.l2Size = Cache.L2Size_32K;  I+ H8 `/ T; `. H
$ r! t/ C0 u6 E: u1 \. W/ R
回复 支持 反对

使用道具 举报

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 */
; q4 K" ]$ ~6 ?; c( `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& \6 s" z4 d. a% o9 y6 z" C6 W
var heapMemParams = new HeapMem.Params();
; f% d) ~' h- v7 {heapMemParams.size = 0x4000;0 M% R& b. F, K* [3 b+ ], a3 D5 D
2 |, ?% G7 `6 B; h3 y# q9 \
var Memory = xdc.useModule('xdc.runtime.Memory');/ y7 ]; u5 p. D4 Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& P' a" x6 X3 k8 E

) f2 n" _  B$ w我大约calloc  每次共计大小为5K*16bits,0 T8 M( d9 c9 l- V5 J( a' Q8 {9 O/ o
而默认配置才0x4000、需要改大。& F" u% X( V7 S: Q8 `5 f

; I& w. x& f% h  p5 H7 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: H8 `# W" J( M9 P' WProgram.heap = 0;
- Z( q" W3 y, [% b% M% b- [Program.argSize = 100;  /* minimum size */
8 {# j9 O, j0 G) _Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 04:53 , Processed in 0.039296 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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