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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( T, @! {5 k$ z9 k9 B: {5 J) Q

: @4 k" X2 _: l: i, U1 ]    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. L& w0 i, A8 o* i# j

  K3 g2 `6 e6 Q( a$ }8 ]  ^4 [其他程序段。。。。。
) b( T4 o4 O' }* `9 G   m0 t! C; x1 \, k8 D
   free(x_d);
3 Q; D. Y1 j# \; t+ V& s! A# q) w. Y; o, I' @6 M& E
使用DSP侧单独调试功能,验证动态申请没有问题,
7 E2 b2 J5 {6 x0 z. a* o* z4 R# a7 U6 m  x
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( ?$ _. a) j( ]1 @" R+ o4 h9 X

4 c& N3 `5 P$ I% C# I
* I. t- o" z. D; F% [. z7 {$ P3 N/ H
# M" @( y3 g- A% m2 j
' m# i% W) O/ [- ?
2 ?0 ]3 ]( x, V- s/ h1 D' p# p; ]3 K7 @9 E6 M& e  W

' a( b4 f  P2 p
% i& h2 h: Y8 R& }5 S
( j2 l- k3 p0 L% U7 |3 A7 v$ S# U9 W) A' d/ o$ x, y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  j4 H6 k( K; {. S) E3 U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 U7 L, j* U: F# s
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 p0 c9 S" p: P7 G  I( O5 V
4 r$ S; X' w$ C" X# S" m) J
是不是需要在DSP.CFG中进行配置
# I1 `2 N9 F. d) o# R& K! r+ s7 S我现在的配置为
, {# z* Z0 b% T
  Y1 C* H6 |& F/*
, B& s. r, b, y. B *  ======== Operating System Configuration ========
& K* i; m1 s2 {' N */6 S4 h! P( P! Y# ^8 o" T
3 K( ]) E! F7 [+ Y- ?' M
/* no rts heap */
& P) m8 d: k. o1 JProgram.heap = 0;
: l0 C* E" _2 H6 k4 jProgram.argSize = 100;  /* minimum size */
5 B; t* a3 D& \& M  n3 j8 F6 x8 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* u: J) a1 S8 Z' I- ~5 i$ G
, V3 Y2 f4 Q  p- W" O" [: K/ e/* create a default heap */
7 {9 ?1 q8 e8 f2 k8 @7 S7 c5 evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! v: Q8 V$ R6 a: H7 c
var heapMemParams = new HeapMem.Params();" M" ~9 c9 H" Q/ m' O1 E0 E) T. x7 k, p, O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& A  W. ~, e# _3 q. b

4 L! V: M% N) u
var Memory = xdc.useModule('xdc.runtime.Memory');) c! X0 c- _2 x4 U; \' F8 ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, B! J- I4 S* M, V, i" B/ V( [) F! d0 `- [6 n
/* configure System module */
7 _% A  S- Q4 {4 Tvar SysMin = xdc.useModule('xdc.runtime.SysMin');  U4 j( A8 S* `# A3 c
SysMin.bufSize = 0x1000;# E6 M- y8 g+ V* R% E5 j
SysMin.flushAtExit = false;
& B: R, Y" m" z) x3 @
  w/ E& `' F$ Qvar System = xdc.useModule('xdc.runtime.System');# J2 C# s" |7 p+ i# `
System.SupportProxy = SysMin;
! v, v" t: `& k
4 [. A. x6 H! m$ p0 l/* configure SysBios to use the lower half of Timer 1 */
) f4 X1 H# C  Xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, Q( ]( p0 `  T1 W  }$ B' h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* d3 D1 `( o0 u" C' cTimer.timerSettings[1].master = true;
) {2 q: m; S& l* ^' iTimer.defaultHalf = Timer.Half_LOWER;
% l) i* k* p( o1 _2 i/ U- cClock.timerId = 1;3 e' n+ Y; g; W6 E1 M% r

( F( G4 u& ]% A% ~. w5 I. W' \' [2 @$ F" u1 w2 N2 p3 M( _% ^
/*
6 U1 F5 Y7 X4 U *  ======== Miscellaneous Configuration ========( `  [. V5 k; e5 X
*/, v# q) S8 \$ R: L$ d+ l8 H; }
- q* N) m, q* Q# S- ^1 I" `* |
/* set default diags mask */$ B: B" r  O8 b) {0 y
var Diags = xdc.useModule('xdc.runtime.Diags');
9 G4 D! }0 Z% M. Q, ^& tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 ?" o8 M3 I2 H( r0 t
; t8 z8 q1 B$ k, CDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, l- j6 ]% `9 F! I2 D) Y0 p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, e; d- ]3 J+ i: S+ Q: u
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 z, a2 O) E% W. _; G9 y: ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 U6 s8 C1 ]! y" f% bDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 {1 [% j* K* Q: [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( L$ g7 k3 X& i3 y" T" ~
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% ~4 t2 b/ G3 s- z5 U- ]( `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 i# A( r9 V- |5 q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" I; m' x* D( {! m
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, c( j" h9 k4 f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 t" P# a- O: N1 w- m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  z: L) b, L/ J3 E6 R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* a& X" c6 P- M& f2 Z- L# n
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 C9 y% B/ X- }6 `
" M! l0 w4 }: I3 Z2 @
/* override diags mask for selected modules */
/ b' p: i$ D# [& h& i, Txdc.useModule('xdc.runtime.Main');
) Q) v1 k1 s; c9 t1 b& k5 s' vDiags.setMaskMeta(9 @/ z3 u* w7 u/ P- f' E
    "xdc.runtime.Main",9 W3 f/ x, Q2 E# C
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 ]0 [. M0 t0 \4 T! V+ P    Diags.RUNTIME_ON
+ R; Z# y% M! B5 i  h);2 [2 Q1 S2 S5 |3 B$ y6 P
  E2 v) Q- x; S
var Registry = xdc.useModule('xdc.runtime.Registry');. c# L4 H, \) I; [7 S: G! o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ X2 V' t& ?6 _  U4 E3 B/ @. d! TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& r1 `. i' q; G) C4 K( J
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ M, h2 i& c- {0 e8 nRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 z4 E4 E  g' w* H; b1 \; _, r- M* G$ n8 ~
/* create a logger instance */) ?+ G+ e4 m6 n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ z: b: `' k  A( @) X  S0 [+ Yvar loggerBufP = new LoggerBuf.Params();* c  Q9 q/ P! D! C4 n3 `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 X* C8 \7 w% x: V3 i1 m) c
loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 w8 C& }( }0 O3 _" x" P

- n' |* B* W% |2 f1 w8 ~var appLogger = LoggerBuf.create(loggerBufP);
$ h2 |6 _9 P. R6 g2 x# NappLogger.instance.name = "AppLog_Core1";/ S7 J2 e2 [' N
Defaults.common$.logger = appLogger;' J/ n5 [9 U9 ^: k1 L% G
Memory.defaultHeapSize = 0x8192;   
* m+ @8 I& X/ P% m; N: p  y3 XIdle.idleFxns[0] = "&LEDStatus";
: Z2 w" V: A3 P% TCache.initSize.l2Size = Cache.L2Size_32K;
8 U: ]; r) M8 x% [- q
1 Y! {2 c* U7 q* c
回复 支持 反对

使用道具 举报

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 *// B: _) |9 G& \7 h5 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# w* p' }) [! lvar heapMemParams = new HeapMem.Params();
; L  b/ M, m: ]+ ?2 O2 U2 UheapMemParams.size = 0x4000;9 R  V# j0 j, j) }. T
4 m# M1 `" z/ `, e, _% {
var Memory = xdc.useModule('xdc.runtime.Memory');! X  y% a) u( t2 F+ W! u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ s3 d: _7 s  H1 W* A* l
; _/ a5 T- E+ Z我大约calloc  每次共计大小为5K*16bits,
, W0 X" U# h0 u% F  l而默认配置才0x4000、需要改大。# J: z  U& |2 U& F5 C9 R4 K$ \

( c$ h5 b% Q- u0 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 f* ?2 Q/ S& Q& ]6 ]. g" \: ?) u6 `Program.heap = 0;
) U+ s+ f1 R: m. i. [5 R, w7 u$ c, ZProgram.argSize = 100;  /* minimum size */5 y; |/ l6 {8 Z
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 17:01 , Processed in 0.043625 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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