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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 W, g. ^" F0 x6 Z
% d4 I! }5 ?& J# q* k: \    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ q; T# I6 c( E7 n
+ m! P! ^, V5 H
其他程序段。。。。。
9 R( t5 o; f9 _+ q5 J0 L/ R7 [ # Y% |' S$ e" ~& C
   free(x_d);$ l+ v( `/ M. C- w( a* d- T! |

8 ~& ], g7 R# s  U' Z- b( `2 [使用DSP侧单独调试功能,验证动态申请没有问题,6 g. O: D/ e! C  h# ^
5 b" V  d" x* R& D9 I7 K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' \* ?3 S! u; C% S$ }% m& Q& N
8 \; D( H, f) a2 U: T% h5 ~# Q
! l/ `+ @: |1 A2 U/ ^+ T
5 j* W9 l+ S0 ~9 u# t+ r

+ ?9 N0 d- m+ T  K* O" K, d" l2 o% H4 X! o. v0 I

4 l6 `1 y& ^. N0 O
) }! B3 Z- P! C* k- i  i' d  e" p' }8 y

" B; v; Y* L: w( l8 P4 {9 p4 k# [, O& v" L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 F5 u& E$ X5 Q" g6 X3 {; e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) O5 W' c3 c! j1 O3 t+ ^. x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 k5 ?2 A0 }7 ?5 ^
4 M+ L) h; J0 G6 L; N
是不是需要在DSP.CFG中进行配置
0 d8 P, o$ t1 J5 k" _我现在的配置为
3 ]- ]/ O. w% E, X; U$ u5 p* H$ X2 A. L9 ], v# C
/*
8 t2 I8 |# Z" j, O: l# p) m *  ======== Operating System Configuration ========
, p" |, p7 D* Q! }7 f8 d8 r" g$ A */
, i( I$ A1 b1 d" V  J( m% P$ ~. y( Y1 O  ~9 q
/* no rts heap */
; S, t7 G, [/ UProgram.heap = 0;) p$ ~' {- c7 h0 ?  r7 l
Program.argSize = 100;  /* minimum size */
( k- F& C  {- ]8 CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% S1 [8 ?  [2 q5 z* Q" j, M1 V
) o/ N7 n, k& {$ ^
/* create a default heap *// U# C/ z' Y# q6 I/ \2 H( e( C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 \4 p6 N( f" ]9 S4 _) E! ~  u8 L
var heapMemParams = new HeapMem.Params();. {7 L, h7 n( N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: g7 D$ c+ h7 ]7 U& o1 m& V. H0 l
7 |* r/ _0 O6 ^/ h6 p0 k& r
var Memory = xdc.useModule('xdc.runtime.Memory');
. p5 ?) o; R' R4 W1 }' y* Z- w3 ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% P5 k7 I% d( U/ H$ W5 v' h: s9 x  U' D1 Y% P' m! a  _
/* configure System module */
, V" N' L+ l# kvar SysMin = xdc.useModule('xdc.runtime.SysMin');5 [; x, M5 q0 n4 n, n% A7 D7 P
SysMin.bufSize = 0x1000;
3 M+ c, a* j; _6 HSysMin.flushAtExit = false;
2 X) A' }$ V- I+ @, i/ [8 ]7 [/ x. z+ B1 ~
var System = xdc.useModule('xdc.runtime.System');: R* `& ?0 O$ y. u4 H, q$ F
System.SupportProxy = SysMin;
- }& O5 _* ]7 ]9 i& P+ t6 b5 ]6 a8 H6 p  _9 v. ~/ F) @
/* configure SysBios to use the lower half of Timer 1 */& q5 N/ `, W& g. i1 x% P& F; k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 v- c; g. q0 j- e, x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( e; V! u/ {+ V* t8 V# Y+ H
Timer.timerSettings[1].master = true;
2 d: q. [( Q' I" V( `! X7 wTimer.defaultHalf = Timer.Half_LOWER;" r7 M- {, o- G' P. L& x& R
Clock.timerId = 1;
! u1 i3 m. M/ j
4 S) i: l2 r5 |8 ^+ u" H5 T
9 Y5 y: a, Z# H; T/*
# ?) w- h' `; h *  ======== Miscellaneous Configuration ========/ c0 j$ |  C  Z% s1 Y& S9 L
*/
8 o0 K9 n' N0 S. X* y2 l  r8 t, g, ?( i) M% v0 z1 r2 ^3 D8 K
/* set default diags mask */
. |/ W. Z  ^* W9 F( a+ d! Y: Fvar Diags = xdc.useModule('xdc.runtime.Diags');6 Y" s8 f: G" ?- @0 f9 k
var Defaults = xdc.useModule('xdc.runtime.Defaults');# Y7 Y- |' ^0 D; Q
% m% V& P  w% R9 p0 m, M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. V0 C2 d/ }% nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) g6 U- M/ Z/ E. f* R' Y; QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! d! V, o( }" t
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( {+ j+ x2 c% \3 c+ Y1 n
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 x" P- W2 \# Z8 l) W5 R$ U
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- V2 k  B4 u. n) T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) f  w* [, b% e8 e* |) |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ p/ `1 g1 }& e! p/ D6 R/ D1 h9 QDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- D; k; n% Z/ u. y* Q+ m& @
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, }& R$ Y& K) oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 }) U: r+ w9 r. g: @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 Z5 W- W8 I" q4 JDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ b0 d* g5 U+ u7 c! c2 B7 K) h
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  u# M+ A% U3 `6 G
( @2 O* C/ g$ O/* override diags mask for selected modules */
$ {" A4 K0 {* ]% M9 mxdc.useModule('xdc.runtime.Main');) ^$ ~: V% d2 U3 p$ j( ]
Diags.setMaskMeta(
! E- A& Y: ~$ H) x6 ~( b    "xdc.runtime.Main",
" O0 O1 ]# o( n* R$ f: ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,: r/ V+ n9 R. |+ x8 S3 S
    Diags.RUNTIME_ON' a1 y% j$ {$ |9 ~6 ^
);5 x5 f0 j: \( W$ C9 e1 L

' g' {  M% z" k2 g+ X7 }var Registry = xdc.useModule('xdc.runtime.Registry');4 l- e6 T) \/ B; p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* v  K0 }- W: |" E7 ^2 [8 TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( h( G: A  d* T) c0 Y4 Z8 FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;' N5 i9 r2 L# P) U0 E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 c$ d$ ^" T  z9 \

) F2 k; i5 j1 e5 P1 N/* create a logger instance */, D7 ~2 c$ f# q; n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 w+ E$ c% @5 y4 J. n; avar loggerBufP = new LoggerBuf.Params();) c6 s4 {" f# [9 m- L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! _2 W" C, f! m6 E$ X$ FloggerBufP.bufType = LoggerBuf.BufType_FIXED;2 p) e# g. w: h# z5 z) C! q

, |) a/ I, `! @3 H6 N  {4 ~var appLogger = LoggerBuf.create(loggerBufP);0 W8 u7 s2 f, b; Q3 \! ^( \  c( w
appLogger.instance.name = "AppLog_Core1";
# u5 R- E5 c2 H( p6 ?Defaults.common$.logger = appLogger;
& w' L+ L# ?4 l0 d2 yMemory.defaultHeapSize = 0x8192;   
$ V5 K8 G$ w+ ]0 E3 YIdle.idleFxns[0] = "&LEDStatus";% i  X5 y9 ]! q' e* h6 C' c
Cache.initSize.l2Size = Cache.L2Size_32K;
# m; \5 N/ G. i5 W: E! ~8 C; G6 v! [: P. Q) B# a6 D% l. @5 {
回复 支持 反对

使用道具 举报

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 O: Y/ b' d! U# d; @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 X6 C7 N- w; t9 p) \, d
var heapMemParams = new HeapMem.Params();' i, q1 c( J) H. {4 p
heapMemParams.size = 0x4000;& H: K) D( `) S# g1 |

% k0 T( M. e2 `" |  U/ Zvar Memory = xdc.useModule('xdc.runtime.Memory');
5 b- u& b, r& U4 T8 R  A3 a( RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; Y4 U& d4 W& Z* B4 Z
: u% B7 X  r1 B6 y  l  l' w3 O我大约calloc  每次共计大小为5K*16bits,! z" o7 Y% e7 s$ d
而默认配置才0x4000、需要改大。
1 H7 k! {3 k& f3 S) y' A: I) j; T* d1 U% e) \7 s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# h! p. s- p9 F7 RProgram.heap = 0;1 u; Y* Y9 g" k5 l8 {) `, z
Program.argSize = 100;  /* minimum size */. N3 S: C" p6 X) B; A
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 23:12 , Processed in 0.041534 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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