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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% C% Q4 z& s  n0 B5 @- t
4 p) C0 G5 G% E$ {: h. x    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 R4 q/ ^% n# K/ t5 q
3 P4 w% E+ z3 w0 w. V7 F
其他程序段。。。。。' n2 I  p  `! @# ?6 H$ Q
; E% e: I% s7 }1 S7 A8 S7 ^3 e$ o
   free(x_d);4 s; D. B1 ?# C
: u. X! B* o* c% P9 J- I7 b" ?
使用DSP侧单独调试功能,验证动态申请没有问题,
5 t" q5 p' q# j. w6 w% }0 h4 y6 K6 m* B' w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 X! ~" W1 z" W
; X: h4 C. {( x5 Q) [, [. i1 D

' w* i1 s! x5 a$ I+ r- }$ D  C  a$ x

/ Y0 s$ k$ Z$ E( Y7 [2 z1 c
3 j9 o  u" x  M' E) O3 k1 }( b, g9 d& o1 Z6 I% o. m) U0 B8 i- {

* I: L  c4 o9 x8 [0 K9 G" q. u! {# j8 I8 b! }
" l8 w5 `! `) m5 {* |+ r

* ?- c: J' e9 i- L: L, I. p$ D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* t* g  G) M6 v# O' P' O9 M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' X) W+ @% g; g6 ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& ~0 a% F1 F; u* w) Z0 `: S5 y

: [" @/ C" ~% [9 H是不是需要在DSP.CFG中进行配置) Z7 y+ M" G( k6 f4 V0 d5 h
我现在的配置为
8 W; ]7 \  V' a1 f; x
& \  I/ ~/ }  E7 O+ a+ h/*
  L" R4 [6 I* K; n% j' E* g/ j *  ======== Operating System Configuration ========8 A$ z, ?. m5 l- a
*/
7 K  a3 R. @. a% U- R$ U- G: Y
$ u" K: D( h3 e  y/* no rts heap */
2 y4 S) c7 m9 h4 w+ g: S* fProgram.heap = 0;6 h( f. I3 Q5 W- w. [/ P( S
Program.argSize = 100;  /* minimum size */- g* H( L: ~9 z7 Q, q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 ]! p  ]( V+ m, a! D% ~5 y

& {. }- n0 t2 {3 ]. v/* create a default heap */: F7 M' I7 t( [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" q4 [* L4 V8 b- Y8 o/ B/ I$ kvar heapMemParams = new HeapMem.Params();
5 l0 J7 ^1 t% g( N! C: xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ G7 D2 O4 Y9 K8 z+ m( k! \' h5 k

9 c, M* }" J5 _! @! R
var Memory = xdc.useModule('xdc.runtime.Memory');+ a6 z  b6 y# N( B1 I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ h6 L: _- C) f" Y) J' D, C

0 `  K8 h: _/ L; i- |% }* W/* configure System module */- r9 S8 G& l) _7 w: @. c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 W' T) `5 q& L  m6 ^/ JSysMin.bufSize = 0x1000;. U6 U) Z5 U, N/ B" z0 j
SysMin.flushAtExit = false;! I5 E" p! Q; k
: y" s! r* Q+ L5 a/ b) `
var System = xdc.useModule('xdc.runtime.System');
2 s5 ^! @7 |' m0 W  k& LSystem.SupportProxy = SysMin;" _# D4 X) M8 \/ u& h8 h8 C* {1 O

) |9 |+ L* b! ?0 j/* configure SysBios to use the lower half of Timer 1 */
7 S% o9 B7 Y% j1 d  ]+ rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( X. z" u" q$ Q2 N5 }( _+ f* xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');. q" L, ^( O* G7 A; X/ l* A2 N
Timer.timerSettings[1].master = true;( A- ?! n& I+ @; S% F* @
Timer.defaultHalf = Timer.Half_LOWER;1 K) J* f! A0 Y+ ^6 U
Clock.timerId = 1;" M4 F. Z! [8 Z; G  g  z

& v  U2 M# m/ [# R# |' d4 f2 |0 x: H; ^& {  c0 }# O+ T
/*8 w" y8 n0 _) {& c& ~& k# }
*  ======== Miscellaneous Configuration ========/ q5 f" o# k. q
*/
  E& a& S' m% |0 V' k, S. _5 ^* _; \# O' W, y* B9 o2 J9 @1 r
/* set default diags mask */8 v. B& h  l' ~3 ]' Q
var Diags = xdc.useModule('xdc.runtime.Diags');
- w$ }. A- M2 s5 H' s8 f; {( T  Svar Defaults = xdc.useModule('xdc.runtime.Defaults');
# a/ `% B& l' G, r! ^
6 D; P3 z5 F; n4 M7 P) mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( d9 V9 V7 I7 c) `$ M2 B3 c. F3 {
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" O  x# w9 I; QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 X! C4 @" Z& H- Q! X9 UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' \: F3 {" `5 ^2 i% V5 ]
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 U  R2 b- u* q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" t* F, D0 N$ q- i' E2 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 |- C" D: Y- u4 \# q& ]% T! N$ i
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 ~+ E" g# ?  e1 p; F$ P+ ]0 mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 V* u4 g4 Q+ U7 H) N! B: e
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 m- \" i& \% N3 f& |+ P% `4 V% n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: B& Z+ I) n  |* n, R" y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 A1 F1 j9 d% f) @
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: `* c- ]/ E0 iDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' w( H+ P: k; |- t5 z3 s& |
6 j  j7 x4 d- L6 Y: W6 L) Q* c
/* override diags mask for selected modules */' s* s8 U/ o: p' a
xdc.useModule('xdc.runtime.Main');3 E! H! W, Y5 n
Diags.setMaskMeta(
" i0 j/ y1 L( s+ Z1 Q* a! o/ @    "xdc.runtime.Main",
: _' \4 H0 \8 @. k    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 t$ h' i6 p% G! }    Diags.RUNTIME_ON
) w: Y( z( T& ]  f# v" H4 k1 `' O! m);1 x5 |' F4 g0 t' ]
$ ?; E% C( ?% I' |% [
var Registry = xdc.useModule('xdc.runtime.Registry');
$ }5 r1 S+ ^8 k9 s2 P3 G! m$ z! ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 K1 n6 P- N+ ?# ~+ ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ K( n6 F- E7 x3 ^, D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# c% m, g! n( h! l% w) m7 ]6 kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( ?. s% ~, y$ W. R/ h% y/ R
: w; H! s0 f  g/* create a logger instance */+ M  C2 q  z6 S( |. W" I# O0 u
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ @1 e9 g$ ?/ _% Svar loggerBufP = new LoggerBuf.Params();& s" _3 H! v  W5 a6 ]2 t  H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 w7 j2 D9 t/ u- `5 Y# ^6 @. K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; P$ F. J+ y( A
3 x; K  w/ R+ O0 X$ v0 @/ y8 Tvar appLogger = LoggerBuf.create(loggerBufP);
, p4 |/ B, N% m& V0 [& z  \appLogger.instance.name = "AppLog_Core1";$ x- a0 j& g8 Z' E4 \  M5 x
Defaults.common$.logger = appLogger;
( @, a. J+ V% B: l. _8 aMemory.defaultHeapSize = 0x8192;   
: O9 w& c. I0 I& i4 R+ A4 {Idle.idleFxns[0] = "&LEDStatus";
$ `9 _+ V& s- C6 zCache.initSize.l2Size = Cache.L2Size_32K;/ P9 c4 o+ \% B) U* Y

% J3 U- p9 [+ f2 N4 x9 C6 w1 P, p. Z
回复 支持 反对

使用道具 举报

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 */# j+ K+ x( l3 [  P, u& u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 `: [- Q) T( w8 J4 I; [4 Q+ qvar heapMemParams = new HeapMem.Params();9 w9 T, C. D- I2 {
heapMemParams.size = 0x4000;
. o2 t/ ]' P+ o5 }& E
% }, I7 _- |* {var Memory = xdc.useModule('xdc.runtime.Memory');" L* [9 C0 A2 U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 u4 {' K1 A- R& ?' i7 j: B7 [. u- b
7 ^8 }! U  K' r6 {) ]我大约calloc  每次共计大小为5K*16bits,
3 B# M& O, t7 b) @而默认配置才0x4000、需要改大。
6 [2 _  V' m! L" d. Z7 n* N' t. t2 q$ V, l! l# {% ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. R* c- a) J$ M; ~4 H( ~7 N* H
Program.heap = 0;, U; d+ g" D4 O* e
Program.argSize = 100;  /* minimum size */" l- M6 o8 n& v; e) A- Y4 ]
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-11 00:42 , Processed in 0.045414 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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