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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

. w" |! h+ R) e2 m$ q, L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* w" h0 Z2 v" J; t: U; Q: e/ @$ O8 c

( N6 y' z5 U+ w5 q, a' O其他程序段。。。。。
3 Z! ?: a3 b# g( _ * g$ M& E- W' r0 [# H
   free(x_d);
5 m5 u4 M0 b2 I7 B- d
3 [/ w# Z* B9 M& |! X, G5 G使用DSP侧单独调试功能,验证动态申请没有问题," A6 y1 f1 S8 P/ J8 y

# R8 |/ _6 E0 e5 j! I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& A! [0 j+ @3 S8 N* h- m# g; c( i

. [9 T( R* `: A6 m3 o' A" r8 F8 A
/ Y$ R3 r7 b( E+ O! \! \
( Z; E; m/ o, v" [  e; ]" @, A$ U& s2 C, p+ E4 w# @) [+ }
& ~" l' A, H- l( |8 v$ [' z

) p( {4 i% ]% y6 C6 T9 s7 O6 Q7 R* C: E; y' g9 q4 N
4 ]  x/ F' q$ K

, `6 y2 \0 j5 l7 Q- W8 H* r8 h. t
8 d% [" a" _2 O* o& I$ e/ z! |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: l! F+ N6 G# Z* Q2 Q7 s/ \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" D2 M( [7 U, B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ t5 ?3 |/ m  Z- o5 c6 H* ]

& M& S4 v9 |% W1 ~5 z, R! J是不是需要在DSP.CFG中进行配置- }- j  D3 `; o% |9 C+ g! a9 W
我现在的配置为! r2 E6 P, w/ S% o0 {
) F! e. Z# _  J7 J" g
/*
) v$ N, I9 ]8 E0 f *  ======== Operating System Configuration ========
, C/ l: O. C5 R  `; b */. Y9 e+ P! ]# O* N5 `* S

8 G9 p6 V! \+ d( z/* no rts heap */$ X+ a, s) Z% W% ^* z8 t
Program.heap = 0;
& C+ y) f9 c" l0 {8 ?) `Program.argSize = 100;  /* minimum size */
9 }9 s8 y8 e6 h0 e/ ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* v2 W- w& b- B" M8 d5 \! e0 a0 d
# j  Z: ~3 x% `" i2 q1 k
/* create a default heap */
2 r$ i3 @  g- x4 `$ m$ Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 h6 l: D! F9 E; D! }. ^var heapMemParams = new HeapMem.Params();0 s- h  I- I* |) k& _% E& Z2 M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: o6 z! ]) @7 w( p
2 g9 z* d  H1 W! k5 W- @
var Memory = xdc.useModule('xdc.runtime.Memory');
9 R; d4 R% q2 t8 a6 jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 A/ z( G7 D# \8 t* z6 Z0 l
8 b- }6 z9 _+ }+ z; ^. B6 I1 h
/* configure System module */& o4 T; y0 Z, Q, _1 w! {6 @" Q
var SysMin = xdc.useModule('xdc.runtime.SysMin');( \8 R% W% _6 x% ?9 M9 ~
SysMin.bufSize = 0x1000;5 M1 t0 n( ~7 g
SysMin.flushAtExit = false;" E- q2 u0 d/ x0 M9 c' Z, |4 K
4 x: o1 g! y7 U; x0 D2 D
var System = xdc.useModule('xdc.runtime.System');
8 I% h" s; v# A) X" w7 [& B" WSystem.SupportProxy = SysMin;
- ~( t$ h+ Z% s7 w: f5 N" Q1 Y1 l. h
5 i" a1 N+ u6 M+ p2 L. K% t' \4 O0 X/* configure SysBios to use the lower half of Timer 1 */
8 k5 ?- s: F; M( [7 L+ A# uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 p5 B. ]6 h% V- ?
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" a/ G4 t  g# u: V5 s7 y
Timer.timerSettings[1].master = true;
) `% E6 X0 t! |7 H7 |3 ?Timer.defaultHalf = Timer.Half_LOWER;! K6 I- y. b" \3 o* a
Clock.timerId = 1;" X4 L1 G/ H: Y2 h) M. ?
$ c/ I+ c0 `. b9 }5 B$ L
$ {& b- s, _3 e  r
/*
$ U6 O2 z' y2 Z# F- R *  ======== Miscellaneous Configuration ========7 A% _9 }1 l: G! M- f
*/
2 s5 L8 C. o4 ~8 b! f8 h
: V* ~# Q2 j0 y7 i" S/* set default diags mask */; g) a; `0 G) A9 p, Y% g# g
var Diags = xdc.useModule('xdc.runtime.Diags');
# O& L  b/ x" i" Y, [8 z: }var Defaults = xdc.useModule('xdc.runtime.Defaults');# A3 |8 ]8 v3 A! q. A! ?8 U% L
; I' M+ c7 C) J) x3 z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' V$ o' p) J. L/ C. QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# N$ e. l  h8 e* h8 O  u/ I
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" S8 x" t7 ?1 U+ o- X! i% g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; s! ^* P  M( a3 _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 j: u; W4 N  H5 _" s5 Y" HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 p$ X0 h9 l% A' H- C( Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& n) j: W2 m0 D
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  U! j$ H3 n+ p4 ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 V3 Y, H2 n/ |2 j" x2 CDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, r5 C8 a8 n; h. s! {( vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ H0 V# e  P2 {! z# b$ A5 {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. i! J; E) r. S" h* v
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ y7 i* V* y: Q/ u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 \! p$ P$ u" Z2 c7 b- d1 M
8 L3 R, X. g3 K. }
/* override diags mask for selected modules */
3 p5 ?5 M. A3 B& ~$ e  p4 xxdc.useModule('xdc.runtime.Main');# U2 T0 c1 `7 l7 d5 x* ^" B6 a2 X
Diags.setMaskMeta(
, o. a) j$ x& j5 x6 V& G    "xdc.runtime.Main",
4 V1 y9 a! h: a/ \9 ], O2 K, A    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' P$ D) d6 S2 ?) l/ \+ W    Diags.RUNTIME_ON
. P& ~2 m; r4 a! n& {* P7 g6 z);3 d7 y" V* C" o! g! Y7 d3 t

+ A9 b6 g) W7 g- Q/ A% evar Registry = xdc.useModule('xdc.runtime.Registry');
: z/ n1 `2 G3 S  DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 Q9 l  F, b& j7 P) |; z. G- ?: |4 ~Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ h, r5 `) D$ m( G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  u! R* y! `# N3 V& B  m' N% N6 U
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 w8 p, f" {2 o  }1 v# F9 B; _) {+ R* n& C- N* F
/* create a logger instance */% m  @. u1 A! y0 m7 b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' [" `/ I$ V( Z: n% b" y. h
var loggerBufP = new LoggerBuf.Params();
. v+ E+ ?0 }9 _' h% y# c* [4 H6 JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( y9 M5 E: L, W3 K& K% X/ o5 A" ]
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ Z- k; j! S) R# n1 `
5 U5 I8 D. D7 x' A1 Uvar appLogger = LoggerBuf.create(loggerBufP);; R7 h) i2 u5 ?! e: z* A
appLogger.instance.name = "AppLog_Core1";5 i; {; i2 R0 B4 f
Defaults.common$.logger = appLogger;
* |+ u( T- _3 X" R, W8 VMemory.defaultHeapSize = 0x8192;   
1 _$ v$ c6 L2 d3 w: rIdle.idleFxns[0] = "&LEDStatus";/ L5 Z7 C5 [$ U; w, i# G$ C# r
Cache.initSize.l2Size = Cache.L2Size_32K;
$ H) a0 O7 o  A4 h$ {" y2 b# h& D$ k/ S  E9 g0 F; @
回复 支持 反对

使用道具 举报

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% ?" V4 O( V# T0 w. g1 Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 w' b: ~* d% A1 ]7 S, i9 e
var heapMemParams = new HeapMem.Params();% o, {" S/ e% J6 {* H! m' t% M, {" N
heapMemParams.size = 0x4000;
# {1 F7 `7 A1 ]/ r; s: N8 \$ ~
, C: v  E( q, uvar Memory = xdc.useModule('xdc.runtime.Memory');
$ t* W0 b3 w: W: XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& U' y" h- c+ y7 Y9 r7 D5 l  k- ?: r6 L
我大约calloc  每次共计大小为5K*16bits,
2 L' H! r6 I2 U6 o- ^而默认配置才0x4000、需要改大。
+ N7 t4 w" ~2 E7 h" l" f: I: \" ~+ o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' i( X, |9 r. [
Program.heap = 0;) _. H! P/ k- U6 _9 b! S6 ~6 [
Program.argSize = 100;  /* minimum size *// `5 Z9 l5 p0 }! w6 [( t  ~
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-1 08:26 , Processed in 0.040609 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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