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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ @) w, l; V) V( J) a- W6 X
0 R/ p! k) N. F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ b/ O- b. m" u9 k' g3 H" s/ E& ]% f' ]
其他程序段。。。。。
/ S1 r3 e: q( u) ^, I7 Z 9 m, o, F$ ~' F
   free(x_d);' T; a  h8 m, v3 ?

8 X2 x5 J  F9 `+ e! B3 i/ \" s使用DSP侧单独调试功能,验证动态申请没有问题,
3 v- ~1 j0 Z' n" T. ?. l
3 c5 F/ w/ _4 {1 G" }6 h$ x5 }) p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 Q0 b% I2 K8 w! E$ R! W: W
9 u( d8 G# Q% L7 ^! q* e

6 ~8 _  |- {- b+ A, x2 U9 Q! U% e/ S7 X6 v# X7 D  j: s

  u; T+ h/ m- e; `. c9 F" q* H2 ]& Y+ a" z6 ~8 M

+ V3 |& U& K9 T1 y- v
4 h7 X% V) q0 S6 N8 {: T) x$ Z% `  `& t: ^

! Q9 y4 U( T6 d1 |: K
% z4 @  z& A* {- y6 f6 @& y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% B% J# o8 s1 @# Z% w7 s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& _5 F* x' }% s. p
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, l5 o  }0 t" x1 c0 _  ~

& d) T+ ~& z" N: h是不是需要在DSP.CFG中进行配置
6 d* W0 w& B, R1 r3 j- ^我现在的配置为
) R8 Y: b5 d3 O2 a2 t
8 w! e) m; x2 ~4 I/*7 Y$ ^# T  V7 x8 i# n, p  C
*  ======== Operating System Configuration ========4 H* H% o( m0 o2 Y( D, p0 I2 T
*/
8 m7 k' Z, q  u7 N0 p7 f+ l2 Y& b* }8 `  i
/* no rts heap */
6 V  h2 n* R; SProgram.heap = 0;
% D- g! k1 x: }6 mProgram.argSize = 100;  /* minimum size */. `# \. M& I  H$ f. l, \. ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ J; _* H. b1 u

' L9 x) @, D$ G& s& H/* create a default heap */
8 N+ D! M; R2 m4 H) Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ I7 h. f' Q7 L, |1 k- w' s
var heapMemParams = new HeapMem.Params();/ T7 F) c& |5 J; d7 @9 U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% y. S- s  Q- b9 ?2 |$ _: o( `# r

' q" c( \9 G/ J9 V! E1 ]
var Memory = xdc.useModule('xdc.runtime.Memory');" w: [; F. E) Y4 D# [: }" ^& ?- V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* @! u- @2 ?) `1 r" j7 x

3 B; z# N  u6 R  ?7 y6 S/* configure System module */
- }  ^3 @9 W& m# o5 ]0 x$ N' Evar SysMin = xdc.useModule('xdc.runtime.SysMin');7 H  B( z! M; w6 F$ w# u
SysMin.bufSize = 0x1000;: y$ X" ~  k* \( s
SysMin.flushAtExit = false;
+ _5 J1 h2 j1 c3 E. }7 ^4 L9 v4 [; O$ h
var System = xdc.useModule('xdc.runtime.System');
' C% A  \3 G- @0 l) P7 L5 B; PSystem.SupportProxy = SysMin;3 M; Y8 a2 F/ {4 ]4 Q0 g

' |) H, K. G: C$ ?0 i- Y3 H/ b3 o/* configure SysBios to use the lower half of Timer 1 */! C& T( d  k8 q8 ]8 S( s, E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) }8 N5 i2 C+ r7 Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 Z* \' p" H% s9 ~/ g7 C! `' UTimer.timerSettings[1].master = true;9 M) c' g2 `: ^/ Q; b' Y
Timer.defaultHalf = Timer.Half_LOWER;# {( @' F. k. c6 A
Clock.timerId = 1;! M3 S2 ?! i/ A0 v# Y: T; w
4 u2 S/ X% _5 U! J

6 x* q* j" U1 f8 P  G* l8 o! o/*9 c: k2 B# z! c
*  ======== Miscellaneous Configuration ========& R4 N1 m$ }7 b" P, A$ u
*/  d. ^; Q- Z) Q7 ~$ T. n
$ `  E; S0 U+ \& X
/* set default diags mask */
% j+ e  L; h% M, mvar Diags = xdc.useModule('xdc.runtime.Diags');$ m4 p/ l& Q) L; A/ G. C# G
var Defaults = xdc.useModule('xdc.runtime.Defaults');, `: r/ }  S8 Y, s# x
7 C1 x8 h( B" z8 V6 K/ k, }  l( C) g7 M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 s. ^" C; y6 X: H+ N4 G1 ?" x$ G
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# k& D" y, m2 U' g9 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; V  S  E- E9 TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, K5 w: {: W" WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 t6 w' f0 e! O: @% h2 ^Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 j+ }# l- Z; r& a4 U- O% _% S! T5 c) RDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& k6 T" V; _  n! j/ Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: A7 f! g; O1 w4 b3 U: o3 fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: S8 t% Y' x' r# J( E9 r/ _$ xDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) ]6 v4 M6 `# Q1 X. |+ v& V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 }. T4 H6 T- S1 U+ UDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 S, B$ h0 i4 Y$ Y" m- f3 p. M
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* S4 D- J7 }" f; ~3 a
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* s1 e' i0 r9 R0 z, l

. Z$ R' E) y' v/* override diags mask for selected modules */
7 l! d+ z) p' u" T  A& d) |( Zxdc.useModule('xdc.runtime.Main');9 D# d; O7 o5 ], r/ r# l0 }7 g
Diags.setMaskMeta(
- o+ r( p5 r3 J    "xdc.runtime.Main",- j: i( R2 q$ O% ^: \
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 F" W! h# u4 }: s% G
    Diags.RUNTIME_ON
3 x* [* _, M! A: B- Z4 |  q  ?);
- U8 S: h3 @  T% A0 c! k3 n7 M  K# d
var Registry = xdc.useModule('xdc.runtime.Registry');
& x+ ^8 j6 [. URegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- R5 O( Q5 R+ e0 x) K+ h! N% I6 \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 t1 B% o- d+ z; V% Y2 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ O8 `* W* o% G# x6 {5 k) A" e# iRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  _2 z0 h! c. s) n! j0 V
$ A7 G0 |/ W' f7 b* |: X/* create a logger instance */
1 i- H3 A( r/ lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 T1 o$ Z/ H7 P. `2 C
var loggerBufP = new LoggerBuf.Params();! [* d0 K! Q" E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 o. L, ]7 k7 c% |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ Q- E" F! m* x( Q* z+ ?, ^5 E% I, `/ E# Z
var appLogger = LoggerBuf.create(loggerBufP);
& w$ A0 U* G7 _; V2 dappLogger.instance.name = "AppLog_Core1";
3 D& i, H0 _0 D7 oDefaults.common$.logger = appLogger;. ~" {" q2 q- U8 k0 n" ]
Memory.defaultHeapSize = 0x8192;    # {  P* Z) p: E, R) Y
Idle.idleFxns[0] = "&LEDStatus";
) h3 S' ]7 I2 u( CCache.initSize.l2Size = Cache.L2Size_32K;
7 V7 @; N# g7 F  f! l" J( i, L4 [. p( 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 */9 q" O3 H+ C& W9 w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 I' i6 N- n+ d/ T+ f4 r
var heapMemParams = new HeapMem.Params();
% w9 x+ v! N7 ^" e4 ZheapMemParams.size = 0x4000;, p, v9 z& U3 j1 J% ~8 C! S- C
2 p! G; c6 I' Y/ i+ X
var Memory = xdc.useModule('xdc.runtime.Memory');
% U0 k' N( A$ IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 L$ q( H' r; _& ~
# [& r3 y! p/ a: ^% J我大约calloc  每次共计大小为5K*16bits,  T" K0 D% r8 b" c7 D: d  [
而默认配置才0x4000、需要改大。* {" I( n% s/ t8 B! X6 ]

7 Q* k* V$ B, |3 C0 f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 c+ ?: Z: E5 h+ U+ ]Program.heap = 0;
- R5 {2 y8 v4 F! H  dProgram.argSize = 100;  /* minimum size */; s7 ^6 {4 L4 H& Y# x8 h
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 10:06 , Processed in 0.041518 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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