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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% m' ^7 Q  t- m+ b3 z

, D$ w' ?) k: d4 e7 `8 z  D" }5 |" c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ s0 w/ j9 F# a. T8 A

: A0 F  g# [7 s( }  p  L3 Y3 B! t其他程序段。。。。。
# J1 a  T4 Z/ U" l* _0 p/ G8 f 2 B' M- r: A  k$ V) [3 F- D
   free(x_d);. f4 b3 E2 t3 D& e: E/ U* {

; D$ ~0 H: H' C. [$ \使用DSP侧单独调试功能,验证动态申请没有问题,8 ^; k$ l/ q; e( P5 Y
3 T! w% O) a$ f! B
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 c% U0 z) S6 G+ L' d
3 K, u0 W6 s5 r: ?; m  i  h* @+ y

: M5 H( W3 }4 s. x: A8 D
+ v9 J) A2 O9 u9 s! {9 K% m, M# @: e; @- D

7 S7 i- @0 F9 g1 w2 v+ L
$ S4 W  Z. Q0 O* j, r5 R; N# a6 u$ H3 Y) t, B8 G8 }

! M0 q9 H3 L- A* b' n2 V
, e0 t7 o* K/ x. z3 u6 u4 N
: w: [) k& @/ c. Y/ W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( d$ ~, @5 A/ b# J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. @  _" R0 ^7 H8 n8 V9 s: y6 c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: q4 M2 R4 _" `# [6 v) l, d
' F& f' |/ O( g! c
是不是需要在DSP.CFG中进行配置
$ s$ u' Y  n7 e$ F1 n我现在的配置为
& F+ d4 d2 `/ l2 {! W" ~5 H  ]: Z) v0 J0 p3 T
/** D7 O* J) L4 I* S, H% s
*  ======== Operating System Configuration ========
* ^7 l! j4 P$ l8 G( _6 m' }) S */
/ l) R. B9 B! R
" ~% \: _; L3 \4 N/ r/* no rts heap */0 j9 q5 ]6 D% [, N* L. C' S
Program.heap = 0;; U1 C: G$ n1 ]' j+ N, |# j( {
Program.argSize = 100;  /* minimum size */
4 Q* \4 e, ]# n1 `% @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" l$ U( `) g; d6 ~! o- e/ ~' }% v0 J" @
/* create a default heap */3 E1 c& K' Y- d% _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 x; d! {- I" |+ M+ L7 Q- F
var heapMemParams = new HeapMem.Params();
- x9 P2 G& Y5 g* O* jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 i8 ]! t  n# j. t4 _
7 S; {7 V* D. {' |
var Memory = xdc.useModule('xdc.runtime.Memory');) u! O- n" `0 d. `4 y# \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 E) @$ p, P* [! S6 I* q

1 n- V7 q/ b$ W3 o: h/* configure System module */
( D9 P! @. C$ D' yvar SysMin = xdc.useModule('xdc.runtime.SysMin');4 Z+ T6 O% j+ q5 H  L' @2 y. e
SysMin.bufSize = 0x1000;
1 R' i+ b2 n0 u5 h+ wSysMin.flushAtExit = false;
# T9 W( M5 {* h
8 z3 L7 e( w: U6 g! s! `  Dvar System = xdc.useModule('xdc.runtime.System');
0 C8 d& ~8 x: n1 ]! c( I  u9 ?. ?System.SupportProxy = SysMin;4 l4 E- H7 \8 B+ m7 R' V
; w, O2 R/ R; L- O
/* configure SysBios to use the lower half of Timer 1 */
) f7 ^4 E. _8 s: u2 P3 D9 hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; w; q/ }( F) E6 m0 A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 {2 r- P5 o4 F$ N9 CTimer.timerSettings[1].master = true;* w0 `1 u' P- {# ?8 i& j
Timer.defaultHalf = Timer.Half_LOWER;
* v; ?* @% P3 d0 o( S, Q2 n- B% P! `9 oClock.timerId = 1;
) C3 \2 C8 R2 V& T7 x% E3 c/ [5 [( i+ R) b: |

8 f, }* A2 e! W" E+ @/*( C0 o8 ?6 c  B* L  V% u
*  ======== Miscellaneous Configuration ========
* B2 f2 m. C) N5 @" E */
( z: o4 j% v; Z1 P2 z# E% b2 Q  B" s+ N4 q: ]5 C; s: ?
/* set default diags mask */6 [0 @" ~4 {3 [+ k
var Diags = xdc.useModule('xdc.runtime.Diags');
) [0 ^6 T' s9 c, s# ?/ \; Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 y) n0 L1 x7 K* D  r4 f  \
  I3 R* L# y% O1 hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! T, m- u% x1 z6 t+ ^" r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: _5 @# t# t8 h, gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 L0 {; f, d% W) a* U1 r* CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 ]& a" ^) Z6 \+ a( t
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 y+ |- n0 L7 N. k6 L/ E; g9 j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 |1 b" L- U8 R% o9 V$ n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  i, n* j: F8 n- P* \9 rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 L( N& g3 V( ]( QDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% c+ u3 `* t- l- X: V; q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) {( v0 E( d9 k; T& q" P) N7 T' aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ d! ], O0 n: {& w- W1 Z2 ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) F' Z8 S2 T7 u2 l6 t* MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: Z5 ~. c" T1 s3 l$ W# g; C2 G# ~) _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* X9 Z, A6 C* @# |& H& f

' J. f2 x& H, J" i: H/ A$ z/* override diags mask for selected modules */
2 I3 M# t- b. B7 q4 V0 s. B6 ^! r4 Axdc.useModule('xdc.runtime.Main');( H+ m# j4 T) z& h  K+ l6 O6 {. L
Diags.setMaskMeta(! g8 j! {' s' e
    "xdc.runtime.Main",
/ A! x' e* g6 w5 L: {9 r8 d    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ i! ~- T# B3 }/ a
    Diags.RUNTIME_ON
: o# x3 [+ e/ o0 `  O);: r$ B# n  u2 p: e5 Q# t4 ~) w
2 K, k4 H' H6 I9 b% u
var Registry = xdc.useModule('xdc.runtime.Registry');# Q3 p4 G* s2 y/ x7 F6 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 Z- ]* K+ {) l. |( @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' y6 C; D! ?' }; r1 BRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 P7 {" B* v' x/ t) {Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, z+ p0 C6 x! ~
  R+ Z  v9 |9 Q! U5 P. i
/* create a logger instance */
2 o+ q( m! ~& y. U3 Avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  V4 G- z9 T4 t8 b" D9 Fvar loggerBufP = new LoggerBuf.Params();$ G, l! U* Z8 r1 `- I! }
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, z- `7 m1 a4 L- I8 n2 P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- I! C8 `% s$ V; ^

% H( [) ?2 B8 h. n, C& G. v  nvar appLogger = LoggerBuf.create(loggerBufP);
" s% g  X1 \5 q$ SappLogger.instance.name = "AppLog_Core1";% g3 I! s! v+ O8 r3 F" ]0 L7 j
Defaults.common$.logger = appLogger;
' C, t, ~) k. wMemory.defaultHeapSize = 0x8192;   
, H$ y2 |/ _% l, m; V* vIdle.idleFxns[0] = "&LEDStatus";
6 C0 M7 N2 g4 J; L; ?+ x3 j% b( oCache.initSize.l2Size = Cache.L2Size_32K;* ?& Y9 J8 y& m

* I: o( J1 Q- b  l, }" e
回复 支持 反对

使用道具 举报

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 */; G! i+ I3 G" |& f1 u' j6 f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 i8 d' U' K4 Tvar heapMemParams = new HeapMem.Params();& w* V6 q- O$ S' @* |
heapMemParams.size = 0x4000;  y8 R1 H  D$ r+ A& J
, t2 o8 }# w0 I
var Memory = xdc.useModule('xdc.runtime.Memory');
) Y- ?) |. g+ M3 C& gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 n5 R! k  V* |* d, S) s, r8 ]& u+ o: S1 Y
我大约calloc  每次共计大小为5K*16bits,+ t( R+ |9 H8 ~" [. g, w
而默认配置才0x4000、需要改大。
2 x& H  r# B9 c7 b4 L
- y4 Z* l) n$ E. s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 u$ I: D3 C: z; [; |0 T/ T+ V4 w
Program.heap = 0;2 D6 }* F. v6 p" t. j& Z3 U- |& U
Program.argSize = 100;  /* minimum size */# s5 Q5 j! k6 m8 b$ W' z
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-22 07:43 , Processed in 0.058617 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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