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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 W- y: a) f/ D$ ?8 x' E- T+ m0 f; q! u7 \
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 H- [& I/ x$ b9 p. P
* y& k- R  M3 @4 w
其他程序段。。。。。
: C$ Y6 R, {! x. u
. b+ B- E! |4 I" V' ^0 a2 m7 |% ~8 S1 x   free(x_d);
2 ?7 f- w; I0 b4 v6 {% z+ S1 b1 a: Y% L0 m
使用DSP侧单独调试功能,验证动态申请没有问题,) p" r6 v  {/ u& ]

& V5 n! c# n* ], h% ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 a& `) E+ q! O4 H8 C

) a2 @9 q0 }. s( b
. B8 n2 p' i. Y, q$ l
  |  M" U3 `' x, p7 C9 I2 e+ T
% u( o& l/ H$ U2 J$ ~7 r3 P
" s1 t/ [3 V- r
, d8 k: T2 i) J! J& n  M) {1 I) x7 N; P
( H) [- @* ?6 y9 x

3 F2 o* ?( H9 m& q- G! [0 z/ _5 y7 d3 y. S- e9 F) U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- B) B7 R+ n- \: _$ @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, O  e" p" l: n; B& ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 g: g! Z' A9 f7 b5 a
- f; {  k: p3 j0 n& `9 a) L
是不是需要在DSP.CFG中进行配置
/ H0 V3 m/ X/ D/ G( O& K, d我现在的配置为
4 n/ P# g4 y0 I9 d; V) r2 h0 |+ P) H4 t, ^: t8 [  g
/*- n* V' i& Z9 G$ E7 n$ M
*  ======== Operating System Configuration ========- B2 y( t( V/ S7 `, u
*/
: _7 k9 r9 T- |0 ]: H# i8 ^& i4 W" Z* P2 l/ U3 `2 N
/* no rts heap */; j8 [9 W) F; [  X- ?) Q
Program.heap = 0;' [+ v; l+ o( [5 Y9 w' O! H
Program.argSize = 100;  /* minimum size */
4 f2 z, `- ~7 R" U% yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 U! W+ f+ x: Y* w, I' [7 V% u1 X; M' y7 T' Q$ h3 V
/* create a default heap */
7 X$ H, \2 ^% X* J4 L3 ^: Q0 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 j& ^* l1 B5 l. ^
var heapMemParams = new HeapMem.Params();* Y" w9 E/ b1 \# s5 V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" _" u% ^# Q1 A3 R3 c, k
- G2 V* h: L4 J
var Memory = xdc.useModule('xdc.runtime.Memory');
; I( A0 x& i6 U  T: r/ BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 t1 `3 i) n' W9 l1 X, w3 I2 g

) v% S- ~6 B4 }1 d2 e1 P7 F2 s/* configure System module */
! E. y5 Q- o+ e( o( \var SysMin = xdc.useModule('xdc.runtime.SysMin');
6 f3 M% v' j+ ?" b: S4 E) I1 [  ~7 X/ ASysMin.bufSize = 0x1000;. V) N% W0 a9 e: x
SysMin.flushAtExit = false;6 Y+ H, f+ G3 v" l3 o
" Q: D& K7 c, z$ m0 J! Y- v% U5 k
var System = xdc.useModule('xdc.runtime.System');1 n( G: e7 k/ q8 p, B
System.SupportProxy = SysMin;
/ l4 s( B1 {! s5 `+ u* a/ j
2 [" s- C) C6 {: i/* configure SysBios to use the lower half of Timer 1 */
1 g$ n; U% e% l3 o3 u$ Rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 k% t$ Q/ E* J$ c) Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 ]1 g6 @+ m1 v  B9 `Timer.timerSettings[1].master = true;
6 G/ ~- W/ Q$ |5 r* OTimer.defaultHalf = Timer.Half_LOWER;% i- t- G3 `4 P
Clock.timerId = 1;
4 F$ E( G. ?; V' o" x1 N2 G5 j) a. j! W% B% V' Q. Q% `2 F) J% z
) j- L  \+ h* N$ I5 m& |! a2 K
/*8 x) `8 M% _  e0 \# V+ ?& A# p5 M1 R
*  ======== Miscellaneous Configuration ========
( q0 c' s7 V- K1 ^- C */
) Y9 \( q2 H; x% O9 \* e& \) T7 d$ @, _: h, t. B5 a3 M% x* ]
/* set default diags mask */
/ T( M6 P; b' I1 J, t& X$ gvar Diags = xdc.useModule('xdc.runtime.Diags');
9 ]8 Z9 r% t1 T$ o; evar Defaults = xdc.useModule('xdc.runtime.Defaults');) v; x8 Z  H" _% I
/ E& W5 G" g: o7 w% X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: K, G! r/ ]+ k# p: j6 T0 g* _5 g  yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# U9 D+ q8 x" z+ Z/ r7 q: lDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- o' Q1 l& Z5 x9 G' j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 C% H/ _( T  w1 C. T) ]
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 V' M- q- j6 c# K  U. ]; K$ b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  i( b: s4 X8 i% U/ t/ ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 q' \% n- H  @/ rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. n$ G6 g4 N* f/ D* ZDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 O/ N" d! k. \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 ^8 D; O, W2 W% H1 n+ @+ m- H* N8 T/ VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; }5 D8 C3 u1 g3 t) H9 t/ LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 R, D+ M8 u* zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. \5 ]3 k6 W( G: ~4 o% D2 NDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( v' M9 j" I1 F' y9 H, l
" Y4 z- R% g+ ^+ b# l0 ?/ ]9 H/* override diags mask for selected modules */! o( {2 w% {4 a; g# E& ?* \' u: A
xdc.useModule('xdc.runtime.Main');
6 e/ Q: k. Z  M3 [Diags.setMaskMeta(
# s' f" j, ~8 t+ U1 F! q    "xdc.runtime.Main",
3 m+ u4 {0 U' Z4 J2 k0 d    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 f9 l, L+ p' J6 G9 A% k9 A7 C  x    Diags.RUNTIME_ON  N( J! _! y( ^0 t( e- P$ {
);
; Y& G6 T6 P! b" `
/ a; s- V; W3 |' x  Pvar Registry = xdc.useModule('xdc.runtime.Registry');$ g  w" |8 X4 g+ C4 I6 g
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 F, @: Z! y# h5 tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; n7 b$ b: E3 G6 G+ c1 t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# Z9 i9 O9 K( @) M* {" X# P# J2 eRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( M$ A- d/ S/ t6 m
6 m: t4 P. o* X' m. p7 a, h9 X3 Z$ I/* create a logger instance */) w! A8 R& a7 a7 Z' G1 y; G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  S7 \" O' K; s& M' o4 w5 P, U" d
var loggerBufP = new LoggerBuf.Params();* c1 c% K& u+ @6 X6 `' L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* l. Q9 M' Q2 _* V4 R' RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 A' l4 {+ v6 }* O; i! G, f! W6 t2 R$ a
var appLogger = LoggerBuf.create(loggerBufP);' ]3 f0 M3 h' `" Z  r- b( Z' [
appLogger.instance.name = "AppLog_Core1";: ]# x$ g5 l8 w/ B
Defaults.common$.logger = appLogger;
) c! [% Q6 j: W, w0 U% K1 pMemory.defaultHeapSize = 0x8192;    7 E: y, Q/ ~( ]/ l2 G
Idle.idleFxns[0] = "&LEDStatus";/ s0 z5 Z' p1 B0 \
Cache.initSize.l2Size = Cache.L2Size_32K;1 r/ w7 P" k6 x# ?% y# V

, }, N# m* @% L
回复 支持 反对

使用道具 举报

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 */
$ P  E& R4 I3 d/ S2 e* }2 p+ Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  P; q; t$ i; H; R: M$ Q5 V
var heapMemParams = new HeapMem.Params();
  w0 |# ]: K/ e' ^5 hheapMemParams.size = 0x4000;
5 E2 q1 R5 q* p" \
9 i! h/ o0 ~. h' t' f7 h. Jvar Memory = xdc.useModule('xdc.runtime.Memory');
5 u! }; x* o, _) L! HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 s, I8 l6 M6 a( \: `. T
1 A* c. T( O$ ]& C, v. E. i
我大约calloc  每次共计大小为5K*16bits,+ R* s/ E& `+ i8 y& q
而默认配置才0x4000、需要改大。
" h4 \1 j9 R, D4 A) Y+ r# d
2 D2 g* m5 w0 B9 Q* N) a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, N2 k" f) x% b8 z  {: gProgram.heap = 0;
- |, f! s5 A7 ~. k8 x7 v8 V3 hProgram.argSize = 100;  /* minimum size */
! @2 f/ S. C' {2 m3 }0 @Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-20 10:32 , Processed in 0.041844 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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