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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; p7 u% \' o: V, i7 u
3 o: j6 B5 `) y) o6 Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( z+ l7 q$ e& y. s( k( F. D

/ g: J5 C6 Y/ }其他程序段。。。。。0 S- |# ^% l' Q$ {- F: k, o
6 J/ t9 }5 F  F  _
   free(x_d);6 _! `3 O  H5 R
2 G( a% _3 q* g( _9 N
使用DSP侧单独调试功能,验证动态申请没有问题,5 @" X; p  \/ m  j5 a
& O# a, c+ \7 S; }' w; F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' F" Q3 _/ x& {( O% N. W. J5 B  B
/ k2 b  x% V# p; z; c! m; }

9 e' N& d% ^, _8 S
6 Q9 Q1 k- C0 J% x, x$ w; y. e5 y7 B9 N  Z7 P9 k! N. b
" n. @. h/ l- g* |2 a/ V

9 E- \! D# F0 L9 u1 Y4 c
4 [% y1 z- ]. k! b/ N# {% c: S" x; g2 o- W) j

8 Z3 x2 I+ o0 e  k1 r! U+ C3 k; r( F( M. C* ?1 N" x' F" h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ u0 B! [# S$ f* `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# V" c! u# H/ q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. K% z; k. ?# B  J: W( S" M1 A
( _" P8 p  ?) x# Z- n5 ]& j( ~$ T
是不是需要在DSP.CFG中进行配置1 a% d9 V. l3 Y5 j% X) ]
我现在的配置为
0 {8 i: }. [/ l- p8 K2 q8 i2 I- P8 ~* O, x' r  F# L; O
/*
$ x* e, }1 N2 r, N/ G  h9 z. @% ~' | *  ======== Operating System Configuration ========
! ^; H6 L  B; c% e" } */3 ~1 u6 {: ^+ |( l  c
3 f6 c7 g& N- J- i$ X0 P3 g1 o' k7 x
/* no rts heap */3 B& |) b5 k5 m9 |3 V7 n2 f
Program.heap = 0;
8 t; t; [1 A0 N# D7 N  w3 DProgram.argSize = 100;  /* minimum size */7 W  l3 ]% C+ i) }1 t- Q" T" X# o
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' x( Q8 Q6 d- u4 K
9 F0 ?! h: j$ @( J" w
/* create a default heap */6 Y4 Q" C# Y, N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% G+ V9 g% D( p3 g3 o. o  U. avar heapMemParams = new HeapMem.Params();% G- n- ?' ~; |1 q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 f  t1 t6 T. ^, M) b' b4 `! p

1 T2 O; E0 D9 H# e- O+ A8 R8 `
var Memory = xdc.useModule('xdc.runtime.Memory');. R6 r: W  v/ ]9 e% Y, \" i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 Q  I8 O2 y/ [. A

# |& V; C; g0 ^7 \4 `; v/* configure System module */- G4 V# t4 R' [8 K; t1 G" P7 q
var SysMin = xdc.useModule('xdc.runtime.SysMin');
. b; f) o4 T8 m5 c/ s8 D( ~SysMin.bufSize = 0x1000;
, m% X& m( i9 SSysMin.flushAtExit = false;
& X6 k( O; E" M7 V4 J2 `; n0 j9 s; `3 _4 u7 l& s9 K
var System = xdc.useModule('xdc.runtime.System');
0 a+ A8 b0 U) L6 Z2 OSystem.SupportProxy = SysMin;
' l1 t: K7 u- g& J& {  y8 z+ S
* {# l/ a- {: q6 t/* configure SysBios to use the lower half of Timer 1 */7 d6 l' \4 k8 k. i" q. `: I: a
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) c6 J- H: \/ P# ~  d; ]0 t9 m1 P% ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ p9 b  [" s: R" Y, J
Timer.timerSettings[1].master = true;% y8 X' }' k9 e. V9 V
Timer.defaultHalf = Timer.Half_LOWER;
. m& E1 w& b( hClock.timerId = 1;
) A, k9 E" i. y  \5 @6 s9 P9 ^+ T+ }9 t6 t) v
" n/ ]6 f# k2 H. |
/*9 u' H' q: W6 e8 d+ {8 }
*  ======== Miscellaneous Configuration ========# Q/ a  t: S- C6 L- l& C  }
*/
% u5 i# T+ l  C4 G: V9 n. d: [, R7 Y1 S# I
/* set default diags mask */$ X" t, c) S  [7 m% B7 L
var Diags = xdc.useModule('xdc.runtime.Diags');& Q: M" ~! L5 ?* }' E; S- S
var Defaults = xdc.useModule('xdc.runtime.Defaults');$ s$ E2 z( @& u- F. {
, X0 n% g7 E5 ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! O% q# `6 V  o2 iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ J5 T1 X8 ~! y( r9 K6 c8 @
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- m! o1 e5 v7 a* U2 r0 q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ d- \& s) f5 _' J; f* x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- O1 {) ?  D7 p# \/ ^+ Y: p& LDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; A3 H& O: t" K$ f/ B( A( j; zDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# P3 n1 E% R) H' U1 A2 e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: }6 C& ?) ]& R7 [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, a* y/ P- }' u  P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ t9 t& r' F& p% x$ [3 ?Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 m6 S- r3 R* R, s
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" C- X! }- P1 e$ e) u$ [% _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  P) D/ [3 ?$ K0 c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& q2 O" s; a" [: H
1 t! `( ]7 Z1 I6 T/ l
/* override diags mask for selected modules */
* o1 r/ B7 Z; v4 j  a! O9 Uxdc.useModule('xdc.runtime.Main');
. W0 x1 j4 t" \. S) n2 D3 B. tDiags.setMaskMeta(- A5 r) i% s9 v5 n1 z9 K$ r* U
    "xdc.runtime.Main",
1 J# L. c: E0 u) v! S0 c2 Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,! s. I. ^! m( q5 O, C
    Diags.RUNTIME_ON
) I0 L0 w7 V- u( j; n4 }5 z);/ ?* ^$ ~7 B0 a5 f
' O0 t$ d) L4 N+ R
var Registry = xdc.useModule('xdc.runtime.Registry');
: Q- Z0 |3 n( ^# D7 r# @5 NRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: A2 R: \) K7 ^, G, E+ DRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. y7 J: K- }* S
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# a  W, g) b) Y9 u, PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 l: _4 K0 f' x
3 F: ~& ]# m+ k4 K+ o9 H/* create a logger instance */
) \0 h5 z3 ?" |& P* ]6 o5 ]% kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& \( ^+ D* p: U: B3 ivar loggerBufP = new LoggerBuf.Params();
9 G; u0 \* ^" x" e: ~0 [# Y* O) R0 @1 cloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; r+ n4 S. ?  E) m, B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' K' i7 m: J1 q- Q5 S. W9 q
4 g; k7 I. c" V9 W! ~5 d; M
var appLogger = LoggerBuf.create(loggerBufP);
9 A/ y! j; V' F- @5 @  i8 _appLogger.instance.name = "AppLog_Core1";
1 N$ A2 o. Q# Z8 qDefaults.common$.logger = appLogger;/ _# y0 b- }9 p& g* H$ y1 R" @
Memory.defaultHeapSize = 0x8192;   
) F# i9 _: q' A  U" c7 F/ TIdle.idleFxns[0] = "&LEDStatus";
8 B" F; [5 ~+ r2 }2 r" @, R1 e7 mCache.initSize.l2Size = Cache.L2Size_32K;
" g0 B& X4 H: G" r: R& I) U7 L% D
# F4 B, Y. T; u/ z6 W' D
回复 支持 反对

使用道具 举报

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 */# ^/ L0 I. l! @, ], P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 b" D! i3 j5 L$ _6 F+ n: \+ U4 W
var heapMemParams = new HeapMem.Params();
+ ]8 n2 b8 F0 n5 S" i/ {heapMemParams.size = 0x4000;; y  b9 m* X! t6 M6 O
; r6 x; c8 ~9 g& J
var Memory = xdc.useModule('xdc.runtime.Memory');  F% C  I  C9 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- R! y* h/ V- ~+ K( r2 Q" r
+ _' u) h9 v+ O- h4 B0 H
我大约calloc  每次共计大小为5K*16bits,! W/ ~' q3 g  s# a" f
而默认配置才0x4000、需要改大。
8 \6 B+ I. F4 }
  X# f; Z2 q8 I4 h# I. x6 e, T7 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 f+ |- X& n4 R# ?
Program.heap = 0;7 a) \+ C  `" k, i  ?( Y. v" Y. o
Program.argSize = 100;  /* minimum size */
& L! A  J; W' `- jProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-20 19:32 , Processed in 0.045964 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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