嵌入式开发者社区
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
[打印本页]
作者:
tulipyyf
时间:
2015-9-4 08:33
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 ^1 v) b' i' x! _7 U- l
) ?" Z9 M* x1 B% l: A
float *x_d=(float *)calloc(len_in,sizeof(float)); //256
8 k2 q' D* L, [1 p6 u
& j$ T% l# K$ ^
其他程序段。。。。。
% C! @, d: n2 s6 Z/ E
1 R. t8 F) |) S F2 J
free(x_d);
. P/ z6 `: C2 T) V# Z
3 r% O- g; S! g- b# H' X
使用DSP侧单独调试功能,验证动态申请没有问题,
; S3 z& f1 `$ R; C& C- {4 N, l
5 L' U8 e, ^. ~# q6 J- b
但是,
当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败
,没有成功。请问是不是需要在哪里设置。
: \6 M6 N+ }5 ^7 }* b- Y
& X+ D/ G2 ~9 n( t
4 h) K- }7 P$ Q' R
) I+ m6 a1 h$ c# L" P/ Y3 X
5 W2 f' F# t5 @+ e; Y7 W
) M! R& i6 M/ V/ `2 ]6 N- _" F! [
9 }9 l* @. X. @! C. k
! @4 A& K+ W6 x9 ~5 h' ]$ t1 H
- B" ^5 ]& [( V" F5 Y3 K+ b
$ o) y% A. O% g4 _8 ]% g1 A8 D
8 M! `) y1 v2 l1 @6 P
作者:
tulipyyf
时间:
2015-9-4 10:29
补充说明
2 X6 M3 y P3 ?( ^3 |% G
我大约calloc 每次共计大小为5K*16bits,怀疑哪里需要配置一下
* D) j" Y6 y8 F' b: I; s: o! r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 |; L5 b* r. V0 E m$ k: l( F: @# J! e
$ U5 J* b1 E- d5 p8 f
是不是需要在DSP.CFG中进行配置
$ t' U: e% `$ o8 | ]" `. ` Q
我现在的配置为
0 m9 S& I( g9 `! X/ ]# i: v
4 T6 [# j0 ?* B# f p3 R/ x: L
/*
7 l/ ~' w3 f5 O$ T
* ======== Operating System Configuration ========
9 @+ m5 z, s s1 A+ W8 s# n7 L6 ~
*/
/ B( `* y: Q8 S$ ]
1 }* S& q/ Z( i) [' B0 n; h) X
/* no rts heap */
. h- ^# D2 W* `+ k0 a
Program.heap = 0;
: v' C4 T; _7 t1 U2 ^
Program.argSize = 100; /* minimum size */
$ }* Q8 b- f9 d* V0 V: i8 u4 }
Program.stack = 0xF000;
//此处修改后的值。不太懂,所以改大
% p# l/ f& S3 L h
0 k. w0 i! [2 }9 O
/* create a default heap */
; E- g- m! X4 y5 J. e. q. K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ c" z8 f3 G% U* b; m4 t
var heapMemParams = new HeapMem.Params();
+ y6 }4 n; S7 ^- }! A
heapMemParams.size = 0xFf00;
//此处修改后的值
。不太懂,所以改大
, q5 E& x' T+ j" X+ C
8 b& E* c6 O" q7 k# @7 z
var Memory = xdc.useModule('xdc.runtime.Memory');
; C- Z N6 W$ l" }3 Z! F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 D) X Q, A4 V. Y' e
5 n" u2 |" S5 Y( F8 G/ J
/* configure System module */
' b/ f1 j7 V+ ]. q7 P0 r# R
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) @5 j: k& |* R2 U% S j( i5 }
SysMin.bufSize = 0x1000;
0 k6 c4 y+ v! a& V" A
SysMin.flushAtExit = false;
) D! |: }7 b A! v( Q3 ]
8 Z0 z r' |9 A
var System = xdc.useModule('xdc.runtime.System');
1 k3 V( y- S# }+ `
System.SupportProxy = SysMin;
) U% ~" o9 M E+ w3 n6 [; z
% l) ?' }& A. ?# D) d
/* configure SysBios to use the lower half of Timer 1 */
7 e u* \) @( A1 z3 c, |- l5 M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
x1 k1 h3 o* a+ k1 q6 a" v
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. M: c4 X3 X/ Y9 {9 P( ]! \
Timer.timerSettings[1].master = true;
1 W7 V4 O( W) K8 e0 |# D! \
Timer.defaultHalf = Timer.Half_LOWER;
6 s0 E* B2 {( b$ v# Y D
Clock.timerId = 1;
. }5 p8 q* e5 q( }% w" b: R, h
y0 e. S/ l% ]/ S& }
0 P2 x4 T. g X# Z
/*
0 h) u+ [0 `) H- x8 {
* ======== Miscellaneous Configuration ========
( J, B- U# |7 N
*/
; m. n! \+ ?2 k* }# q* {) L
5 O ^0 |* s7 m' A8 T
/* set default diags mask */
' `0 a# G: J2 B8 n; w6 O
var Diags = xdc.useModule('xdc.runtime.Diags');
& N. M9 ?, t5 C* I0 N2 A( B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ {7 f2 C% w! [# H/ L2 D
# j8 V! n' m- y2 r
Defaults.common$.diags_ENTRY = Diags.ALWAYS_OFF;
& N( Q+ x* k. p2 B; h1 ^+ l
Defaults.common$.diags_EXIT = Diags.ALWAYS_OFF;
: U7 j& _% p. v' A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& z: q' y- B; j& Q9 l
Defaults.common$.diags_INTERNAL = Diags.ALWAYS_OFF; /* needed for asserts */
( O: }# l2 ]* F9 J5 N$ m. ]
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF; /* development only */
! d% \: S2 c' A* ^! J
Defaults.common$.diags_STATUS = Diags.RUNTIME_ON;
+ [; N/ a) r$ C' ?* n+ h
Defaults.common$.diags_USER1 = Diags.ALWAYS_OFF;
0 y7 S6 f* y: \
Defaults.common$.diags_USER2 = Diags.ALWAYS_OFF;
; {2 H1 Z) x+ Z! H8 t
Defaults.common$.diags_USER3 = Diags.ALWAYS_OFF;
8 s5 S! a9 @$ ]- l# r3 O: A7 N
Defaults.common$.diags_USER4 = Diags.ALWAYS_OFF;
% G* Y3 U' C9 K7 S! u
Defaults.common$.diags_USER5 = Diags.ALWAYS_OFF;
! H( B4 s0 h$ E# U
Defaults.common$.diags_USER6 = Diags.ALWAYS_OFF;
) D1 p q5 {2 @- p# m. `* I* \3 {
Defaults.common$.diags_INFO = Diags.ALWAYS_OFF;
* S Q3 W; h; {. w) S- L+ D
Defaults.common$.diags_ANALYSIS = Diags.ALWAYS_OFF;
! G5 r# ?7 A/ T, w5 i5 S' x
# i) l0 i* Q' C4 V1 D8 {3 {
/* override diags mask for selected modules */
6 B {/ L' ^ O1 X3 @
xdc.useModule('xdc.runtime.Main');
+ i. A: B7 q0 e0 h% L6 t. f
Diags.setMaskMeta(
' u. Z3 k' n! \7 i
"xdc.runtime.Main",
1 U Y5 i5 g" R2 y9 w- Q& S
Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 F* M3 j3 s/ G3 _( X
Diags.RUNTIME_ON
2 M2 Q6 \: I5 v8 N& S3 x. e
);
) b: D0 Q. w! A' ]6 m0 `+ g
4 v, P3 P& ?; h, m' a
var Registry = xdc.useModule('xdc.runtime.Registry');
* K. w; l0 O: F- J" g8 l9 {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 ~, G( m( Z# U4 a1 S& [
Registry.common$.diags_EXIT = Diags.RUNTIME_OFF;
! `/ x; ^1 c' N0 G. R
Registry.common$.diags_INFO = Diags.RUNTIME_OFF;
6 x4 |# A6 W2 x5 ~; [( X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 S1 @; i( K4 i2 z& ^# K/ r) p6 T
, T# B7 V& i! A5 y* R; U8 n/ ^( W
/* create a logger instance */
6 e$ f7 `2 o2 N" h; K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 R# t6 x$ @5 d5 Z% j7 G3 d
var loggerBufP = new LoggerBuf.Params();
/ B$ [% u! O0 f2 B) a
loggerBufP.numEntries = 128; /* 128 entries = 4 KB of memory */
$ i X, C8 J, h8 _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! q) d0 P6 O1 c. e6 c" t+ N9 O8 l: z
% [- x, h2 H% N3 P/ T- ?" \
var appLogger = LoggerBuf.create(loggerBufP);
9 k' J0 F9 y7 B" D4 _" K
appLogger.instance.name = "AppLog_Core1";
9 p. K$ U8 X0 F+ |3 ?1 f$ E
Defaults.common$.logger = appLogger;
. a) u5 x/ X3 ~
Memory.defaultHeapSize = 0x8192;
8 @4 X$ c( m+ k6 D" Y( o
Idle.idleFxns[0] = "&LEDStatus";
6 K# b/ M; o' c; N
Cache.initSize.l2Size = Cache.L2Size_32K;
6 _2 f/ Y4 _; f' y
p% d% q; B; b1 D# z
作者:
tulipyyf
时间:
2015-9-7 15:38
为什么没人回答呢? 大家都不用动态申请内存方式吗?
作者:
teddy
时间:
2015-10-28 09:51
/* create a default heap */
: m9 _% l$ h4 B* e, z6 d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) v+ q1 O: S5 ?' T0 o5 B1 P
var heapMemParams = new HeapMem.Params();
. j. h5 y( x. J8 V# d- G( V# Q8 ]
heapMemParams.size = 0x4000;
5 G' k5 a5 R7 Z2 V$ v s
' E6 t- Q5 D% z9 W
var Memory = xdc.useModule('xdc.runtime.Memory');
9 Y- r/ l( n8 Y2 Z2 G' e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* [. \2 I) K( c3 X, H4 K
; V( x9 n i$ |' C0 |( o
我大约calloc 每次共计大小为5K*16bits,
$ p" y2 i9 S( i7 e
而默认配置才0x4000、需要改大。
7 ^) I7 |2 P( s6 T5 e: W1 g0 p+ p
3 k' {9 S" d6 \3 H/ M
作者:
tulipyyf
时间:
2015-10-28 16:14
/* no rts heap */
1 G* a- k4 e; [- L
Program.heap = 0;
& b, M/ F. {; R) p- x
Program.argSize = 100; /* minimum size */
) y# O* }/ u( Q3 H8 a( K
Program.stack = 0xF000; //我改到F000 也不行
作者:
teddy
时间:
2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4