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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

+ s+ r2 \0 |3 ?: \" o' D) a* k7 j7 l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" K6 j8 `: y& T  O. R: d) \1 ?: ^+ U
$ b3 i0 g% F" l4 X9 W( H7 e7 n其他程序段。。。。。6 M) }+ l- a' T. K

$ F8 {6 j$ N( O& w   free(x_d);
6 }+ M: v: ], F, z1 h; ]$ G5 C
8 ]4 s! y& p2 L- [% }% d使用DSP侧单独调试功能,验证动态申请没有问题,
# k: V( |5 p. G0 D3 \! ?
7 _$ U& p% S( Y3 A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 p9 `2 l. Z) p) v6 g- J' k( w+ `

4 Z" b' |2 M. C6 L1 T$ h* f6 g
9 j) M) g2 `7 ]6 |
% i5 C/ K, Z  Z- ]& `) j
0 B3 H* ~3 p3 O' ~9 `6 x8 u, m5 A  }
1 ~: E" E$ u  U  X/ r1 L: ^/ N0 a6 j9 {9 j' v
  I5 u* o0 k. z! w: o: B

- a2 G' j8 i+ O% B" A) O. \9 ^9 s+ d5 w
) c. b& R. D3 y4 K6 a+ u5 m4 ?) y1 [/ m0 Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ v8 z2 \$ o2 q& d6 j" Z* U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" X) }% o4 }* P3 A8 X2 q' K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 G0 Z# G1 Y' u2 R0 Z
, R5 _3 |# H/ V- r* l0 f' i. g0 F
是不是需要在DSP.CFG中进行配置7 i/ \/ K4 E: K; L- r
我现在的配置为% k+ Z& C% R  R) [8 M! ^

) f$ u" x, {) {7 y7 J/*) U% g. x/ m. G
*  ======== Operating System Configuration ========8 L( _, X; u. h  c& I* b. C- P' Y
*/
. E/ t1 o2 Z& E0 ^5 ?4 u" E" ]! t; n2 z; X
/* no rts heap */
& Q& p: o  ?/ Y5 y5 _; iProgram.heap = 0;; o/ u* V5 ]! F
Program.argSize = 100;  /* minimum size */
& x, ], o8 h; ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ l  [! Z( E2 \; w
; O* p0 O+ L- e- ?' G: ?
/* create a default heap */
9 x5 L3 j( X7 S% d- i: Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 B7 h8 C1 W% j  S! r5 v3 x* N/ g7 ivar heapMemParams = new HeapMem.Params();- q! L0 f  J6 f! H9 s" b& K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 l) y1 s7 _5 ]1 ^2 `
! j9 D" V6 u* n" s" Y  I
var Memory = xdc.useModule('xdc.runtime.Memory');% T% r2 g) i: j2 y4 h, R, `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' F& t3 ?! {2 b1 r: y$ k8 n- R6 V

( S9 S1 x2 D, R1 k4 m  R/* configure System module */. S4 ]- C0 h! `: H( H
var SysMin = xdc.useModule('xdc.runtime.SysMin');: q  Z* Z6 r* `7 d2 a( ]$ H" j
SysMin.bufSize = 0x1000;7 B8 p7 h" `& _* ], L2 z" A
SysMin.flushAtExit = false;( @5 `% G; c  M( J) E

* Z# c) T! [3 h+ nvar System = xdc.useModule('xdc.runtime.System');2 L& _; ?) b4 K8 j, f* g
System.SupportProxy = SysMin;& p6 Q* c, v* q0 U, o) X) Y- C

; C0 Z# e! b9 W. t* R  e/* configure SysBios to use the lower half of Timer 1 */% ^* f9 G  M# X0 B  G% d" ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ `+ A2 a/ q8 I- P: ]  Hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
# t. ~, K' d& V: M: ATimer.timerSettings[1].master = true;
8 `; w* [1 U) ]Timer.defaultHalf = Timer.Half_LOWER;
, W5 G! R9 w( X+ ^( ^% gClock.timerId = 1;& |; A! L! T8 j: p2 {: B3 C, I0 r
  V- [, ^  f. J) l% U: [
$ ~, ?$ E! z( N7 B' k# o
/*' ?7 u$ m$ v3 T
*  ======== Miscellaneous Configuration ========+ ]; v6 Y1 q2 M& f) Q9 O
*/
  v8 s- h7 u( g3 V& \5 _' B0 }1 P5 J3 v+ A4 H. G6 C* S- }
/* set default diags mask */
; d* ^4 s0 H- F8 P  w2 tvar Diags = xdc.useModule('xdc.runtime.Diags');0 d7 Q: L# l4 R4 f, A1 D
var Defaults = xdc.useModule('xdc.runtime.Defaults');! c! f" S. o1 Q7 A. M2 o' D
" W# j( r# s) \! t3 u. o4 N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 `, R1 P+ ~# s9 V( m6 KDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 I8 A$ a3 e$ E4 @3 i5 hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 ?& X# T% K+ l0 V- f4 }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// D, d) p8 W* b
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# |7 |* T4 s, @1 i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  D0 f# h" \4 y1 y6 f; IDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( M: V8 ]( j/ T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 }) c& |0 G( @4 Q2 D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 M3 J  M5 ~6 d9 I. u3 U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, V+ ?  Y7 N( e- n& N) D" i+ BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 W# ]& w7 S3 b9 @& ^
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 H6 t* k. z& H# V
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ a! L* J; F' s$ f: ~% t3 ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 z; {4 r7 g0 U, l0 X$ R, q9 C( J

, J+ b- g8 _8 L  f* V/* override diags mask for selected modules */! ^$ A# \* Y& n
xdc.useModule('xdc.runtime.Main');
" q% I( r' @/ l5 j4 B$ p) aDiags.setMaskMeta(
/ f- U+ P" A7 {2 l    "xdc.runtime.Main",2 B9 D# d" f" j2 M: _& y% [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" q6 h* p, i4 g4 L$ h/ G8 B- I    Diags.RUNTIME_ON( y' t, j/ \7 ]' u  e* W( R
);. X- P" {& y6 R* E& S

; J' b* r2 L, }/ `1 _var Registry = xdc.useModule('xdc.runtime.Registry');. ~+ M5 I. c  i! r6 {- ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) T& r3 C8 ~. k0 v3 [3 O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ i: X0 F: V/ v; {/ j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 S1 b! u% P9 i, @# w, K( J# jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" U% s& n" H+ _% M
7 g, i- a' G6 M/* create a logger instance */
7 F( _! V9 `& g) i1 P& r( O6 ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 @0 |0 W% `0 G+ A- r' U- w9 f  [var loggerBufP = new LoggerBuf.Params();
; y' i1 P. S( xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ q$ F) u, f- P8 o3 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;, f& {4 X3 ^6 S* u' I$ s. O

+ d! B- t) z: _var appLogger = LoggerBuf.create(loggerBufP);: U' N1 u2 x8 J( d! v
appLogger.instance.name = "AppLog_Core1";
8 ^- h! v: V1 L- ]* v1 |6 t! pDefaults.common$.logger = appLogger;  k/ t9 a( R4 A. T& F
Memory.defaultHeapSize = 0x8192;      h( @# @8 \! H& Y) @
Idle.idleFxns[0] = "&LEDStatus";$ y1 C8 h- ~$ G- Q' |
Cache.initSize.l2Size = Cache.L2Size_32K;
! Q" [9 B+ S3 C( J
0 ~. l. D" `# s# H. R. p
回复 支持 反对

使用道具 举报

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 */, X6 Z% d+ G! p9 ?0 U# k8 w- \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; }% G: q. D  R' ?( h5 A; \var heapMemParams = new HeapMem.Params();3 [( c2 o' x1 r# U4 G4 M
heapMemParams.size = 0x4000;
1 K9 t0 s5 I2 f0 Z
: q& W$ z% ?; L0 `/ I. @var Memory = xdc.useModule('xdc.runtime.Memory');3 ^) r% @% y, u' M; @/ S( y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- O2 k5 I( S$ A- r4 P
: N1 C  D! z) q1 U( p" e
我大约calloc  每次共计大小为5K*16bits,
6 p1 D/ d# c4 B( ^. d& h而默认配置才0x4000、需要改大。
* `( g) z3 O) g/ O" c/ k! M$ x/ U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// u6 G- |5 B$ L, W  [* m
Program.heap = 0;9 L) _- h. a% \0 B4 g3 z" S
Program.argSize = 100;  /* minimum size */8 O% S) c) ?4 K( D+ [
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 14:02 , Processed in 0.045004 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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