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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( c  i: g( X8 X: f7 b$ G, ^& v
( @$ j6 ~0 G/ H6 a1 V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. V1 p" B% p7 l* N6 P) e2 R" Y2 `# I; ^9 T! G- @
其他程序段。。。。。
' l- y4 G' L( j' a, w' D* u
8 B( ^) E* d) T" X" |1 v4 H3 S- T) n+ I   free(x_d);% g' ^! g. a% \/ x
/ \! n% H3 ]: n; ?4 p- {* b
使用DSP侧单独调试功能,验证动态申请没有问题,7 A' J% p+ N7 `9 e

" D" @' x& p1 r6 u9 J* x( y, T$ Q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: q7 O9 K9 l/ a3 _1 {

; z0 y3 M+ s; V1 _2 G
) a+ p) f) `* \! ]8 ~; g: D, q8 p( J

& W% m# r% l+ k& l. `* M/ m' \& d2 J9 U

. U, M6 J: M) V
/ D) L1 {! ^5 F' N9 K' l% q& N* ?% i1 e6 W6 M4 z
/ ]( G, Q+ ?  J6 ^. I! u

! j( W- J7 p. ^, B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& f# E- X7 Q& [' f: y; Z2 t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, y3 J% p8 k; E5 W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# ?, _% J( _2 d( T3 ?

: r  ^# t, q& \! I2 q" ^" J是不是需要在DSP.CFG中进行配置
& j7 j7 |, A( Y8 j% c- C# K( @我现在的配置为
. {0 [+ T  ~2 c5 F% q+ h! [% K# g' z5 `( x
/*8 e  n& B0 O# f; K. f( Z
*  ======== Operating System Configuration ========
( Y& S! g  J+ k4 |5 A */4 K9 k" |- n; z1 C/ @- J
/ T  ?; b8 B$ R" W  G) z( `
/* no rts heap */
9 e# O! y3 U8 P# c1 }) R2 R( AProgram.heap = 0;
# Q& N( [, y8 n4 }* y: n! x: R0 ^Program.argSize = 100;  /* minimum size */8 A( J7 k0 E' E: z. V2 h0 J+ d% M" f
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- ~" p( Y9 y( ]% a2 @4 ^
# K0 a) p* x7 ?  R7 J' H6 ~
/* create a default heap */2 K& I& q) H0 \3 z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& Y/ _, `9 w/ D# k& Q  F3 u& j; F$ Avar heapMemParams = new HeapMem.Params();8 K- q6 g; R7 _: d1 e7 g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: C# \+ b& y' z/ b
% t& G& E6 B3 L8 u6 U, M
var Memory = xdc.useModule('xdc.runtime.Memory');
& m5 O/ E; z$ [) H( KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, N+ t% R4 r5 T2 X1 K  r/ x& H

8 w; y  W$ {, b+ R4 F/* configure System module */
* P/ [: \9 }5 v. K- s" B3 Cvar SysMin = xdc.useModule('xdc.runtime.SysMin');0 n, k& H* C/ P" o' J
SysMin.bufSize = 0x1000;
* O- d. N* r& R& f+ m! dSysMin.flushAtExit = false;2 _  \$ |' [: O

' M( J4 v0 Y# cvar System = xdc.useModule('xdc.runtime.System');
% p1 W0 ]2 y% B/ z* p6 {$ }' NSystem.SupportProxy = SysMin;
; O% @/ x# G/ B0 M
2 k1 p5 s7 S% Z- w& h# z/* configure SysBios to use the lower half of Timer 1 */  K2 l, Q* J$ Q; k! z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) J" q/ L, N- C( O2 ~var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ M  P$ T, G' _# h/ l9 c5 @( DTimer.timerSettings[1].master = true;
6 V: o+ Q7 [( ?0 z( LTimer.defaultHalf = Timer.Half_LOWER;, p2 Q; {6 K$ m, ?7 Y+ [
Clock.timerId = 1;
$ h( F4 o# o6 V4 @" g( w8 U1 {# L5 J2 Z1 b# @

) Z5 N) o" y+ B/*
$ |3 ~# P, f2 S4 z1 q6 a, o3 j *  ======== Miscellaneous Configuration ========
! j/ \: L4 B+ g' M. L */; ~) z. f# ~; ?6 z

) D' S& ^: v' Q; T. c4 ^- q9 [/* set default diags mask */
4 @' H8 o! P  W* t  b. Zvar Diags = xdc.useModule('xdc.runtime.Diags');
' s4 y) e& J+ G2 t* `( fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
- H9 F* g$ h, e# y. [8 f* T: l/ C! ?1 A" m
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ a# y0 P4 O4 u% ]( d. B: RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ o% n8 X; a4 Q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 H; ^) S% Q9 w5 r* A! m5 kDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 |" \' J0 s4 H! y2 F2 N; O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' M+ }0 _; B8 I% t0 p, M
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 J1 t. C1 k& d, b, Y1 ?- m% a$ j
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: ~" r& I7 {3 g% f+ _9 YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ G- j& X, S1 w" O% g9 K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ z, J0 ^5 T) Q( M5 W& a; @9 n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# E, K# Q' {( KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: `+ w- r0 {; d$ w8 u$ P, b
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 b0 A, @, x* R4 B7 JDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( D3 b% w; i9 n+ ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 q! h4 |( x6 _5 F
# v0 S- X5 q4 h3 u9 b8 w
/* override diags mask for selected modules */
3 T7 W6 ~# a! V  h9 E: zxdc.useModule('xdc.runtime.Main');/ R( O) J/ q8 D" w
Diags.setMaskMeta(4 u" R) L+ f. o2 e
    "xdc.runtime.Main",
: B9 h9 M, X% q  E    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( C7 M% Q6 O0 c% N( L! \$ m% T    Diags.RUNTIME_ON
2 A; O! x6 l0 g' w" A& J0 d' I; b);3 m" d; o* J* ]6 E5 b! W4 m# Q

/ n; `/ P8 p, g. k2 @+ V4 d( jvar Registry = xdc.useModule('xdc.runtime.Registry');
2 l1 F: F+ k( X! L0 gRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; c- T4 ]/ w# X+ m( }) }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! {; J) W% b' j8 E
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% o6 ^* W. J  T5 @, o) q" kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;- G9 L4 L/ l1 e9 i) P& y

% N3 ^; M& ^* ]8 W- q& T/* create a logger instance */4 g' p) Z  g& s( K! V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% I) _* J0 w$ jvar loggerBufP = new LoggerBuf.Params();
0 x; G5 Y& t9 k3 dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 ^/ \' z7 c6 O- c9 l! ?3 H: bloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" o8 ^! d( ?& @4 ~- Q) [5 U  J8 o) _: J9 {; T
var appLogger = LoggerBuf.create(loggerBufP);2 D9 ]2 i$ _2 a; K
appLogger.instance.name = "AppLog_Core1";0 A; ]6 }8 d+ I
Defaults.common$.logger = appLogger;
4 _9 G7 `1 l1 G5 m8 k% n, AMemory.defaultHeapSize = 0x8192;    9 j4 y, ^9 O) {% D
Idle.idleFxns[0] = "&LEDStatus";7 I( F6 K+ T& u& X. K' r: U
Cache.initSize.l2Size = Cache.L2Size_32K;
# P$ @/ ~4 M! g8 A! B) M7 r/ a, l2 h
回复 支持 反对

使用道具 举报

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 */
3 z, f: K4 o& }* wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 m: i$ ~/ L3 S: j! H5 _1 O% U; t. R
var heapMemParams = new HeapMem.Params();% |( x# B, |. }# P5 ]
heapMemParams.size = 0x4000;% \9 ~5 Y2 n+ [2 d
9 G# w2 \8 O/ n! t
var Memory = xdc.useModule('xdc.runtime.Memory');
+ Z6 A0 K# {4 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 }+ ]2 R  e2 F5 O( ~; G& D: w
% I0 Q" e) g% k+ j我大约calloc  每次共计大小为5K*16bits,7 N: C! c9 F  i% b  m/ Y3 z, d
而默认配置才0x4000、需要改大。6 m9 Q( J  A: I! L1 f: P& e$ H
7 H8 F$ J# |1 j! p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% I3 q: |# u2 x9 \( Z6 g
Program.heap = 0;
; N* j$ r: _* M/ h/ d2 rProgram.argSize = 100;  /* minimum size */% [- K" z; b0 S1 m$ v; C' A
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-9 05:36 , Processed in 0.040192 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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