嵌入式开发者社区

标题: 关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 [打印本页]

作者: tulipyyf    时间: 2015-9-4 08:33
标题: 关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, j2 _7 _) h8 |5 K# ~+ r
: u% l2 ?7 R$ a( A3 R- |    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ }3 @% d  G  Y6 x& u) F; e" y/ K: h
其他程序段。。。。。
4 v5 u6 P+ t" ]" _ ) k1 N" P* r& G0 l6 l
   free(x_d);$ U0 O  l; S( I. z

8 a# Z- ?9 E% y使用DSP侧单独调试功能,验证动态申请没有问题,4 b! T6 m, A% W; D+ D! `' i

( D( ^5 `' L3 B6 ^$ [6 w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 y, n& h: b4 W0 a

. J3 `1 C5 G- r! M9 Z, L( \- `, I  B

+ [' `/ [  F9 V2 u8 i, }' z1 M* p# I. O6 W% c. N9 e) R3 W+ j, J$ @
; _) r' }* u9 I/ v+ `
" x0 v+ m# v' ?7 [$ H- E
" Q% X, n$ Q' R) R4 d- w! ~5 n
6 D# ~, p7 L8 U2 X! {- g7 F
# i2 A; G( a+ n: h( l/ y
, p5 ~1 T6 P$ N. z7 Y

作者: tulipyyf    时间: 2015-9-4 10:29
补充说明
' W# U* E% v( I我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( B, C( R* B+ A. n: l(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) r: d; X1 R5 F0 p
0 i- R6 j% N/ h
是不是需要在DSP.CFG中进行配置4 H. Q, |2 R" p( d4 }
我现在的配置为
5 }6 a% p! P6 a. m: }( r: E1 X& ^  x% A2 j" Y
/*  M: J, E$ F. _% N7 ~- o# `6 Y! T0 X
*  ======== Operating System Configuration ========
1 u2 A- p6 I2 \% k */
  {/ O8 X. d' U4 t2 b6 m
" y' ]/ \2 r  B, G" D7 \/* no rts heap */
9 l9 c/ Y/ x' q  VProgram.heap = 0;
8 }+ M# }' N" g2 L4 }5 ]Program.argSize = 100;  /* minimum size */
- x. N2 x1 M7 C" o7 R/ r% _Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 k5 G) U; Z0 J5 q

, s( R8 e9 |$ `4 s; k/* create a default heap */0 s+ D6 z- r' ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& n  O9 W, g7 u# Y" I/ f
var heapMemParams = new HeapMem.Params();
0 S/ W: ]$ `% b% a- e4 L2 {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 l! g1 s$ Y  O1 `; @1 [% J
+ T: ?* i" Y: V. |# C6 f% R5 M
var Memory = xdc.useModule('xdc.runtime.Memory');" ~3 B8 O! N; d5 @& Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# [- k$ q+ V% u& T2 q" M
5 r: H3 M2 q1 j! [9 J9 B$ L  `" T  b/* configure System module */
& {$ n& H' E, O2 ]var SysMin = xdc.useModule('xdc.runtime.SysMin');
: o5 @8 G' Y1 b3 P5 e, Z2 Y) WSysMin.bufSize = 0x1000;+ s. ?7 p) z% K
SysMin.flushAtExit = false;
4 v7 A( H( _% `. h5 c% \
+ j! ]: @, Y/ F& o1 `var System = xdc.useModule('xdc.runtime.System');
7 w! k  N! N- |3 l; ]4 gSystem.SupportProxy = SysMin;
4 T9 d* E% M9 ^% O3 {6 @0 W. F+ F2 n2 z0 w
/* configure SysBios to use the lower half of Timer 1 */% P. d+ J( r& A+ |" [2 z, W$ ]& s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 k/ f" V. B6 X, K  l$ lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 h: C/ r0 _, s$ {( i1 LTimer.timerSettings[1].master = true;
/ W  t! b+ L' g- H- f1 j9 ZTimer.defaultHalf = Timer.Half_LOWER;
% S, v% v: J$ r+ F) F4 t+ `1 \Clock.timerId = 1;
8 r/ Y* W+ b+ S2 D2 @8 z& j' p5 U/ k

( V+ z+ p& C6 X" m3 r  J' p, c/*
/ R' g1 S% @5 |% e7 l *  ======== Miscellaneous Configuration ========: P: a( ^% h. D" {& |/ `
*/0 L3 }) e' b3 Y& O. y# k
# _% ?+ A. `8 n3 A7 f
/* set default diags mask */! Q; t4 c! h, T# E
var Diags = xdc.useModule('xdc.runtime.Diags');
, V; V/ x( Y8 b1 wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 S! q& N# T" s, A& d
  ~0 t+ S4 I& lDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* @: P$ S/ h0 M( w6 D* ?! [( qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( F& ^5 g' N( A$ v% a' A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ Y- u7 A& v) K. K4 _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- w, U2 j% n  m  y  B/ e, WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 b& q" s0 |8 `  ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 E! t) b0 T" g3 J) T$ G6 ?Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 y) F: X/ k$ l& Y) o: fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ L5 d" |8 d! h( `5 ?, f. `
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& l( j" V! K1 M" y  c: {7 ?6 A* R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) M4 x* I5 q. s! C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 W" \4 K4 N  x
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ L" A% h$ M( ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 O* `+ R! {1 M+ o1 u* ~+ f
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! Y* _( v6 ?9 _" t- C; |
! |4 J* F. k; P6 |* O
/* override diags mask for selected modules */
1 p. l3 @- }  [$ t* t& kxdc.useModule('xdc.runtime.Main');+ L  T$ a% b/ F- Y4 }
Diags.setMaskMeta(
' C) i/ w, m* l0 o/ @* w    "xdc.runtime.Main",
  c9 M1 T9 Z" z( g    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 s' X" v  J: v2 K+ O# a
    Diags.RUNTIME_ON
% ^' Y% g8 W* m5 U/ h9 O);
5 q: Y1 d! P$ L" B9 L0 j9 y* v, Q% E4 p: q1 j' u
var Registry = xdc.useModule('xdc.runtime.Registry');/ ]4 Y: f' f, S2 ?- g- C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  A$ E8 d* y5 t: T: h7 R9 x4 S
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 q4 V; n1 {( J* M+ F: n$ gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" a2 {% m+ k$ D4 F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, G! F$ ^' q" n3 P" r
6 I1 x: _! n( k/ Z0 J% U" p6 {5 U
/* create a logger instance */
. S& p% ^2 p" S  }( \5 Y5 tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. H) P0 {. _8 w9 ovar loggerBufP = new LoggerBuf.Params();( ]/ n0 `: l" p4 t
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 z% Q2 X" V3 ^( yloggerBufP.bufType = LoggerBuf.BufType_FIXED;2 \& h# m7 x) S" ^
/ I, Z5 m4 g: A2 I/ q
var appLogger = LoggerBuf.create(loggerBufP);( L, u) P5 k% D6 ?. s
appLogger.instance.name = "AppLog_Core1";
& X' S# u, g4 {8 }! r) ~9 v. HDefaults.common$.logger = appLogger;# _% R8 P; O: @" i4 a& D2 u
Memory.defaultHeapSize = 0x8192;   
9 W, w$ s$ j! s" O2 yIdle.idleFxns[0] = "&LEDStatus";8 h2 f/ f3 p; [: G- U
Cache.initSize.l2Size = Cache.L2Size_32K;$ V. O! X/ ~  i
# h1 y7 f  r& f8 I$ Z7 m& @; E- b

作者: tulipyyf    时间: 2015-9-7 15:38
为什么没人回答呢?   大家都不用动态申请内存方式吗?
作者: teddy    时间: 2015-10-28 09:51
/* create a default heap *// F* S5 u" U% r( J% r5 |2 @0 _/ V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! l; h1 s5 {8 ?3 m& c6 U
var heapMemParams = new HeapMem.Params();
9 {0 a; |' v6 Z& X! a/ S- theapMemParams.size = 0x4000;! p; Q  }- M" a. _0 w7 L
0 @) Z. q! D" ~; M
var Memory = xdc.useModule('xdc.runtime.Memory');4 V8 M) J9 B6 w0 d( g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' |! y! v5 r1 P  {4 T7 }0 d# S' n3 A7 w! l0 C8 U4 T% n
我大约calloc  每次共计大小为5K*16bits,
; l( Y/ c) C4 L  s2 Z$ |而默认配置才0x4000、需要改大。. G* q: ?6 A3 U8 ]& f; K. Y
7 L8 u  U% v, s, U. g# q: M% O0 Z' V& _

作者: tulipyyf    时间: 2015-10-28 16:14
/* no rts heap */
( M& B7 U' j3 I3 u) M1 f! e" cProgram.heap = 0;! N& t4 V+ n' ^4 R- u: R/ b. x
Program.argSize = 100;  /* minimum size */
& w# M( E2 A) W2 T: XProgram.stack = 0xF000;                   //我改到F000  也不行
作者: teddy    时间: 2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4