关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 p& f: W* a9 C4 h9 B$ l0 S# O1 S
; A- I0 A& q& A0 e/ e: P; J- F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( y7 {6 ^+ _7 u4 i; }/ O1 F  @& Q+ ?
  n  q& U/ N/ U, a其他程序段。。。。。
) A/ h; a6 _. H4 a( g
. Z( N6 G/ t, v1 Y. z   free(x_d);8 D; m+ \. f4 a) `1 \: E! _! G

9 m: c, O/ b) @9 ^% g使用DSP侧单独调试功能,验证动态申请没有问题,
0 q+ _% J7 m) Q! K1 g& `7 q# r0 h8 D0 {) t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: |/ I4 q3 a9 l, p

  F+ S7 y1 p6 [$ d% W
0 L9 K+ ^9 g0 r. d0 E. ~% f0 r
) ]6 ]* U9 d2 Y' |6 [5 z, Z! u- }
5 e# e% z& r9 k6 j4 O9 G( U

9 [- a* j* g7 f# C
2 d) ~6 h7 D/ D% C
6 Q1 P7 P* N) x- Q
- {* }8 x1 d, y8 ^- g0 R1 p& n/ _( v/ g+ A, O. w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 T) q9 ~3 K% b7 J( R: t2 z2 G' C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 E) M! Q6 P# E+ b* M0 d(不过疑惑的是,为何单独DSP仿真就没有问题呢?): n8 z7 _9 X7 ^, p! F

, E$ P5 l' B/ s8 |7 b是不是需要在DSP.CFG中进行配置
3 V) w$ p! ^0 s# C9 E我现在的配置为
) V; j1 E' o. j8 A) M4 R. u0 `# N2 G" r& z' }# F  |5 j+ [
/*% b- T) B& H6 H
*  ======== Operating System Configuration ========
4 r3 T2 O% P. U */
* |! a  D: H: x: B2 ?( Q0 D  }! C+ y. Z2 k: Q% D" K, M% g9 j
/* no rts heap */
; [2 M5 }, i/ ]- ]" \. E4 rProgram.heap = 0;
$ `% s; i. w) ~. mProgram.argSize = 100;  /* minimum size */
% Y' Z* [$ H1 P/ l) y* \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" x$ |. b  @" L0 d, K) D1 Z0 X
- z, k; F+ G% ^- a- a  p# g" N4 h
/* create a default heap */
" a" z$ {5 h/ V$ \4 ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, J5 C; D, C. W, a
var heapMemParams = new HeapMem.Params();
2 H* F$ N3 e: l" EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, P3 j2 Q) U8 Q. F. `# k* z5 |! p( T: j$ U' F4 k! R* j4 g- h3 x
var Memory = xdc.useModule('xdc.runtime.Memory');
6 K' |. V$ `, s! e; jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& W8 a0 d+ @  A9 u# u  T; P

/ t. _- N) E' C/* configure System module */
" g! r3 X7 p" c) Zvar SysMin = xdc.useModule('xdc.runtime.SysMin');4 ~* t5 j- j8 \, G& o
SysMin.bufSize = 0x1000;% N6 p" V& I! [6 r# _- E, S
SysMin.flushAtExit = false;# C' L& X, X$ h
3 W+ z' M- H, x5 m9 q
var System = xdc.useModule('xdc.runtime.System');! B& s- @3 F& n( f  ]
System.SupportProxy = SysMin;
0 ?- J5 B" e: u5 [+ k2 f* o1 Z/ K3 l# S: ~. W) Q
/* configure SysBios to use the lower half of Timer 1 */
3 W; \5 Q9 g7 p5 h6 g0 A5 w) ~$ ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# `4 d' U7 E) s: L7 B% t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, a8 c8 U" f: d$ B: D, }1 \& C& k& x( ^Timer.timerSettings[1].master = true;
& X. _/ l( l0 P& Q5 @Timer.defaultHalf = Timer.Half_LOWER;
, U* T; Z  D% ~* X1 L( ?& GClock.timerId = 1;! D3 H$ [- u7 _, o0 D& Y
/ N1 ~/ s5 |9 ~4 {, B* b

5 C& X6 |- Z( c, W6 V* s/*; o. _9 {6 I" ?& _$ V" }
*  ======== Miscellaneous Configuration ========
5 B  g0 h4 M+ i/ r4 d4 c' u */
, s2 L/ Q1 w- R0 s7 o5 _
4 t- H* X$ g+ V8 i/* set default diags mask */
8 K& O! a) ~+ J5 H" m3 X) D& }& cvar Diags = xdc.useModule('xdc.runtime.Diags');
) P7 I0 ]  b4 D* m6 M% |0 tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
9 h# C/ E7 X1 \$ j3 l, y8 ]6 Q+ A1 S5 {3 w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 L8 k3 b" G3 b& c* T1 }! M8 T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! M6 d& l( ~6 [! h" [
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ u4 Y* `* N( u% g. C3 [2 W) oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& P; E5 Y' R4 n: kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( _; u* E+ r" h5 tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 I& {4 q- D+ K+ M2 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! q3 d8 d' s3 S5 G) ~Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 E& X1 W4 b3 Y6 k  [# S( l$ K3 S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ D4 g, S% Z) ^0 w: `3 _; _  c3 v1 QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' \# O" q9 q* z7 \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 G  s7 p* P; t: z8 O  o8 e' ?9 X( j
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' v* F* b5 {8 g+ c+ dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* G+ H% R9 ~7 d5 \, EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; R4 {, D; f5 t  N5 n

7 z  Z- q7 O% G1 ?  O% T; |/* override diags mask for selected modules */5 X; C$ `! B+ y% [/ S) C
xdc.useModule('xdc.runtime.Main');
) _& n. Y" f) O7 SDiags.setMaskMeta(
) d/ v+ h0 x7 \3 j6 _    "xdc.runtime.Main",
; s: }! d. w5 ^. m) {    Diags.ENTRY | Diags.EXIT | Diags.INFO,
# |# [: O! v: A1 Z  B4 S6 O! q9 _    Diags.RUNTIME_ON
6 d) o! {$ V8 F) J: n: F);
- s. e  z. a, n- B4 j- G7 {) p. k5 r6 I
var Registry = xdc.useModule('xdc.runtime.Registry');
; {/ I- j9 |, L% _2 S0 ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. @$ u0 l" r! z$ A8 p/ aRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 Q. D! R$ T# N1 gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 ?6 [3 C& M  |0 `9 u
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 z2 ~8 }9 V# G
( R# S! {8 q5 R' H3 j/* create a logger instance */
8 T/ Y* c. {9 \& dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 B; V4 o9 B" A) {var loggerBufP = new LoggerBuf.Params();& u, C. `2 G! C/ {8 _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% z5 ?8 N' j- l" M
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% s7 s* `0 s4 ]2 p5 ]. v* I! @, i( H' ]" u
var appLogger = LoggerBuf.create(loggerBufP);
* ~' x: A! }' n# N: H2 IappLogger.instance.name = "AppLog_Core1";
1 R- ~4 R8 r$ c  ~+ Y. [Defaults.common$.logger = appLogger;5 H! }9 }% S2 w: R; g
Memory.defaultHeapSize = 0x8192;    6 S0 Y! p! D9 E% O* a3 i0 ^
Idle.idleFxns[0] = "&LEDStatus";, e9 [8 ?3 |) D% `$ u
Cache.initSize.l2Size = Cache.L2Size_32K;
9 c7 d0 k, i+ E  m5 S# X6 p5 k1 U4 M7 c7 X( t
回复 支持 反对

使用道具 举报

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 */
. U! c/ ^% D6 Z7 n9 V+ Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 `% Q6 A4 {* r" ?1 o. _+ \. _var heapMemParams = new HeapMem.Params();. D0 `7 N4 W* w3 G4 v# Z
heapMemParams.size = 0x4000;$ _5 {6 L3 y& L) _
. T+ G  }: W+ k4 \1 j* M
var Memory = xdc.useModule('xdc.runtime.Memory');/ m, b  M# Q% l: L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  f' \" `( Y7 c: U" v2 w

4 d  h3 ^% m$ J0 `1 \我大约calloc  每次共计大小为5K*16bits,
- Q6 C# h9 v6 ?  @# ~而默认配置才0x4000、需要改大。
/ g" l& k( ^2 j9 I; ^6 q% m7 ?' }0 _, b3 G9 Z7 L. l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% T* F. Q3 I' r% R4 K9 yProgram.heap = 0;0 g4 a* z1 z* `* ~( l9 q
Program.argSize = 100;  /* minimum size */5 D% q' y0 T3 C' [; F! j" _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-6 03:50 , Processed in 0.043196 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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