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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ Z2 M; }+ d  [
- p  _  X* O# W0 p1 S* U. Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: ~5 f( H) y( w2 \

: `$ n0 I- |3 j其他程序段。。。。。8 n& e- B/ Z3 o& J* V; F* @
/ |  N, \( B% G) `% w: V
   free(x_d);
( I- A1 d3 x' W4 M* q1 M1 ]( ?( ~& A- a: W) {) l4 I3 o! K
使用DSP侧单独调试功能,验证动态申请没有问题,
- h" G' \1 v7 f+ `4 p  C2 K) g" F, X7 ]  @4 L7 w: p- c* C/ u
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 {' o3 d& G4 G$ z8 Y

1 z3 c. Y; E# s$ Y& T
4 w1 W/ H1 Z2 T/ f# f8 h1 D" b4 [4 R; ?
0 G5 \6 m% v$ R

/ Z1 b$ L( @! t4 x7 y( Q
2 }+ j* V$ I0 `5 c% E0 T4 ^% e% O* G& q9 q2 t4 j# _+ B0 \8 n
6 f6 `, `7 w, G4 X  u" l
  @) X( v* r, |: g

7 k& R% g* n, X' d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 E4 g$ L; I" j; U2 V( ?& W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 X3 d  @0 Q/ I9 ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 \* M* @3 p9 a
" _4 L1 ^, j5 S
是不是需要在DSP.CFG中进行配置
4 X1 [7 [8 h* x6 n+ l% ^/ V! U) X8 A- @我现在的配置为
* j$ _+ x  y$ }5 U- d% |3 M5 j8 j, ~
/*$ I( I: W' {1 D& U3 \) \
*  ======== Operating System Configuration ========
' H9 r5 F$ {. W- k */
+ p( P# J5 F. ^& F
/ i5 ?& n/ k1 |$ _& W, }- S: I/* no rts heap */' v! B# u& ]/ o/ Y
Program.heap = 0;
3 R  ~' S* G* cProgram.argSize = 100;  /* minimum size */
$ f- o' N: x% t1 N/ R8 F7 ]* u9 g% W3 Z) O3 CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# [7 C1 P: z, r, z# _8 w4 M! s
4 K7 e+ ?5 o( [4 _; R: S6 q
/* create a default heap */) H! H1 i2 P# E4 m4 @" u" ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 K/ Z9 A3 Q3 w' j& S- }
var heapMemParams = new HeapMem.Params();
9 n4 _  M+ [0 y' ~5 R, q1 F8 jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 s! v5 R6 F  |$ Y5 j( r4 H2 W+ g
! U' X2 X# c' o7 `: `
var Memory = xdc.useModule('xdc.runtime.Memory');9 T1 S' N& h+ d$ W+ T6 m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) C) u# b8 o; D. Y2 e3 a
2 Q( n( e4 b! p! @: o/* configure System module */
6 l+ h+ B. s1 J/ z5 q6 V" Lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
  h7 s* ~+ M7 _/ P* n0 G# xSysMin.bufSize = 0x1000;) _" x# H- b1 X9 B, B8 I: D: W
SysMin.flushAtExit = false;
9 L, G' h1 t$ O/ n. ?/ e4 c/ s- A2 u" d0 m7 p+ r
var System = xdc.useModule('xdc.runtime.System');
% ^. Y) X& c8 F( P6 sSystem.SupportProxy = SysMin;' p, s# [3 f2 K
, u9 g. G# e0 P( x- H7 L, ]
/* configure SysBios to use the lower half of Timer 1 */
" b6 w7 i% [$ Y, k. ?% Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 B7 B; E/ t: ?( b6 A3 A: xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ r; f' {) v: `# v. F% F& ETimer.timerSettings[1].master = true;
6 i1 h& x8 d5 i( BTimer.defaultHalf = Timer.Half_LOWER;
* G" w! ~( H# RClock.timerId = 1;
4 M# Y6 B, ^" V% I& `/ f1 t$ @" C$ {( F: S4 j  B9 x

3 Q) g+ o  O& N! s( ~& g/*
3 H/ U- a% L! x5 _1 u8 V *  ======== Miscellaneous Configuration ========
! ?  @: `2 b2 e! H */
- a2 d. l6 g" D& {$ U; t- T5 l2 }+ B+ d! h$ k$ c
/* set default diags mask */% H3 Z; L, F, ^2 n4 k
var Diags = xdc.useModule('xdc.runtime.Diags');% l- E; s6 j1 I+ N* A( k# q9 y8 B
var Defaults = xdc.useModule('xdc.runtime.Defaults');! @6 P7 g0 G6 \" E# z6 ~; v
( F( b8 L5 [  Q; ^8 L  A3 b" t( U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 l" ~' F' O. V# R7 x8 I8 j( P, h' C/ QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ U8 Q1 x$ w, X8 w. u2 x0 ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 Y+ M* b( l9 c9 i7 gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& g# T  }9 U$ @/ _/ m& Y1 |/ UDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! ]- ^8 ]. g+ E- e  aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: L+ Q: k' f- g0 ~4 h5 e' k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% |- o- R0 h$ N. UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 I$ T! Q$ D0 L" y- W  e1 V/ [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: n9 G# l  q; v9 }3 `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( I3 U5 Q+ o  x1 }. L, g% L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 d& Q3 R# X# V6 i8 ?" F% [, ]Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( ^3 ~/ }, ~, ^8 VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& n( @6 k# ^; J/ _; z* \' p1 EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 s' b3 M* I1 p- B! r$ {

+ j  ~  S& w$ `/* override diags mask for selected modules */! e8 p! d  j0 o
xdc.useModule('xdc.runtime.Main');
+ V/ l& K' B9 p5 @Diags.setMaskMeta(. j& e1 \" t1 b. n( V9 A
    "xdc.runtime.Main",
" y# o; T4 E: |" h    Diags.ENTRY | Diags.EXIT | Diags.INFO,) @. J. B* `* N5 @( P6 G
    Diags.RUNTIME_ON; ^9 u) v$ I; x
);
( }! Q* T2 D- q6 i& [' H; \* g2 e8 p9 f8 }1 @* d$ e( w' G5 F
var Registry = xdc.useModule('xdc.runtime.Registry');
, Z7 _( C2 |% I6 U6 }8 hRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 l! V( g" `2 A6 P& PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# h% ^$ q* a/ K& R1 H6 f
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 ^1 K4 I& w: g% }( hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. v7 ~- q! p0 y) k  U
( ]3 _# {8 L1 \  \# o0 |6 B/* create a logger instance */
$ F* u- {+ j1 w/ Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# G7 V; Z  i* d) |9 {0 ?) Z/ a9 i
var loggerBufP = new LoggerBuf.Params();; F9 O1 ^) q& ?* I( f
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: M' C/ ^9 _+ J( ~4 z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 `( n6 Q. W0 ]9 t: j" Z5 I0 ]) X) N- Q2 P: S& l
var appLogger = LoggerBuf.create(loggerBufP);& G- R; \2 U6 _4 A9 v9 @$ k
appLogger.instance.name = "AppLog_Core1";) r# l  c, j2 v* R( m( m; E
Defaults.common$.logger = appLogger;+ O6 [! C, @+ u& j
Memory.defaultHeapSize = 0x8192;   
" J$ `- K: A' ^$ w5 `8 |; ^& cIdle.idleFxns[0] = "&LEDStatus";4 y( [' ~& d( ~# o1 H( C8 O3 R- o4 B; S
Cache.initSize.l2Size = Cache.L2Size_32K;3 c0 V% P' g" C0 |% l5 h

; b5 X$ f4 V" ?1 O, j+ g
回复 支持 反对

使用道具 举报

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 */2 z4 y' x. I  i4 `* ]% W* ]; N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 `+ e1 T1 U1 q; ~8 m: H# }7 Ovar heapMemParams = new HeapMem.Params();
  Y7 Y  m: a0 n, KheapMemParams.size = 0x4000;2 w- M4 O6 {- Y* ?7 d
( d0 M8 b0 f$ f3 h. F' i9 g. _
var Memory = xdc.useModule('xdc.runtime.Memory');
$ S  e3 D% T& _# }2 `- u5 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  u; f' o0 d9 G2 l

' l1 \) y4 J% E7 j6 U$ _+ J我大约calloc  每次共计大小为5K*16bits,
" {7 R" k- e1 O7 x% O! d& S而默认配置才0x4000、需要改大。
$ E- l, ~" r  x5 g) J$ g0 D0 t
7 B! y+ p* U/ p9 T0 ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) q% [" ]9 |) Z) F" U4 z
Program.heap = 0;, x$ C4 C! q, r* c% j. e! @
Program.argSize = 100;  /* minimum size */3 F$ H2 h; F- ]7 C$ R5 T4 v, d2 \% t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-5 14:08 , Processed in 0.047983 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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