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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 ^2 Q( c" a; w" t* E* e7 O
* F' q& Q# i! |5 S, r* [4 i" g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, F6 w+ D& U. O; P% l8 v6 u# c) k4 V  L

  g6 a  R2 J% v3 v( }1 i其他程序段。。。。。1 p4 Y" x$ s7 {- _+ T
0 h0 V1 l3 Y& G7 A" g+ ?
   free(x_d);, N% j2 T% ?* l) f1 b
! w1 c9 j/ k- {: V
使用DSP侧单独调试功能,验证动态申请没有问题,
& u) y/ Q1 [' T: k" Q2 @. F8 d( t* p/ D% `% P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; c2 X% `) j- R+ g6 P) m/ }
' \, F8 d$ z% H, M
$ |8 y* G* c0 x1 x; O5 M6 Q# i

5 I2 [* V  b; [; M0 t
1 O% L4 p1 z3 T
8 H8 v9 g' X7 G( n, A: T5 `- L: R: b
. |. P; w3 p& H4 d% g; z
6 t5 G- r4 [: I3 Z; Q
& s& K5 X: c. C, v  r4 d+ D% `! P' P& T& ]5 O/ s
6 j6 W% S! q$ Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 P/ s0 I, k; `6 x# `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 n, k/ ?* e" T) U0 L) C: |
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: e3 J1 l& k* s

$ \% c3 v6 Q* s9 L4 R; }是不是需要在DSP.CFG中进行配置9 i, w% v* L" }3 O/ e
我现在的配置为$ r; m! d! `8 K+ d

( m7 |) g! J5 G1 ?5 u: G/*
+ B7 p- a* ^/ `, {9 T2 V1 }# r9 g *  ======== Operating System Configuration ========- j8 y( [* O/ N( W+ e" T% P' _
*// ^, N7 o, q6 c5 d3 }5 [  I
8 {4 Q0 d6 k" @# V6 R
/* no rts heap */
7 G0 m& J  F! k1 e6 aProgram.heap = 0;% D( n; t/ ]4 v( Q9 n7 k
Program.argSize = 100;  /* minimum size */
- [3 C; `, X& hProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ P$ Y9 N3 W( c& a+ L- `
. P' [* w$ f( m3 A! Z/* create a default heap */
7 W2 x5 f& V* [5 c( Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 Y+ N* j( h: b- @7 \var heapMemParams = new HeapMem.Params();
0 `' k+ c; t2 r8 qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 {' L) X* F) G5 A, C: v$ C) _& c) \/ q* V* c1 j0 S% H+ q: x
var Memory = xdc.useModule('xdc.runtime.Memory');
- `( C) C* d# C* w+ e/ ^! y$ uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* I4 E. ^: B5 S( H( f8 k% Q

- ^8 S7 C. `; E; k6 D2 N/* configure System module */
. m/ ]$ O, a$ N- vvar SysMin = xdc.useModule('xdc.runtime.SysMin');: S9 r- H6 i6 R4 ~: \
SysMin.bufSize = 0x1000;- g9 o" @& N# k) _) J
SysMin.flushAtExit = false;
( H; ?& M! [- F" w+ W
8 z6 C$ S2 r. Ovar System = xdc.useModule('xdc.runtime.System');
" g: ]8 }( J" z" S2 x2 r6 ^+ I# d/ HSystem.SupportProxy = SysMin;
5 `; N% J! V+ P6 f3 p! _8 F
' m( }6 }* p+ C! w8 p# Z3 d/* configure SysBios to use the lower half of Timer 1 */
9 j5 b; m0 p- h- I* bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 A0 [; ~3 w, g% a9 ]) k& ]. pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 P2 a: i7 u: [. Y2 _0 o/ h6 _: j
Timer.timerSettings[1].master = true;
9 H  B3 S7 o! o! l" pTimer.defaultHalf = Timer.Half_LOWER;
) b+ o+ Q3 Y- ?  @8 G6 b" J- ~Clock.timerId = 1;
1 O4 P0 N# {0 u2 ?0 e9 v+ W! x  t6 c" \0 u9 x- N8 B( r8 z

. {: Y8 I8 }0 `. d1 e1 F4 }+ f/*
, q- F- Y& y- O5 W *  ======== Miscellaneous Configuration ========
4 O! l0 |2 n* ?# @( z */
4 z6 G# }; E9 s% H  B2 Z. p8 a
+ p3 Y' B* Q! a/* set default diags mask */8 L- O. P) B! Q6 U8 r8 s1 @3 f
var Diags = xdc.useModule('xdc.runtime.Diags');
) i, G: g- v8 C# Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');
* F& j( _( _' I5 {- _- Z/ ?5 \1 \6 ]# s( t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: ?( o2 w# F1 A) o3 v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, q6 u! Y) s1 R; N  h, `! C
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;( t, |- E6 X$ d! n- _1 V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( j! y" G$ L/ \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* [$ N! y7 e6 ^: Q: q' a0 h2 \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 p; A! B0 }4 b# V8 U6 _Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ k0 m" }4 T5 O/ fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% k8 L3 I3 E+ ?7 V6 _( V, \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  e: U$ X  U- w6 j4 ~! U/ p. uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  D! \/ x: f" ]  C& a/ rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' Y& f8 D, S- \( m" e- r: ]4 A% j. I+ Y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ q7 e/ F- c" jDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- s) n6 h9 p* G; t7 ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& _: i1 A6 v: G- R4 q  z9 g& ?  u
9 U! s$ J; ~, M( K0 }/ D" q. x/* override diags mask for selected modules */4 U" r; S; t" D& }1 c- T0 I# `
xdc.useModule('xdc.runtime.Main');- R) _1 v/ w) v+ N4 W4 A
Diags.setMaskMeta(, R1 ^+ B# [7 I* j
    "xdc.runtime.Main",
6 l8 x! V% c+ I' f    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ l$ t- i  B: B7 X5 V+ t# [
    Diags.RUNTIME_ON
* S5 Y" y3 j" Y5 s* P0 k7 s+ f);+ G+ l, w) k/ |

3 F) e  o/ ]1 d% V" m2 K# L6 Xvar Registry = xdc.useModule('xdc.runtime.Registry');" ~9 u$ |% h5 K; R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* |+ g8 u7 C7 d* g2 B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# I+ y% Z2 e, V9 |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; i* e6 S3 X+ Y; g; P; n3 l- j, n5 cRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 T5 B: _) h& M7 G9 H' Z% N# J$ {* h" H. ^
/* create a logger instance */
4 r1 _5 Y) E1 D* ~8 Fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, s' G( @4 ]) V- c, S2 C
var loggerBufP = new LoggerBuf.Params();& J; V- _+ {9 C/ I+ J. l% E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 e% }" f8 t& VloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ h+ [/ h* r  E3 q1 A) g" `/ U" F- j
var appLogger = LoggerBuf.create(loggerBufP);
5 v2 s0 m1 ?" X) [appLogger.instance.name = "AppLog_Core1";
% c5 Q$ N, K0 e4 I3 dDefaults.common$.logger = appLogger;
, S7 k# ~2 A% g+ DMemory.defaultHeapSize = 0x8192;   
- C% ?- Z5 E1 h( l$ b* M8 H5 QIdle.idleFxns[0] = "&LEDStatus";. T0 X2 R9 j0 t, f" \
Cache.initSize.l2Size = Cache.L2Size_32K;* f& o  w: k/ Z) M1 n; A7 P) B/ C/ y
7 ?7 b7 \8 e. D' ~- p
回复 支持 反对

使用道具 举报

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 */, N% o; D) U- J' m* q) P4 e& O3 j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ c; C) y8 G# f! _var heapMemParams = new HeapMem.Params();* C& P# j. M4 L) ]
heapMemParams.size = 0x4000;$ O+ z$ K# |9 c: B! n" E
. M2 U) Y' g0 _$ W. w
var Memory = xdc.useModule('xdc.runtime.Memory');
. p* F2 K; C  \" d3 v9 CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; a* d6 S& p1 d; e" H6 ~, N( ?6 _( ^& Z6 j4 X
我大约calloc  每次共计大小为5K*16bits,# Q; p$ u8 Q! V4 }  k2 h
而默认配置才0x4000、需要改大。
* U8 X! ]2 ~! K+ n$ z* H3 F0 p1 L  H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 ]: Z; d0 J: ^+ K( a5 J
Program.heap = 0;
1 a! v1 Z, G# F0 xProgram.argSize = 100;  /* minimum size */" [6 j8 G  L2 H
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-27 14:22 , Processed in 0.053782 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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