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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 \( |  m( S' ?  o# h3 Z7 L# V
& M9 F( n( c7 r3 I8 H% K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- y8 E2 ]1 \7 v5 B
! K& u! @6 g# o2 j; l1 y( M
其他程序段。。。。。2 l8 z0 S$ e. c
: _1 N) `* k# ^1 W( f) T
   free(x_d);
0 ]+ }3 s# h/ w
8 E3 ~* J2 ~9 G! h使用DSP侧单独调试功能,验证动态申请没有问题,2 q; N9 p) J( v+ G5 A, Z
$ G% x7 y) {: a$ E! s. d6 K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ g, G; g( O( Q9 e' ~1 }! G

! [+ P) Q5 t0 x# _5 K( \, j/ B4 r: \1 d" F( s

* ^/ f% K6 U3 f% \! g( ?! o; Y7 q8 b! B) o/ j; N6 h
, n0 l: A  ^- ]' h& c$ Q! t
+ P5 I# D: E3 U& Y4 M

% j5 |; f/ k* E3 q/ X4 r
( E, r0 A+ n0 |# ]9 T6 U1 W1 H  Z
; D/ ?. ^6 Z2 N* N; s( b
# n* d! S8 U, ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# T* S; O7 G4 Q; [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 [3 t$ X, z2 x% P(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 `1 a% f3 z' c! L; I- e+ _
- Q+ ?3 j! q" d; L5 x) I; @; i
是不是需要在DSP.CFG中进行配置% I+ z. b2 t" Q) ^: s
我现在的配置为
- q8 ^2 T" n: a. q' R; H* f, S3 ^% |) b) Z
/*
3 `" I% P; [" R- e *  ======== Operating System Configuration ========3 W# N; Y7 q  X  z: [! X
*/
$ H+ J/ e( s: F+ }4 {' M- c! n5 Q) N, B+ i2 o' x$ p, Y+ @" v7 c6 X
/* no rts heap */
" o: k7 D1 ?: }9 E# TProgram.heap = 0;/ s4 ]' ^4 X* h9 a& B# M
Program.argSize = 100;  /* minimum size */( Z' `- @% r# V$ ^
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 H8 f5 o, l. I2 J* \
4 ?; C& e) S9 X* o/ e0 Q/* create a default heap */" Z4 p$ r- Q0 w9 X2 ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: f( E% w" i1 }, R  b; o( T8 T7 I
var heapMemParams = new HeapMem.Params();( H2 `% t. B' y, K1 }' S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% p+ ^) M/ T7 c' L( I' H( w

8 P7 L. c; X8 j) }% y
var Memory = xdc.useModule('xdc.runtime.Memory');0 ~8 Q, N; `; X( _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  X4 c( ^9 I  j0 m) O
7 ^# \2 m* [0 q' q. Y) z5 {0 N
/* configure System module */
4 e6 Z/ X8 ]% [5 a% c& E/ _# \var SysMin = xdc.useModule('xdc.runtime.SysMin');9 M3 i% ~, }' H- E* o
SysMin.bufSize = 0x1000;9 u/ o5 {8 V! `" _  F% m
SysMin.flushAtExit = false;
! m; E4 d, s( Q2 @/ f; T
, r4 z( J" y& U" xvar System = xdc.useModule('xdc.runtime.System');
# j6 X% }8 `2 q- }6 R6 \+ qSystem.SupportProxy = SysMin;& g/ j/ _; E7 K; [6 U2 X" U

; ?* u" N6 m4 h8 I: E) `/* configure SysBios to use the lower half of Timer 1 */2 ]" d/ P9 }8 `4 s' E% r  A4 k: ?
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ h" z  Z( J" }7 }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 ?* F; R8 u3 J0 B$ y  UTimer.timerSettings[1].master = true;) @7 M) V# S+ o- V/ B9 F$ D; R8 b
Timer.defaultHalf = Timer.Half_LOWER;
* s4 j6 w; r; J  EClock.timerId = 1;
. A. w; h# l* n
0 z4 j% R0 Z$ x" v& g, j
# K* m8 E- K* V) s) y. i/*
5 S3 k+ u2 C8 B2 L! Q: M7 s *  ======== Miscellaneous Configuration ========! z! W3 ^3 ~1 e$ z8 I# e& I4 X
*/
) K2 q0 q) K! J7 ]# D% E* m# X% Z5 k; D' p" |
/* set default diags mask */% l# @" z. y9 [1 K2 W
var Diags = xdc.useModule('xdc.runtime.Diags');. E+ T2 h7 o7 ^" w+ c
var Defaults = xdc.useModule('xdc.runtime.Defaults');4 E: V9 {6 m5 q6 k  K7 y7 w% _
% j3 T; H" U/ ~: N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 B* w. S* ~  J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) j" k/ m5 P) |  O! EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 m# |  G2 Y% ^% ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! D( j* L/ ~( L# ]; ]7 }  `6 sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 E- Y6 l# s/ \3 ?5 s) k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ o% I, F0 W) @5 Y+ H1 aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 f2 o, A8 o3 [% T1 g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! W, @* ~9 Y3 }
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* L: Q% v* x, j+ tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 _3 j* k8 }1 D; `7 l, n- C( f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# L. x/ k' x. R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 H" e6 @! Y% `/ n' t2 |) R9 `! D" Q& Y8 }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 h$ j6 V2 r: _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" ?9 C* h) r+ o# v/ J
& E; s- R4 {- d/* override diags mask for selected modules */7 g7 D& y9 `# A- b$ k9 w( b
xdc.useModule('xdc.runtime.Main');
& D8 {) a8 p, H2 k1 T  }& t! EDiags.setMaskMeta(
0 P$ N' G: M' J, J. t. A    "xdc.runtime.Main",
: a4 k4 `* x  d# S& }8 B    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) H8 M6 Z  g& x; S7 A: c    Diags.RUNTIME_ON
/ m% z8 n. C3 z) [, j);; l7 u* t- ]) Q" T" a2 o: Y4 m$ L. L, j

9 I2 I% n5 g% k; o( ~9 svar Registry = xdc.useModule('xdc.runtime.Registry');7 G% V! Y( u. K! E8 O
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% K& r  W- ]% ~  B' Z+ R5 y5 m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 Q. r  c; j6 B# s/ e2 JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ K3 D: f# ^2 I" A$ NRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 Q7 N, d1 P; i. w
% S( _) J+ |7 J3 S/* create a logger instance */% y* Q  ?' Y7 O4 q/ x! Q! z" t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) P: @$ p% b2 ?9 ivar loggerBufP = new LoggerBuf.Params();
! r6 Y  z4 K0 m% e" D0 JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 f, h6 c- K. F* I4 Y  K' z- @0 O
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( N0 a' q  s) o: x1 i) [$ h& f# M, \3 k% j; h# m! x0 U
var appLogger = LoggerBuf.create(loggerBufP);5 I2 _& T) N% `1 C3 J* n# U- D2 i
appLogger.instance.name = "AppLog_Core1";
* v  O0 y9 k8 UDefaults.common$.logger = appLogger;
' W/ o% b* s, r+ {; E5 u: _Memory.defaultHeapSize = 0x8192;   
) u* j3 ?: W5 D, T7 D4 ~2 ^Idle.idleFxns[0] = "&LEDStatus";: F8 w3 L9 A% B& {1 t
Cache.initSize.l2Size = Cache.L2Size_32K;
9 ]# D' k+ E; E& }) D2 |6 U' X8 T# F% l, d: L# Y( e& H
回复 支持 反对

使用道具 举报

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 */
8 v; ^) `% Z+ }/ u4 |' Q$ dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# }5 b# g; K9 {- b9 r% f! F0 E
var heapMemParams = new HeapMem.Params();4 q5 _8 s- s' D" T
heapMemParams.size = 0x4000;7 L6 `* n, P9 T5 v- f

/ K2 u/ S. e+ c  f& ^+ \3 G/ Svar Memory = xdc.useModule('xdc.runtime.Memory');
" v5 B: N: u' l% h% R1 ]$ b5 V% ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. v  o$ m1 a5 I. f

5 f! V) E# H/ J  ?( B1 m我大约calloc  每次共计大小为5K*16bits,/ p* `7 _$ E& L3 i
而默认配置才0x4000、需要改大。3 \; x: M. g& E( u  C( _" @
  @# @" {% \( W1 y5 p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 s/ F8 w3 [% o% kProgram.heap = 0;- o( z8 g. k0 M
Program.argSize = 100;  /* minimum size */  f5 V1 `# s* R3 U( q/ d7 t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-19 02:48 , Processed in 0.045051 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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