嵌入式开发者社区
标题:
关于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 V
Program.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) W
SysMin.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 g
System.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$ l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 h: C/ r0 _, s$ {( i1 L
Timer.timerSettings[1].master = true;
/ W t! b+ L' g- H- f1 j9 Z
Timer.defaultHalf = Timer.Half_LOWER;
% S, v% v: J$ r+ F) F4 t+ `1 \
Clock.timerId = 1;
8 r/ Y* W+ b+ S2 D
2 @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 w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 S! q& N# T" s, A& d
~0 t+ S4 I& l
Defaults.common$.diags_ENTRY = Diags.ALWAYS_OFF;
* @: P$ S/ h0 M( w6 D* ?! [( q
Defaults.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, W
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF; /* development only */
7 b& q" s0 |8 ` O
Defaults.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: f
Defaults.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& k
xdc.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$ g
Registry.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 t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. H) P0 {. _8 w9 o
var loggerBufP = new LoggerBuf.Params();
( ]/ n0 `: l" p4 t
loggerBufP.numEntries = 128; /* 128 entries = 4 KB of memory */
4 z% Q2 X" V3 ^( y
loggerBufP.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. H
Defaults.common$.logger = appLogger;
# _% R8 P; O: @" i4 a& D2 u
Memory.defaultHeapSize = 0x8192;
9 W, w$ s$ j! s" O2 y
Idle.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- t
heapMemParams.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" c
Program.heap = 0;
! N& t4 V+ n' ^4 R- u: R/ b. x
Program.argSize = 100; /* minimum size */
& w# M( E2 A) W2 T: X
Program.stack = 0xF000; //我改到F000 也不行
作者:
teddy
时间:
2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4