嵌入式开发者社区
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
[打印本页]
作者:
tulipyyf
时间:
2015-9-4 08:33
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& }% b! t( F4 q5 \( I
$ w2 X6 r! U: x) a+ m) F
float *x_d=(float *)calloc(len_in,sizeof(float)); //256
4 P7 T1 Q: j; z& W, w
t" F1 r$ ^+ U, F0 Z& F
其他程序段。。。。。
9 n1 t/ D4 t, n+ U
1 R+ o0 A# }9 S2 R0 R
free(x_d);
5 {! x0 f, w5 B9 G E
0 A ^) {; ?# ~5 d
使用DSP侧单独调试功能,验证动态申请没有问题,
( k% \: p* h: u
# }! j5 }; W0 b* ]9 Z; J. Z
但是,
当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败
,没有成功。请问是不是需要在哪里设置。
2 V, ]. H# k; [( f* U
% C+ W2 \8 X) Z z' s/ m
# v0 L. |5 L h7 A9 }9 C
/ b2 d# X8 ]3 G/ z7 b
! K; A$ }5 f% G, c+ R
$ C1 C+ Q9 t9 T9 i4 Y
9 ^5 @ v! Z6 K0 S1 i0 W4 n9 B) S
. u. {2 ~& o& H4 s6 k
, ~2 d- E! m' b- Z: x& D
4 _, R2 b' b' e( y; ?; C$ M4 P
2 u! h' W e0 y) U& x
作者:
tulipyyf
时间:
2015-9-4 10:29
补充说明
3 b. U( b6 S, [5 m* v* @9 E
我大约calloc 每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 ~! h" f1 n% O* ^; x8 w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 m& x7 k& ]6 O
( |* j- ]$ m9 c
是不是需要在DSP.CFG中进行配置
- y+ N3 h$ x2 B0 p$ x
我现在的配置为
+ _0 t0 K2 `3 E8 x
8 q4 `8 ?/ n6 B6 O! c4 s3 F
/*
7 V% F4 `% G" O/ l) X
* ======== Operating System Configuration ========
* g% w/ ~) m3 z( w1 y: q" e
*/
1 O& i( a% O4 x0 z
$ b6 ~3 e5 b- Q# v# O* r' d
/* no rts heap */
9 t6 M& x, G# v( s# D- @% J- m
Program.heap = 0;
7 `5 Z( J% M% v: [+ c$ H
Program.argSize = 100; /* minimum size */
+ B' x' F" B" D7 f
Program.stack = 0xF000;
//此处修改后的值。不太懂,所以改大
& N8 x2 Y- C5 _ U, u6 q! Q' I
% J; R4 ]' P) Z9 p
/* create a default heap */
* g9 h- S, G5 G: Z+ S/ j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! a( i% s9 D8 A3 d+ M4 e) B
var heapMemParams = new HeapMem.Params();
! k/ q0 d) F" @2 w" V; K
heapMemParams.size = 0xFf00;
//此处修改后的值
。不太懂,所以改大
; S: n8 j. s4 d; U" J/ E
5 \' |6 D Z7 f9 D$ H
var Memory = xdc.useModule('xdc.runtime.Memory');
G; c8 i) U' P6 d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, Q1 r4 S6 Y7 V; D$ O
3 H2 E: W& |+ k& q
/* configure System module */
2 M) I' }' A1 b8 J
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 K# K6 Z, q* e7 D6 w2 M3 q/ e; R4 R
SysMin.bufSize = 0x1000;
( n' ?- }9 d2 S0 H2 K% I( M. J
SysMin.flushAtExit = false;
6 Z6 I# C2 [9 @; W' p
3 m; x( t0 {' ~* S
var System = xdc.useModule('xdc.runtime.System');
, Z$ p1 V( M; N* `, ?$ s
System.SupportProxy = SysMin;
9 M5 R6 N' t4 o% K% Q6 S# {' x
; Q% E, D e5 d$ B
/* configure SysBios to use the lower half of Timer 1 */
% K |& Q" Z6 R8 D) \9 Z* l+ h/ q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ l) s, t6 H, F2 m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; [% k5 M5 |! @
Timer.timerSettings[1].master = true;
1 d7 M7 B# S( z3 `8 ]& M( H7 ]* y4 t
Timer.defaultHalf = Timer.Half_LOWER;
6 Z& L6 N- g0 L
Clock.timerId = 1;
. W, W0 \) N0 W$ R0 y
' C8 S* Q# J% [; h
! h1 p W, b& G! k
/*
S9 m6 \4 q& m* H! k) b: k
* ======== Miscellaneous Configuration ========
$ f% J7 J5 @% v& ]
*/
' y: L9 ?/ }+ l7 Y
0 L+ Y3 s! f, W" I: [
/* set default diags mask */
: k; Y8 n1 I' e. i
var Diags = xdc.useModule('xdc.runtime.Diags');
- z) o( G5 k# V( O) Z$ Q4 K2 O9 t0 ]
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. b; O. T; ?% E3 u8 P
1 j# S" X: X, w& J
Defaults.common$.diags_ENTRY = Diags.ALWAYS_OFF;
# q) ^+ R2 R$ Q; w2 e. e, t# j
Defaults.common$.diags_EXIT = Diags.ALWAYS_OFF;
+ {& P! ^2 G% L5 N1 E) P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 s5 Q+ A. q) [+ B8 ~1 p9 M* ~
Defaults.common$.diags_INTERNAL = Diags.ALWAYS_OFF; /* needed for asserts */
( C; T: k4 L/ M# X+ z
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF; /* development only */
% ~; R: E3 n( W- I. j% b
Defaults.common$.diags_STATUS = Diags.RUNTIME_ON;
2 @0 w! h' `! |9 D0 ]. } I
Defaults.common$.diags_USER1 = Diags.ALWAYS_OFF;
% e9 \6 j3 W4 S% G7 j4 x
Defaults.common$.diags_USER2 = Diags.ALWAYS_OFF;
0 Y3 ]/ Y: t: F$ _/ {' L
Defaults.common$.diags_USER3 = Diags.ALWAYS_OFF;
5 t; J7 D2 U3 p
Defaults.common$.diags_USER4 = Diags.ALWAYS_OFF;
) E+ L2 t0 S. L9 m/ D1 W
Defaults.common$.diags_USER5 = Diags.ALWAYS_OFF;
* } z5 {, X5 w) e/ p. f; M, Y
Defaults.common$.diags_USER6 = Diags.ALWAYS_OFF;
2 M! J- l1 v7 q6 R5 D9 Q" w- [
Defaults.common$.diags_INFO = Diags.ALWAYS_OFF;
1 o/ o: t" S3 c! W
Defaults.common$.diags_ANALYSIS = Diags.ALWAYS_OFF;
- {. @7 u6 g9 y1 H
6 X7 s$ ]3 i; I8 ~
/* override diags mask for selected modules */
. e. m! ]% }. A& o* j- z! ~- }% R* k
xdc.useModule('xdc.runtime.Main');
( }# W1 L! r& G ]+ s% p* O: ^
Diags.setMaskMeta(
+ B% z6 D1 N( {
"xdc.runtime.Main",
: r1 g, G9 `# F q) k' o
Diags.ENTRY | Diags.EXIT | Diags.INFO,
l$ z6 B+ k. _! r5 V
Diags.RUNTIME_ON
2 K( j3 E4 K8 I8 a# }( |: q
);
" G' J( p, G! c- _2 ~
! y8 n$ G4 A$ n: ~0 B) G! q
var Registry = xdc.useModule('xdc.runtime.Registry');
2 U2 e& m, M8 @4 a! h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 U; |8 S$ N% p( `
Registry.common$.diags_EXIT = Diags.RUNTIME_OFF;
9 N% K8 O: \, r2 q A
Registry.common$.diags_INFO = Diags.RUNTIME_OFF;
0 q2 i1 U6 [6 T5 o1 V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" G" ?' q7 t% E
2 w1 i& G3 A4 ?0 Y. z% j
/* create a logger instance */
9 |& p0 n# `4 w0 K; h7 ?' ?# e2 j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% ]. y8 J6 }' R: U0 G9 B: t
var loggerBufP = new LoggerBuf.Params();
2 t/ B m5 y5 ?1 l
loggerBufP.numEntries = 128; /* 128 entries = 4 KB of memory */
0 v+ e: }& e; Y. E$ \7 X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* d$ V0 _& B' h q6 p2 {
! e3 I: L/ w1 K8 r: s" r- H. z
var appLogger = LoggerBuf.create(loggerBufP);
7 c0 a6 D; N6 r3 N- M+ h% G
appLogger.instance.name = "AppLog_Core1";
( V( [8 m2 b& x0 @8 D$ G
Defaults.common$.logger = appLogger;
+ o, G, F# [* u2 Z( i
Memory.defaultHeapSize = 0x8192;
9 r' A3 t6 s. C# K( s5 ~3 l; B7 B+ D
Idle.idleFxns[0] = "&LEDStatus";
( p/ ? I8 H. J
Cache.initSize.l2Size = Cache.L2Size_32K;
: }& O9 i& O& ~* v2 m: X
0 G' R) N/ {7 s7 m) L$ d! J
作者:
tulipyyf
时间:
2015-9-7 15:38
为什么没人回答呢? 大家都不用动态申请内存方式吗?
作者:
teddy
时间:
2015-10-28 09:51
/* create a default heap */
: A! W. K; E8 h: R8 _6 s5 j5 q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 |: `2 C- u2 @6 ?1 m
var heapMemParams = new HeapMem.Params();
2 L) L( }/ C. f4 _
heapMemParams.size = 0x4000;
) D8 D0 N n: G9 G' G
2 @) [# W& F# A. ^) Q' |
var Memory = xdc.useModule('xdc.runtime.Memory');
+ s6 `0 n1 e$ c0 }3 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ g- m8 s6 [' ?
; R9 ~/ V3 {. |6 [
我大约calloc 每次共计大小为5K*16bits,
" @( m" `3 D, Q$ A1 P
而默认配置才0x4000、需要改大。
3 N+ N/ C% K2 G6 K6 A8 Q; Q0 E s
; ]( S& ~$ [( g: ]% E1 b6 b4 n% b
作者:
tulipyyf
时间:
2015-10-28 16:14
/* no rts heap */
: m; ?. X" B* `# V! Z/ S
Program.heap = 0;
$ q. {" H4 t( `
Program.argSize = 100; /* minimum size */
* {1 R+ w9 H. A1 l3 r2 F9 O
Program.stack = 0xF000; //我改到F000 也不行
作者:
teddy
时间:
2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4