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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 L; ~6 b" t: K1 M4 ?3 @
- [! R  f( M2 Q  o. V9 j! S    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( K; Y" f! P3 C4 O# I
1 e4 d+ b* _- F' z/ x7 U- c其他程序段。。。。。
! w+ Z* }0 a6 W! p" ~
, c4 q/ l* j" S" k* T- T   free(x_d);3 q, k( d6 T- @& P9 i4 p8 K
% L: t! [6 L- o& X. \7 P4 i
使用DSP侧单独调试功能,验证动态申请没有问题,
' T+ u5 Y6 p( c# t
6 {# s- d2 Y/ d+ M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& |3 j  ?4 i! c' x
. R/ m$ l5 F- I/ o: Q  U2 L

( l( ]. T3 N7 q! U' ?, ?7 Q( m/ L/ M
. |# s8 o! ?3 A% D

" o3 w# `1 T+ }+ B  S( ]/ l6 w& b; V3 ]4 ?7 B
: z3 n1 Y. E3 N. U( _* I

& K. ]) w1 m  i3 ]! d4 g4 i6 _5 H/ J3 M. K( L( u% U

+ B( v7 y/ G% Z1 I. F9 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: I' U  r! a$ m5 ]0 t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 ?7 Z6 m- P$ E% Y  j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) I5 C( I5 {5 Y: T4 T) t( m

7 T" ^0 T2 ?: [2 J" C是不是需要在DSP.CFG中进行配置
! r9 u; j( [1 ?$ Z我现在的配置为
! Z; c4 j2 s* g( Z9 \
* M$ ^! t3 N* b/*
! `! ~) ?. h& ]7 _6 u% a *  ======== Operating System Configuration ========
, p' z0 |* c9 l9 J4 i5 R+ } */
1 a; Q7 `5 B7 t. [+ `% R% _/ J! K, A- w! y
/* no rts heap */
% s( d8 {* s' V* s9 pProgram.heap = 0;
; I/ e2 A- c7 z1 j+ C' SProgram.argSize = 100;  /* minimum size */
- q5 P$ O2 m& mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 V: u* Z/ {' S0 F

( d* @4 e0 F9 u; c* z4 Z( b/* create a default heap */- N( O" t2 `, _% `' K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 ?: a& y8 b' S8 {5 e! w# c* p
var heapMemParams = new HeapMem.Params();9 _& L" `- \2 p2 e" |
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 [4 }* A4 x: ^/ V6 g3 _9 f4 r* o8 m7 o, d7 ~- ~7 \
var Memory = xdc.useModule('xdc.runtime.Memory');
' C# {; n9 V7 T2 J- W) V4 nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& n$ A+ J, R5 v, Q. H. x. Z. a) w$ _( U5 J
/* configure System module */
# _5 |1 N3 e& avar SysMin = xdc.useModule('xdc.runtime.SysMin');
8 k" R4 J, o1 F7 R  xSysMin.bufSize = 0x1000;
* M" p1 [2 M0 C- V0 a7 lSysMin.flushAtExit = false;
) T7 n9 E0 I+ X5 L4 e) L+ I/ x! x. s" |& S
var System = xdc.useModule('xdc.runtime.System');  G7 R  S0 o! E
System.SupportProxy = SysMin;) N) Q9 Z; i3 J7 F% _$ O/ d

3 Q3 [: o/ [* b4 e4 n7 t6 m+ u/* configure SysBios to use the lower half of Timer 1 */# C! w% a* r: C& {- W/ y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 }3 b$ P4 X1 r" D3 \+ `var Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ P. ]3 M! r6 o/ f8 ^' [3 ?4 QTimer.timerSettings[1].master = true;
4 u" `+ W1 j3 M& YTimer.defaultHalf = Timer.Half_LOWER;
1 n/ V3 a8 T& t* Z( o, g; rClock.timerId = 1;! e$ a; f  z" L4 I. w1 ]+ \: V
9 R# L8 ]7 i- v  Q* {' ]) m" R
) W4 m  l& d& Q: J7 w) S/ E
/*) d0 r5 {' F* u( F
*  ======== Miscellaneous Configuration ========
- S0 ~4 Y/ m* ?) i */
, h3 m! E- M4 Q
, |4 j" g" n4 t2 K& D& m/* set default diags mask */0 }$ t) Y+ d5 W& V) a2 w" l5 d
var Diags = xdc.useModule('xdc.runtime.Diags');
# O) q: A' P. b7 U1 t, [var Defaults = xdc.useModule('xdc.runtime.Defaults');
* l2 J/ g  k% T4 i) f) g" M1 S! A. ^! ?2 t; X3 p  I  w% v
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, y  E1 i9 S8 t* A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 {+ B5 ^5 j1 X0 f; h" Y6 NDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 I9 _, p- G9 \- O: [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 X' j1 {/ ?" y" KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ }  a& h  u' l
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 M4 \' |& L& |  ?( t' x: gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: S5 I! J% [+ A5 m; u% t3 r* x) HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. b) _& O2 u; N# o5 g* G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 G. W0 X/ ?+ `; n9 b% d4 I. ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, W3 W! d* s0 p8 UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 g& A9 c7 t+ v0 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* y% s& n9 t3 _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% ^2 J0 q& r8 V/ B0 s4 J: t) q( V7 U% QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 k* d6 j4 k) R$ K$ B9 y

. p) U9 j- ]/ V% x( G: P# [/* override diags mask for selected modules */
; d8 O! w, F& @2 I" s* [% Oxdc.useModule('xdc.runtime.Main');
. U" x) i6 |! ^+ d: P7 C9 |8 \Diags.setMaskMeta(
/ a6 ?0 S( y: c5 V    "xdc.runtime.Main",+ U% |2 x& j1 w6 O' d: `9 R/ }- e- `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 ^- n) h8 s3 `) P- \+ E    Diags.RUNTIME_ON
# _- v$ V7 l& C8 h1 S: T);
/ F- t8 M$ b: O% B  r5 u; v0 q- [; r4 N% e- \% U8 O: l, d! B
var Registry = xdc.useModule('xdc.runtime.Registry');
8 g6 P$ G0 ], W+ ~, T9 F2 k/ y: GRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 n; K# T6 l! ~/ H; T* g- t* h' f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 A) `: m+ }. E. G/ L. ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' r0 t- a& X" d: f& W, L6 a! CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 F1 f* f7 d5 k# E# c# r

+ M( x8 B' f9 o' Z( U, q/* create a logger instance */
3 Y3 k# W0 R3 q3 L" {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. K' j8 l6 o4 w, P
var loggerBufP = new LoggerBuf.Params();* |8 K4 G4 V$ |: D
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// x" v- a/ P4 i3 N: P0 Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  F' @! |8 O6 }9 ?) \  C! a9 D( m4 o0 F$ X
var appLogger = LoggerBuf.create(loggerBufP);
! v- m+ o- M0 q3 Q) _appLogger.instance.name = "AppLog_Core1";
) j  E. a, v' L! h1 B* @Defaults.common$.logger = appLogger;- M# s- s3 Z* c3 Q6 J/ _
Memory.defaultHeapSize = 0x8192;   
* Y1 k. J" p) D: A& vIdle.idleFxns[0] = "&LEDStatus";
9 ]9 z1 H+ d3 N% O% p0 mCache.initSize.l2Size = Cache.L2Size_32K;; i) s' L( b# }4 t) y& T& h
. x, O& ^$ x* T6 ?  z, }
回复 支持 反对

使用道具 举报

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 */; ^4 W8 ~$ d$ g! O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- w- b( t$ q' y
var heapMemParams = new HeapMem.Params();* l9 g5 s" v/ y  H7 S! J
heapMemParams.size = 0x4000;
% k7 `: _. {5 q: c* e6 a! r  O% R' Z" r" q- I
var Memory = xdc.useModule('xdc.runtime.Memory');
" z! B7 f) T+ r8 IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 N. L4 V+ V0 l; B. q
3 E: Z( A& s; Q/ R# [0 e我大约calloc  每次共计大小为5K*16bits,
4 f! r! H. X) n9 f  y+ I6 z! M1 \而默认配置才0x4000、需要改大。
! r1 K' s+ M7 J1 _; }
+ z8 y6 x$ x  x# N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 v; ]7 r+ R  }. U( d( U
Program.heap = 0;" Q4 q; o  }3 S1 G8 j6 Y
Program.argSize = 100;  /* minimum size */
  A1 M" d! K6 K4 Z8 w' LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 14:06 , Processed in 0.040924 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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