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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 c- m$ U+ L4 t3 D7 g- q4 P) W. h6 T
" t- H$ w* ?+ h; _, H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" c8 a2 K4 Y+ y4 L6 ~, Q8 Y# T
. @8 m! ~& k& l0 Z2 ~: X2 q其他程序段。。。。。# Z5 o" {0 C: Q

8 a: I/ o0 S& `7 ?: d9 J, ]3 J; |% @   free(x_d);; `: T- y- Y( Z1 J* }: W

/ V" `7 j* t8 t/ H使用DSP侧单独调试功能,验证动态申请没有问题,$ v+ H+ L" M2 _  y3 m% r& E0 }
6 G2 Z0 n! Z( ^3 M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 x) u* K+ Q& L* h/ |) R

' G4 b4 a! a8 h5 J3 f! G4 {) I$ V
4 K7 Q4 p3 I6 D
3 d3 D4 ]0 \! l0 [: G: `- @! o# k
$ s' F6 j$ @3 ?/ U" m* H* p1 u

+ p  a5 \" o: E# q. |- [0 I( H( A
% M0 p) E: t* r) {) g! T5 b6 q
& A3 a# o/ H# Z4 ~) b7 X) J8 x$ G0 J- G' V5 ~& E3 ~

& i0 M* X) C2 z/ X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) ?9 B' U) d$ W; S/ w% d7 I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" }" }: t( C0 ^% k& _  P8 b(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 M6 x0 M+ z  _4 ?1 j( B

0 s/ s* K. v& A6 ^' d是不是需要在DSP.CFG中进行配置' `! B( N8 n! I0 n% r" f- r
我现在的配置为
& \3 |7 ?# |: s2 s, S! w( [# Q. {
/*. j6 [4 ]0 B( {
*  ======== Operating System Configuration ========
& t4 y* `3 j- K8 D& ]6 M */1 A! n5 \- p! F8 J3 ^

+ e4 w/ T# w1 L  L: B$ I0 n; E$ B. y/* no rts heap */
) w) P0 h3 Q3 R5 c4 i+ F0 l' F7 lProgram.heap = 0;" N7 j4 U# n9 X) Q/ G
Program.argSize = 100;  /* minimum size */
1 L) F: ~8 A- `4 [6 k0 v" e% _9 @& OProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) {" I% G' G0 W/ a: B
. m4 a! u! N! \9 q1 Q0 `/* create a default heap */9 M4 H2 |/ r. c. ?* ~6 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( N$ t" Q3 {( S( {/ cvar heapMemParams = new HeapMem.Params();
' N  \  p& K, \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) l8 [# e& U2 N+ o; q$ O. w) v$ ]' d7 c
var Memory = xdc.useModule('xdc.runtime.Memory');
7 V% V: q7 u; _# n* K8 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, C9 H& }0 S5 y5 a7 X' M
: \4 W5 w3 f  z" _2 i) r/* configure System module */. ^& X2 v( A5 S2 |) |
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 n( J  C- O2 k1 |SysMin.bufSize = 0x1000;; a3 A8 F' L1 Z% b4 e6 `6 j
SysMin.flushAtExit = false;) z7 B) Y: Z3 H0 t8 M  Y4 g

: Z/ g2 E& ]2 M" O5 Y. g+ f& nvar System = xdc.useModule('xdc.runtime.System');1 D0 @. B* ?# L  P0 F
System.SupportProxy = SysMin;% Z7 t2 L  {; H* p5 q
; Z1 n+ }# I+ y) `
/* configure SysBios to use the lower half of Timer 1 */6 ?+ w; G' I; M, H3 T% z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. [4 I+ b9 z+ D2 Y) j( N2 tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% x& n, G3 P+ I. dTimer.timerSettings[1].master = true;
' @, p" D4 W8 x- qTimer.defaultHalf = Timer.Half_LOWER;! `- P# a# P; G
Clock.timerId = 1;) \/ r% k# N2 p8 G; d. h, i) v
2 h3 ?7 W# s/ Z0 B% d

  _6 _: s9 R, J2 n: ~/*
6 I5 }9 {1 K/ t6 J% a) T# e" B" ]+ v" ? *  ======== Miscellaneous Configuration ========
) c# n; v# E. n! d. T! x */
0 g! Z; h# e' n8 U6 Z' }! S9 O& [) F7 ^& J9 f& ^& w$ s( u
/* set default diags mask */# s! a0 A% S) t$ C/ H7 Y
var Diags = xdc.useModule('xdc.runtime.Diags');* Z, Q0 C5 w1 w) F+ P5 j& i
var Defaults = xdc.useModule('xdc.runtime.Defaults');" n" M8 Q8 ~7 b& W1 j( n
0 q/ p1 J0 V* X# t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 X4 X2 ^) |) k% C) F5 ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: A7 G# f1 ]0 m$ j- z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 q1 |" c9 K8 ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 |+ |5 K% R: @* K8 `6 r+ b0 rDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# i  v# ~+ C5 X$ ?& x- }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 r7 A1 X. `) C: O- y  P5 TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! Q  p4 R3 z: K2 L' s( u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  |7 r) c6 d$ A2 ?3 Q4 M3 O( L4 k
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% I& \/ b- A7 w4 MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 g$ W: l- N, E4 d  E9 [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 f/ j% C3 J+ g, E! y  W8 L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 k  g+ B8 B  N- o# k, k/ h9 p& L# cDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  ]; z8 m, k( }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 _, q+ G# p) p1 B. L
7 ?1 q3 y7 o2 A- R/ ?  s/* override diags mask for selected modules */
* b+ `5 n; T' h0 ]/ u* n  ^' i* fxdc.useModule('xdc.runtime.Main');# y/ O1 r- d% Y( S
Diags.setMaskMeta(
. ]8 E. g5 G7 ^% i% M8 P- d    "xdc.runtime.Main",
% u% v% N* V2 L0 N/ a" c* Z    Diags.ENTRY | Diags.EXIT | Diags.INFO,  t  g! ?- P" e$ D2 u$ A/ U
    Diags.RUNTIME_ON& K) e- w% Q! x0 A
);4 E' N! l0 X" H/ t9 I

. R0 r4 M+ K: @7 \$ q4 ?, Svar Registry = xdc.useModule('xdc.runtime.Registry');
) v& ^: O) G& jRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) [3 n' D! Q* w8 F1 t) aRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 Y5 _0 O5 U3 J; b4 Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 F# ?# ^4 L0 t; W* MRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 t3 E! r* N1 T& }

- p: b, S% V$ A% t/* create a logger instance */
1 \3 X: J, _. z* h1 \2 nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 ^' R* v$ w/ |3 O# y" @
var loggerBufP = new LoggerBuf.Params();
6 |, k$ N. p7 O$ r2 E: ^loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& w8 ]' W2 ~) nloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! X! v; e- V  H2 U6 Y+ [) @
# S+ j# p8 ~7 T! A; Z& X& Ivar appLogger = LoggerBuf.create(loggerBufP);3 T1 a- j+ v7 f
appLogger.instance.name = "AppLog_Core1";- q2 p) b& y$ l% }, i
Defaults.common$.logger = appLogger;' z& M8 l, h" }3 T2 P, B
Memory.defaultHeapSize = 0x8192;   
) }& j# s' Y* b2 ], FIdle.idleFxns[0] = "&LEDStatus";) s7 d' I& M0 w; o) l! T- d
Cache.initSize.l2Size = Cache.L2Size_32K;
* {' x9 K5 f' @/ M2 n
1 {' _4 U! _0 C" _+ x  k
回复 支持 反对

使用道具 举报

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 */- |3 W! g4 D+ N0 G! y( w2 X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 ~; |/ V3 F* Y  t, d
var heapMemParams = new HeapMem.Params();2 b9 T& K( j1 V8 _7 C& q* [0 V1 ^
heapMemParams.size = 0x4000;
: m5 i3 T- m: w. h0 |
# S! r1 M" Q+ s$ D5 V9 H+ w$ Y, Evar Memory = xdc.useModule('xdc.runtime.Memory');
- T; }4 Z. h% ^6 }+ m/ oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' m' E0 G" [9 G, G+ K* ~1 r. l' L  u. ^
我大约calloc  每次共计大小为5K*16bits,3 Y! \6 ~; X2 P3 r
而默认配置才0x4000、需要改大。
# [# i% [" p/ p1 @1 X/ s; h& y8 H+ A/ Y$ K: M) n7 ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  g) H, \: E& T0 Z+ b2 [0 n$ M
Program.heap = 0;
$ ^8 C& B  Q; v) h5 u* }Program.argSize = 100;  /* minimum size */
+ |. G5 f6 E' }' @Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 07:58 , Processed in 0.043046 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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