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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ x4 T& `* {1 W
$ w# E( X' m! c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 I3 R& S: q9 p- T* {' `

5 Q. u: u8 s+ A3 M0 V: j其他程序段。。。。。/ P2 H7 W4 w. S* a' O' V

% _* r! L; H# m+ U: h9 H1 ^+ r& b   free(x_d);& Q: @2 n5 G& u% Z$ J: N3 b% K
0 ?& T! x; ]) o( d
使用DSP侧单独调试功能,验证动态申请没有问题,
7 w5 f) i- z3 {
( {$ m4 n3 C4 M% F% @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* C0 E5 G, d) t( l( J/ ~. W
- H: \+ c$ ?' I7 V! X0 z- r: B3 ~

/ a1 O4 j& B- W) o/ E# Y: Y& D9 q1 i1 s
  n* H8 U+ F/ P4 ~
/ S+ z- ~: D8 n

+ O) ?/ L  M: u: m: k- ?) n  l( |# ?" @

' E* [& ?6 q9 y4 M# ^
" R, V/ @0 ]& K( @/ _; s1 Z. K. b% A6 H- m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 a9 y) \* \$ U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 c4 n! u: {" q- T* n
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: j" B7 a- Z: A4 M

% f5 V7 W) r; B" g是不是需要在DSP.CFG中进行配置
! R& o" Y/ y# v5 Y( N我现在的配置为8 I+ I+ b' A6 n* I5 q5 `
1 v$ D- C, m) U8 V' ]( Y1 y
/*7 B% g4 j: _: ~) z
*  ======== Operating System Configuration ========
# l+ R: e; o7 X" L: D. {, R+ z */' o! ]" P0 G* B8 E& u7 Y2 p
+ ~9 O( c: \7 p$ p9 ~/ K( }- j. _& M
/* no rts heap */
9 Q' H. f4 }) d& ]# K, c$ w, TProgram.heap = 0;4 k9 o8 f2 `6 |* D7 _2 y! i* ?
Program.argSize = 100;  /* minimum size */
/ @# U9 W9 R. G6 [0 i% Q. m1 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' P. d) X0 ?1 @' K6 N: Y

+ g5 l. V3 ~' H+ s' T9 N/* create a default heap */
' C6 r+ \& n4 m' n8 e. [5 E1 j, q: Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- I$ q! r. `" I$ R  y1 S, s) c. Vvar heapMemParams = new HeapMem.Params();' o  ?; A; S# \/ y" [2 c% k/ V' y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ _" E+ h. n! }3 }
2 K6 N3 n9 L5 |- y$ n
var Memory = xdc.useModule('xdc.runtime.Memory');; {( p* Q7 c; _- d0 M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 {) V/ c; d5 }* j& T: i+ V+ i9 y6 p7 M# Q
/* configure System module */
2 N3 a1 \5 j# k# Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');  i- |5 o5 b; C) B1 u
SysMin.bufSize = 0x1000;2 ^& T9 S: N$ _; I
SysMin.flushAtExit = false;% \( C% q% s/ p

2 G7 b1 R: X/ D* P6 e0 e3 o3 _var System = xdc.useModule('xdc.runtime.System');
1 J/ L9 N  q& e  F( V- Z- DSystem.SupportProxy = SysMin;' ]. S! c. v1 a( P7 A4 U' w
9 v% D: @$ L8 @6 u1 D' A- x1 i# q
/* configure SysBios to use the lower half of Timer 1 */+ R9 U  L1 Q; ]. C5 Z4 ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. w- n- R8 g' @3 {2 v4 |var Clock = xdc.useModule('ti.sysbios.knl.Clock');. |  _6 \' G" l4 H
Timer.timerSettings[1].master = true;; }9 c# ~2 Q) |2 L. _" d0 E2 D
Timer.defaultHalf = Timer.Half_LOWER;: z+ P$ h5 u2 l5 [5 D& b  l: T# P8 Y, ]
Clock.timerId = 1;
; s* z7 t7 K+ ~6 I6 ?- J% a! p1 I, [1 `

. T4 w  X1 t* O8 O& n8 G  |( x2 ]9 c/*9 D3 C" p3 A0 c' u: Y
*  ======== Miscellaneous Configuration ========4 V+ {, U2 L2 q: d& b6 u
*/8 N; u6 s: _  H' M: b

4 @1 e3 _$ S7 t8 L/* set default diags mask */3 w$ W) n$ w; V3 b3 n9 ^8 X
var Diags = xdc.useModule('xdc.runtime.Diags');: J: x9 @# ~7 d% o* s
var Defaults = xdc.useModule('xdc.runtime.Defaults');
* r( d$ F/ J8 [. @( }7 E/ _  h! @0 ?
4 U  }' n- B. z' q9 t' LDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: s0 T0 c6 ]- z. ]! I+ |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ T5 y) ~8 l0 u. K& ]3 M; ]# z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( q3 Q7 p3 B" I8 q0 `2 z: tDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) Z: \: D1 U* I2 V8 GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 k3 f4 c2 Y! f! ]( EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) l, b- X" w, r
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 p8 Q$ t, v9 O  c9 ?Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ c) \1 S4 H2 k7 y$ R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; {% ]6 f7 \- h/ q/ T3 p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, ]; g6 D& t3 Q4 t$ G) t% p4 h4 eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 O3 X' e& ^  l) H$ u  f4 R: }6 J" ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- S& T8 a, w$ j
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 t( p% r- T* ~" e( y  f3 Y4 U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( A) k+ W% r# @
, L/ N1 L2 _# H1 t9 r/* override diags mask for selected modules */
2 Z8 @! v0 @) R! @6 d' hxdc.useModule('xdc.runtime.Main');
3 M) C4 y0 C. C7 S. HDiags.setMaskMeta(6 L* t% t% @" V2 T. p2 B
    "xdc.runtime.Main",
6 K* I0 L* D, ?& M) O    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ E6 ^8 u7 g: n. [# G4 J; Z$ f0 g
    Diags.RUNTIME_ON
3 l! r1 _& f- \  u);
% |) ^8 v# p: f1 ~6 c. D& m
  G/ Q3 w+ M7 F# w* g6 Nvar Registry = xdc.useModule('xdc.runtime.Registry');
4 X2 b6 i! u+ q& ~' E( xRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( m* [! \% e! G! |* ^9 _3 `: X# f4 FRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 l( q: q; f7 VRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 w% p4 |9 W% s: g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 k9 t9 i1 l4 I( b% [& n! E$ a
2 {1 z. P  P# o) `4 a/* create a logger instance */9 Y& F# F# m8 Y9 J- {$ q0 L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; z& j* Q/ M# K5 b& jvar loggerBufP = new LoggerBuf.Params();. C3 b- R+ P! }7 i1 d" v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% a% j& }) y1 h' c8 iloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ Z; m0 Q0 T; I9 u& I/ Q7 ]0 y* s5 H% G# i( f! ]$ e2 b
var appLogger = LoggerBuf.create(loggerBufP);$ J$ f' ]0 v* K/ |7 f$ X. R, M
appLogger.instance.name = "AppLog_Core1";
2 L# M% m- a: D8 R5 \Defaults.common$.logger = appLogger;
, j- [( z( n2 R/ q5 ~' Q' a1 a- C5 DMemory.defaultHeapSize = 0x8192;   
+ }7 M: ]$ y' P8 yIdle.idleFxns[0] = "&LEDStatus";
& s: o! m8 ~. Z: q/ R( bCache.initSize.l2Size = Cache.L2Size_32K;3 s2 e+ G1 P0 b! M) `
$ E8 i+ a  h$ Q/ Q! _
回复 支持 反对

使用道具 举报

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 */) I) V0 e1 v% B5 F9 [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* ~% J, r; I* }$ d; @/ l' M* n3 @
var heapMemParams = new HeapMem.Params();
) ~9 z: _) D5 P4 IheapMemParams.size = 0x4000;6 A0 K6 G: i' a% P( Q6 B) ^

/ }" N# F* K# Pvar Memory = xdc.useModule('xdc.runtime.Memory');# ?. ?, t) Y3 y. Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, h' t9 f% `# b% {8 E( P. i3 m7 S' z; J: y: d. f
我大约calloc  每次共计大小为5K*16bits,, K3 q# ?( ~' D7 `3 d
而默认配置才0x4000、需要改大。
0 @7 E: t3 d! o. T/ ]3 }+ N
9 }" w3 c" U  U9 L2 o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" f+ H. ~$ B! X4 c( P6 @: {Program.heap = 0;( _1 n- K( A: H+ W( c0 a. x
Program.argSize = 100;  /* minimum size */
2 c" C. W" b1 g5 \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 19:29 , Processed in 0.042285 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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