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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  s, {. Y6 v5 C' J0 o) ?0 l
9 @' J3 k$ G% n) f
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! y: y/ J) ]# G# a" d+ y% F& l
5 a: [0 P6 e) k+ E' f; S其他程序段。。。。。
  G9 R2 I$ _/ L" Z: [ 8 c  o: K' b' l- p: N1 R! |: j8 A
   free(x_d);
4 C* ?4 H. A1 J9 ^& h2 Y* w
+ |" y) X0 R0 g使用DSP侧单独调试功能,验证动态申请没有问题,% _/ ^& q4 \" l8 ]6 T1 p& G- b5 f

5 A# j  u+ {* n6 G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- q1 h0 p1 l9 _9 Z6 `
' q4 Q' j; d8 ~1 m" J4 V. M* g6 x
$ q% \* Z5 [# Y+ ~3 P  H0 m, l

- \+ ?0 n6 L1 V$ a$ t) S+ L, N
$ h( k- q+ _0 O- j6 J
# M4 U! e; i. t0 g0 L0 R! n5 j3 e0 Q' |
( l2 n  W& Q, ~  ?7 K
  k. i& Q9 h  {9 J3 {/ h3 s

5 ]8 @8 d4 O  S* t" H1 ?' w3 q0 s  x' _2 o% v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 c0 M# M3 i) w' o, @5 t! z! g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: o! P* [" r& ]4 R# d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 G- W2 o% N4 ?
8 i8 y7 A+ M& h4 F* l6 W8 {
是不是需要在DSP.CFG中进行配置' J7 i0 A% {/ ^0 H7 ~1 ^1 ~
我现在的配置为. g3 P( P3 z9 ?3 n$ l) W+ Z

6 W# S5 h4 a8 h/*7 Q: r) x$ Z3 D3 T% @: x( a
*  ======== Operating System Configuration ========
( g# A5 X3 `" [$ ^+ _" y3 a */( y+ [: l! K: a# n4 ]5 `+ z1 }2 X8 }
& ~$ n, k$ L+ J( X# }9 a0 P( W: o
/* no rts heap */
7 [$ x2 m1 z. w( H* S1 xProgram.heap = 0;$ q5 y9 M- [/ _; M  w# o8 y) H5 ^- |
Program.argSize = 100;  /* minimum size */2 I) ^  e  U9 @/ l: Y) D& m+ L
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" m+ c6 u, p; t2 N" m8 r- @# n1 C

% {' ^% J' \! @7 G: H4 P0 @1 j- j) O/* create a default heap */3 Z- t: s0 j1 ]% t2 [7 r! M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 D$ Q, I, ], V6 f. y4 v% Z, M0 Vvar heapMemParams = new HeapMem.Params();
! [0 a, q/ P$ W/ G- z$ w  TheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 U9 M% E" k0 F2 @. I
! {" q/ R' u! ~) W: M6 ]: j; i9 j5 D
var Memory = xdc.useModule('xdc.runtime.Memory');
  ~' s4 D5 _. u& [( xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) V% b7 U% x/ Y5 M8 d8 v# z
/ A- G* Z5 ^' w' g9 o/* configure System module *// m$ O+ ^* O0 d# S7 w4 D0 b' O& a
var SysMin = xdc.useModule('xdc.runtime.SysMin');% p, K2 L  G* ~! @$ A8 h
SysMin.bufSize = 0x1000;$ k( {! C: \1 M1 |' D$ f
SysMin.flushAtExit = false;
. n" d% `) k0 j1 \8 o/ Z) R/ o( T- O
4 r. r" A% K9 c7 E0 ?. m9 _var System = xdc.useModule('xdc.runtime.System');6 B. v5 [5 T0 H/ f! d
System.SupportProxy = SysMin;
$ h/ I4 j8 s3 P; Z: G: z7 R  s" Q$ F$ M' X
/* configure SysBios to use the lower half of Timer 1 */
, {" J8 D( |8 o5 [; V' W) b( A# X  Avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ M% Z' t5 m* e0 ?1 j8 m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ v' n) Q! G" l/ V( S  n( q
Timer.timerSettings[1].master = true;% k/ T  O6 o) Z6 _! ?( |! k0 U  x) [( }# }0 g
Timer.defaultHalf = Timer.Half_LOWER;
2 h9 L/ g/ ~: z) ?; k; AClock.timerId = 1;
9 S  ~, \3 v/ X2 H% I  B$ s' T) g0 |. ~; [& N! P. s  S2 g

. V8 l2 p$ p  P2 G/*) h7 X% h! L8 \' U& K9 m
*  ======== Miscellaneous Configuration ========
  G  T0 O( x+ F1 }  @* M */
% \2 q5 J: ^1 J: ?( V8 O) m8 ^1 Z  d+ i
/* set default diags mask */& z( R' l) A& i3 |9 b
var Diags = xdc.useModule('xdc.runtime.Diags');0 ?& x  V% U* r& U. G
var Defaults = xdc.useModule('xdc.runtime.Defaults');, Z* U- T6 C! ]; g9 u3 @
+ [" m( l9 Z( |2 t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) Z+ E$ h1 s2 ~- u: L5 uDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 P/ P3 q0 Y! |( S3 M' m. {Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 s. S, o5 @& @" C! B& b6 o" I5 I
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 u5 n8 A4 m2 g3 g- P! _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' Y2 l# g" w" Y4 d% f8 mDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& X/ A# m% g2 n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# Y0 R4 }0 P. }! q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 g: V# d+ \# ]- {$ k' TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' y* z3 l4 @4 n  b
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  b  ^+ C) r1 K4 d5 lDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# i4 z$ x* J+ y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( ~6 y0 q( }0 j1 l. GDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 J4 ~$ L+ G, z$ G, e1 Y$ v; FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  E- i. r! U+ U! \' p1 Y4 H0 i
5 ~1 U* w4 f8 `+ A/* override diags mask for selected modules */
7 r, ^) V  ]6 e2 N; _7 w2 h: Yxdc.useModule('xdc.runtime.Main');
* k% b+ P5 o2 P: ^8 V0 T$ bDiags.setMaskMeta(
* c8 V& \) F$ t9 Z: X# k0 D5 a    "xdc.runtime.Main",% X/ D( o: h' k4 j
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) {! k. o  K! h0 d& y4 ]. t% A
    Diags.RUNTIME_ON
4 u  a2 |* w& A; S! g; @" M1 m/ z);$ u; f. j. O, U$ ?
6 v  o' w2 y0 e6 V
var Registry = xdc.useModule('xdc.runtime.Registry');) e( o, |, q# n. h# l: O; t7 M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# W. i5 ^/ S* s6 W- E1 u. ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 }0 }- v. r" s5 W* R/ e0 t: j' y  kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 W2 r1 z) ~, [& _! C* {% r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, W* B( ?6 ?8 \) R; M
7 z+ J/ H0 {. H' M% k/* create a logger instance */
! M0 N6 g/ h$ Z2 y4 o* ^+ qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- H+ B8 W6 {& X; V
var loggerBufP = new LoggerBuf.Params();0 x; W1 |& g% I" [  }0 b! \/ e
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 [) |3 l9 ]) _6 x7 [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. H5 K% ]* R  l$ J; v2 F: ]* M# z4 j; |
var appLogger = LoggerBuf.create(loggerBufP);( `5 [0 y) G4 ]5 L
appLogger.instance.name = "AppLog_Core1";
- U9 e/ s  j" r! _8 s* ~/ o' A  zDefaults.common$.logger = appLogger;
; c. ^; o( u. D3 r; uMemory.defaultHeapSize = 0x8192;   
% q2 j. r0 F1 ]+ h$ qIdle.idleFxns[0] = "&LEDStatus";
0 n6 \/ ^! u: P4 S6 J; o6 \$ wCache.initSize.l2Size = Cache.L2Size_32K;+ ?* H9 M: q* P/ e. `+ [

" J6 j  [$ O8 k# Y+ X
回复 支持 反对

使用道具 举报

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 */1 U( T0 H9 [5 q9 T* ?7 v# Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 `# C1 x2 B' u( E% l+ U1 z. Kvar heapMemParams = new HeapMem.Params();2 t# X7 ?2 v: O8 J/ `! ?
heapMemParams.size = 0x4000;' V- N8 ~) f3 S, F
- P. H* {1 `& \5 k/ ?7 O
var Memory = xdc.useModule('xdc.runtime.Memory');1 d- }, y: }8 I: g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) u5 e  r9 z8 m3 \' |  h/ u4 q
* g( D% U$ i& k, u! b
我大约calloc  每次共计大小为5K*16bits,6 N2 J3 {. t4 y, ~) F7 ?
而默认配置才0x4000、需要改大。: P1 s. M* Z" `' Y  H1 i
# Y) |! Y& t; n) X# d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 [$ l7 U) O+ F$ x& j; l- G( k' w& @7 E
Program.heap = 0;! q! G- H' Y! Q9 a; O' c0 O& D: u
Program.argSize = 100;  /* minimum size */
+ v$ h9 K1 `$ B/ `9 pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 06:42 , Processed in 0.043535 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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