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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& \# a: f4 ~* O9 {, g. _' t- j* _; Z2 x
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 `8 @5 p# U0 H1 i; V) I
( i, c" W1 H2 R" _8 z3 M; a其他程序段。。。。。+ _1 N$ r. I/ {0 ^  @
% t, v. \. T/ T9 n/ S7 n
   free(x_d);( b  k: ?& l) }1 [: `4 x1 q
; s/ b9 s: _3 _
使用DSP侧单独调试功能,验证动态申请没有问题,. O) i  N9 {/ M

* Z" D8 W% o, K' Z/ Z+ E! g( u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" ?7 J1 ?4 {8 E1 Y! D; ?
2 Y8 M- {5 o7 c9 B6 H6 V

8 R8 L& x; q7 d8 ]( J) ]0 T5 h7 p, r4 n

# l0 U" |, j( v' d
# r/ U( S( o6 }! N* b" Z# R4 M, I$ c3 `# v

; h) m2 O) U7 Q* L1 j# f/ Q  ]( w) O: A2 l( o
2 P- f9 G* M- `
( ^& U- c3 X- b8 Z( [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ P# U* R- J' v5 C, l: q
Program.heap = 0;
3 a9 w) Y% O# m5 z! I# h4 Q! |2 T" o& OProgram.argSize = 100;  /* minimum size */
( b( Q+ ?* @& i. F8 BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
$ w0 R+ m0 P8 K" n, _) M; Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 X8 B! S7 a/ `1 v
var heapMemParams = new HeapMem.Params();4 Q9 ?4 h* v- a, W9 o& K
heapMemParams.size = 0x4000;
5 D( G: R: X- P# P  ~+ R, n0 p8 S# c, W# ~& y. F
var Memory = xdc.useModule('xdc.runtime.Memory');
1 k/ }* ]- @5 }6 ^% g0 ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 q9 d2 M/ h+ z. z0 A* i3 y

! E3 B! g/ |5 w. H0 E1 |- M我大约calloc  每次共计大小为5K*16bits,% V% h" n* h/ u+ v: H. w
而默认配置才0x4000、需要改大。
5 l3 h2 j6 n( G0 A4 E5 }( b; j' a8 v8 |% }3 H4 z1 N' `8 I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 W) W9 ]8 ]( d; Q% B  Q1 O$ }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  v2 C5 S* _$ i( K; s7 x8 [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 h" V& o, F; q6 a2 Y- s

" b4 x6 c% [5 I8 L是不是需要在DSP.CFG中进行配置
, w5 @  Z# _( x/ b- r6 t我现在的配置为
+ v2 {* l/ F' P7 ~8 g
) g! X1 g% f+ V1 q% I/*# S  P" d- C4 \6 \. H! m) e
*  ======== Operating System Configuration ========. N' i! Y/ Z9 L9 ?, ?; {% J9 l
*/
* l& q& K# M! g  j' }: m% Q) @
9 Q9 D" _3 p0 m7 c+ B/* no rts heap */
9 T( q' a/ g5 x9 h: hProgram.heap = 0;) Z: d& t  I; _3 N' N
Program.argSize = 100;  /* minimum size */6 w1 j8 G9 b5 b! [) r( Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# V0 Y) Z- r# w- Y7 Z6 Z9 l0 c0 k+ ~" \' p: {7 l0 V
/* create a default heap */7 P/ }- [# A* ~. h% \: ^5 M( T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 x/ {+ f1 K+ n1 Q# {* |
var heapMemParams = new HeapMem.Params();7 D: O" A" j- g' h% R% m! a
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, l  S2 J; E$ m9 Z! q7 U
6 O0 t' \% v- S$ B
var Memory = xdc.useModule('xdc.runtime.Memory');* u. V$ m" q- X* C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 J/ d8 N5 U5 |5 b5 X" x
) ^5 B2 k: \( R
/* configure System module */
/ h4 N# F, a! Y0 evar SysMin = xdc.useModule('xdc.runtime.SysMin');
, W, L0 X' g6 _9 j* @% |SysMin.bufSize = 0x1000;6 l) Z( ]8 I6 @
SysMin.flushAtExit = false;* W  d, |( J$ R1 z

. a; ?7 N! q. ^' X& L% R; L6 evar System = xdc.useModule('xdc.runtime.System');
3 L3 v7 Q9 Q  R0 k# A; {, g- |; JSystem.SupportProxy = SysMin;
1 {: o3 I+ ~& E1 v, K7 U4 N- ~
; s8 A0 p4 a  d. z: t9 R, ^2 g/* configure SysBios to use the lower half of Timer 1 */
" {# H7 o2 v- c' F: ~$ S- ?' cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 R) d) ]( F" L; i4 T) o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* m! _& u. r, e- t$ N" Q# S
Timer.timerSettings[1].master = true;
( U1 Z" C& N9 a3 _Timer.defaultHalf = Timer.Half_LOWER;1 b. K" [% y) y& J
Clock.timerId = 1;
% a* _: L: z$ g/ X/ k8 Q
0 S8 P8 N% o4 O* j: x& ^. \4 [* c
9 x5 |6 p. G3 d# ?$ Y+ g# k: e/*9 l4 e. T; F. U8 E
*  ======== Miscellaneous Configuration ========
1 ~$ K7 q. K4 f4 D' a- x */7 x3 c- f, j. K4 O7 o- s0 `
9 T' g$ V. J2 O7 Q# q/ A
/* set default diags mask */- G; A* a  }8 e: D
var Diags = xdc.useModule('xdc.runtime.Diags');& m/ G, x1 c5 w$ h* r+ L
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, g9 G+ H5 w( ]4 Y8 ?; e  t2 n- F. P! s- d0 W* i6 k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 F6 ^6 e6 c+ ~0 SDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% z1 V8 d  B9 f, b' e' W4 g
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- Y3 I- B7 K; N: R* o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 f9 \+ Z) W( g! u0 }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% G' Q  \5 W0 v% }5 h3 dDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ x6 P# R: V1 h6 g2 h% r# _+ Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 E# U4 ?2 z4 W) Q) f& s7 d  ~0 lDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) n$ \$ X9 g6 s. G" k/ H+ C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 o+ y1 e5 e3 x. H* Q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- A- p& R  C: L; J" `0 m! ^# k9 ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. A. X- D1 V1 e6 D6 M. e( L) h6 m% d3 gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 v0 i+ J5 f, v  e9 y  S0 e/ _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" J' Z$ g0 A$ g% V7 K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: B4 f7 I5 K. R; s! {( y% P' C" D

1 k4 v4 }' d  w( o4 l, t/* override diags mask for selected modules */+ p$ _$ P! Q& M
xdc.useModule('xdc.runtime.Main');* V( k, y: \6 g" O5 F
Diags.setMaskMeta(
5 N. d' h& X3 \/ ^# F% k8 j4 b    "xdc.runtime.Main",
8 N' ?% v' n/ v0 V* Z    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! W; U5 Y# }6 u: a5 {4 O" L5 `, a    Diags.RUNTIME_ON: n' U3 H4 a3 n7 X! U' Z. [2 X
);9 B, W- z1 {) Y/ ^$ A, ?
# z# ?5 r" V+ [0 f# e" G
var Registry = xdc.useModule('xdc.runtime.Registry');
) f" ~. A" s* s' n& d! ?* s( S4 `- wRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 I: ]: _  i8 |; sRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: u* k4 f$ @6 jRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" w8 ?8 s2 o0 F7 |$ S6 e9 ~) ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  a* P* v, t) |, `/ X2 y6 P
+ m" X2 o* C6 G- ~, x/ o2 i: }
/* create a logger instance */" b" m$ Z, r; t) G' }/ Z& }
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 b) @& c" y3 n" b% k! gvar loggerBufP = new LoggerBuf.Params();
2 w: {" k0 |, o( `" KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 @& Y" z, a" Z5 A* `
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" d$ w4 h2 i  C' j3 F
: f' a( `6 b* ~8 g0 Xvar appLogger = LoggerBuf.create(loggerBufP);5 P* K% L- ~! Y1 W8 h/ j0 ~
appLogger.instance.name = "AppLog_Core1";3 J# @; S/ G- H3 f+ i, @1 h. S0 R: p
Defaults.common$.logger = appLogger;
8 `: T" m' e; |- ~Memory.defaultHeapSize = 0x8192;   
1 n2 U9 X* E  f' QIdle.idleFxns[0] = "&LEDStatus";
5 q6 E4 z  L+ N* k& BCache.initSize.l2Size = Cache.L2Size_32K;
* c5 i: t+ U7 P% l9 _
7 D7 Q2 ^! f1 `& k3 K' H. E
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 02:17 , Processed in 0.051758 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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