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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ O; d9 s# z6 r1 u- I' a
7 t, Q3 ]0 }4 ]+ m. ~2 v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; v7 E, z# ~3 _0 ~; _3 M9 p! F. c; o; b' I
其他程序段。。。。。
1 k5 @% q3 [2 J/ H; w- p/ t
& ~% o0 M7 y5 J   free(x_d);: z' d. @  d' n4 w2 v. b
: G. p1 |. y; _0 ^0 I, Z
使用DSP侧单独调试功能,验证动态申请没有问题,
! r( ~" j: f0 W6 N
% u  A5 G% r, i- u' P8 D! \" F" T但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( ?, V) J8 u, H4 Q' [+ ?# b

; @' Y! {( [: o# Q& e- T. W! N9 }+ F& O, T
  X( h1 b8 r$ f6 J) B" i

# l- J2 x4 P( j5 q% Y/ g  h9 A
& {$ n* d+ l  }( W- i. \5 W7 D
3 w- {7 A7 q- ^9 j+ H( ]
! c- u, B. z: K1 z" n% y* P* a5 u  Z
' _( D# `$ F1 |' P. M
. m5 {2 f1 [0 v3 b. ]9 }- a+ u# b  _! ?$ [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* U1 \! s& x+ k+ }; d* _! \- c/ }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! [. _, V9 A" Q$ I6 ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ N1 D8 N6 z8 h* z$ A  N
( C6 j, n, R, U4 {9 a! ^$ a/ ?
是不是需要在DSP.CFG中进行配置( E0 ]# v- E+ ]9 d/ z# e: O$ a9 \
我现在的配置为
$ B( u" Q! U' e0 p- K6 q
, @  m; o* j  E) |, Q/*) g1 N0 ~5 o9 P
*  ======== Operating System Configuration ========$ N3 K1 K- u) n- Q& p$ X
*/
( `/ q) F0 M! w" I3 O' S' ]  R  c% [# h6 J; G- n
/* no rts heap */0 M0 B+ {& K0 Y5 A
Program.heap = 0;
+ _1 m1 }9 r- J; f4 v$ W( dProgram.argSize = 100;  /* minimum size */& e0 X8 P1 ~# E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 r. Q1 \  p# e6 {( }/ Q
+ f/ Q$ T9 A. G4 f3 U) g' d
/* create a default heap */% v$ |6 s2 U0 A+ l- |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 a) p) g+ _( }
var heapMemParams = new HeapMem.Params();/ v% i# s# Y# E0 p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 t+ h/ S- a! t' L- u
) G0 H" D. q/ {9 {
var Memory = xdc.useModule('xdc.runtime.Memory');! S2 K; s5 r" O! A# o% ?) [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# Y) m2 s6 i: l% n3 G  r4 f0 z& T
0 C& T3 p. @+ J0 {2 x
/* configure System module */
; W7 x- K$ D! U' evar SysMin = xdc.useModule('xdc.runtime.SysMin');( |- z: ^2 v. D, Q# {& d
SysMin.bufSize = 0x1000;
; Y3 D9 Q$ G5 L) r$ c# L, XSysMin.flushAtExit = false;5 ^& o  \3 Z4 o9 R4 u( E
+ m9 T% T# q! W% a2 v* R& k
var System = xdc.useModule('xdc.runtime.System');/ R0 b* @2 S" Q
System.SupportProxy = SysMin;
; m+ x: [0 Q- x; |" ]8 Y% K
7 }2 N; ^5 S. U0 v1 G- E/* configure SysBios to use the lower half of Timer 1 */
  r" f' w; N  L% L( Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* U9 [; Z0 O6 C$ U% hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 _$ R/ r8 V, t% v$ dTimer.timerSettings[1].master = true;$ Q, U6 I# H' ^7 v; a, k
Timer.defaultHalf = Timer.Half_LOWER;
) m! C  @, S" v& m) L4 W! K6 QClock.timerId = 1;
1 C" X- o. x+ a( J' l5 z( [, r9 _; c  {5 L3 e. o; _

+ w* `* x. z' R# h9 X- \/*
. T4 j* G" u. G) c2 n% ~( T *  ======== Miscellaneous Configuration ========. N% Y6 @8 ~5 G& q
*/6 w4 |$ b  S; M; N$ Y2 B

1 S3 P+ r3 R, w4 r/* set default diags mask */
6 |9 j6 x- ]8 B/ _5 ovar Diags = xdc.useModule('xdc.runtime.Diags');
* c, ]  E! O: zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
9 q" \6 @8 B9 L% r9 i  E/ _( a4 g2 F0 Z+ `7 O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 w3 s( u3 L: n8 K
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" p- s, Z$ L. K% ?+ J
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  ?9 P. N/ N7 y; @: W; N* `( yDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 x8 s  D: o3 c: @5 `) c& aDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! H5 M4 B" h6 L* E' Q! WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 x: v: h/ \# K. ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( @" E  Y% w0 X: Z& @+ A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! w$ C4 _  r4 Q; Y& {& V% y& K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- J; L, O$ [$ y* u7 z* \Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* N" D" Y+ d! s. P  C- `. h2 bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: }6 h: q$ ?7 `- H" _+ [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* B. w- d) _& W# ?0 ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; T) B- }. o' \" cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ Y; I( X  |4 g4 ?

! A! S( F. f% ~  M# g9 S0 |7 u/* override diags mask for selected modules */
$ v* x5 ^# y" p4 K" Xxdc.useModule('xdc.runtime.Main');
1 U6 X9 N* S  \! Y4 pDiags.setMaskMeta(
) W! a9 M) ^/ V9 L9 {0 u& @4 H, @" u    "xdc.runtime.Main",7 \) n/ x2 t: r/ F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* U. r" D/ j9 [! |
    Diags.RUNTIME_ON
. y- Z3 K, Z, u  c);
. e+ K6 _8 n- K$ J
8 O1 \- ^$ ^& M$ |& |9 f' ivar Registry = xdc.useModule('xdc.runtime.Registry');
! U: d8 s  v( `) jRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ h( z: H* ?* i2 A) Y  m$ w
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ r7 K" R( f3 [. Q/ ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 @' j5 g: T  C3 ]" n" f! e6 {Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 y8 \' \  p7 x
! j# D/ F1 i1 k
/* create a logger instance */
' t. s0 i! z; D1 ?% k* Gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  N% p. N9 v0 C# l8 @var loggerBufP = new LoggerBuf.Params();8 b2 _: _- C, v2 L  n/ {
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 C) a( n" V$ X/ \: w" a* B) f% a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 j* _% Q) }0 }5 K! t. D7 a. `2 G

" C0 S! ]/ O6 I7 k8 i. b* I2 zvar appLogger = LoggerBuf.create(loggerBufP);* c9 H' z1 u' d
appLogger.instance.name = "AppLog_Core1";4 D- j& I: ?2 b# K% [7 @
Defaults.common$.logger = appLogger;9 z9 P$ l$ P+ z
Memory.defaultHeapSize = 0x8192;   
  ^$ s$ m, l% p- ^$ G! KIdle.idleFxns[0] = "&LEDStatus";
$ L) z5 j! H$ X9 I8 JCache.initSize.l2Size = Cache.L2Size_32K;) j0 d2 r0 N: b; w8 A
+ G0 @# d4 z& j9 c9 r. l
回复 支持 反对

使用道具 举报

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 */
8 D2 \+ a1 ~8 @' l" l8 r& tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. S; V* W  n6 P# B: J1 m7 Avar heapMemParams = new HeapMem.Params();
2 I5 z9 `# s8 RheapMemParams.size = 0x4000;
" V# P. o  M5 `- p
) ^, \( [0 ?7 t; h9 lvar Memory = xdc.useModule('xdc.runtime.Memory');# R- W/ M1 W: [* [  J- b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 ?" ?& a' V5 O/ h, Q" _& h/ f) O5 t8 Q
我大约calloc  每次共计大小为5K*16bits,/ l/ ~7 |1 x2 W1 `$ u
而默认配置才0x4000、需要改大。
4 f! n" ?  S6 [1 ?" a- o; M6 t2 V% u. B$ C) X1 ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( y+ h9 o( d- t- E+ Y) ZProgram.heap = 0;
) X; c9 g& A" D) dProgram.argSize = 100;  /* minimum size */, s9 Z% [4 Z) P0 W
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 10:12 , Processed in 0.043260 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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