嵌入式开发者社区
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
[打印本页]
作者:
tulipyyf
时间:
2015-9-4 08:33
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 l2 x- @( P; I5 h0 H% `: R
3 A9 t" K3 K2 Y/ m% R
float *x_d=(float *)calloc(len_in,sizeof(float)); //256
; Q2 |* M* ?9 `$ r* m
0 ?' Z/ f8 U6 S0 l# S- H3 {
其他程序段。。。。。
2 d3 a$ x: r5 N" o" J, ?. m
: s2 Y) T* ?1 M4 J+ C
free(x_d);
) S# ?+ ]+ m( _# b3 `" J! E
: ~" q* @& F5 ^0 C7 r3 V& t% d
使用DSP侧单独调试功能,验证动态申请没有问题,
1 P* X+ |% }" I. Q( k2 T
8 H2 [" D2 O3 y9 h7 H
但是,
当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败
,没有成功。请问是不是需要在哪里设置。
! M$ Z7 W& U* |2 V0 a: [* Q
, Z# b3 g G0 D5 X7 [
& G! `8 O! a! T3 \1 A7 |8 X
6 D( ~5 A' `3 N2 M
/ n: ~; ^8 C6 z
' s3 T9 W9 ^, f; s9 L0 ]# G+ Q8 q
8 g, \1 V% O9 {% ~2 A2 _
7 M$ K# C( @9 k4 U0 d/ e7 \/ r
8 Z }7 ~7 O) S3 ]. _% X7 z v
1 b' M- {" t* P* F
3 j$ Z# w: X1 r* Y/ ~* p4 |5 Y
作者:
tulipyyf
时间:
2015-9-4 10:29
补充说明
) b0 I8 Q1 ]/ t9 s( R) m! E8 T
我大约calloc 每次共计大小为5K*16bits,怀疑哪里需要配置一下
% d$ B3 w; }. J% @7 B6 o6 h5 F6 m3 A
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; U) C1 f# t7 \+ e
/ K8 O5 G( L, z( U( a [
是不是需要在DSP.CFG中进行配置
* _# l- I! F1 L/ W
我现在的配置为
' T, N. S) O- X# m" j8 a* P
" C- q o. I( F3 R" P9 C3 h
/*
* S2 X3 I+ Q- a+ |0 D* w7 W1 R
* ======== Operating System Configuration ========
1 _1 X# E3 H! F, N; h7 B
*/
+ W7 M$ t/ ?! n0 {4 `
3 ~& K, r' J2 b
/* no rts heap */
& X3 r) N$ }, q
Program.heap = 0;
" I) u, g8 W$ F3 e# n) J
Program.argSize = 100; /* minimum size */
* }" {( t0 ~& @
Program.stack = 0xF000;
//此处修改后的值。不太懂,所以改大
8 W! P- l G# L, c' s
9 t$ n' X) z$ h
/* create a default heap */
/ O" Z" u2 U- H) F; Y0 U1 q/ j* J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- B3 B* m" W2 \/ [
var heapMemParams = new HeapMem.Params();
8 m( A/ ^! t6 i y. V
heapMemParams.size = 0xFf00;
//此处修改后的值
。不太懂,所以改大
1 f; L- ~, [% l
+ |. E" p+ o6 z4 n4 u: E9 y
var Memory = xdc.useModule('xdc.runtime.Memory');
0 k! {. k5 }; F. i/ r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; w5 k4 w( {* i8 T, y9 V$ F* {
+ P, T8 F* D: P, J
/* configure System module */
5 h9 Z; t: m+ j
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( `; {4 p! @5 D6 O: r7 X
SysMin.bufSize = 0x1000;
* a: ^- u# R' s4 C% w
SysMin.flushAtExit = false;
) ~6 c4 M7 Y; o5 |: ]& e
) }0 V# T1 [) O2 o8 S. V# S2 _
var System = xdc.useModule('xdc.runtime.System');
5 [5 T3 P6 Y" t6 p: A: K' E5 U q
System.SupportProxy = SysMin;
' V4 U. W7 z K% D6 u' U$ ^
& N# t7 T& f5 O# A; k8 l
/* configure SysBios to use the lower half of Timer 1 */
# v- ~. o5 K1 q0 W% r$ s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( c1 n- K; E+ ~: H9 {% a% _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 I! {7 n, G8 R
Timer.timerSettings[1].master = true;
% z' x+ Q$ w- G: L2 u" }- ?
Timer.defaultHalf = Timer.Half_LOWER;
. g* Y; I" D" _8 Z f6 ?, P
Clock.timerId = 1;
5 f0 V: }/ `+ r
, r1 S/ R4 |( W u" x: m" Y& r
/ b7 g. \+ [- a& ]8 t
/*
/ M2 `; K0 R( g% s: D5 d5 w. v
* ======== Miscellaneous Configuration ========
/ N6 D& ^7 T' E
*/
9 p @* v/ k; {0 F: Y8 x
& y9 z6 y( V/ [% G# e" ^& l' g
/* set default diags mask */
- ]: c: L7 h3 @4 i+ p
var Diags = xdc.useModule('xdc.runtime.Diags');
0 R! S! j. |. k6 W2 O* m! K) F. Y: B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; L( X' K P f' J' G5 E. Y
$ |1 u( C8 J2 Y8 R* x0 g
Defaults.common$.diags_ENTRY = Diags.ALWAYS_OFF;
8 L) T) c$ L+ ^% t6 v
Defaults.common$.diags_EXIT = Diags.ALWAYS_OFF;
! J0 c# l$ z# [! U
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, A" k' I5 V+ {1 `! G, N
Defaults.common$.diags_INTERNAL = Diags.ALWAYS_OFF; /* needed for asserts */
; X$ C/ T4 T7 _' k+ ~0 Z3 m3 M/ r9 ~
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF; /* development only */
0 V* ~2 n! p4 X' Z
Defaults.common$.diags_STATUS = Diags.RUNTIME_ON;
* f4 K7 j4 w1 r! T# z2 s0 P0 a9 k
Defaults.common$.diags_USER1 = Diags.ALWAYS_OFF;
4 T& F% ^; P" m" q0 Z
Defaults.common$.diags_USER2 = Diags.ALWAYS_OFF;
7 V! G9 |( T l" E4 `" G8 J
Defaults.common$.diags_USER3 = Diags.ALWAYS_OFF;
# X A) N7 F& \) \
Defaults.common$.diags_USER4 = Diags.ALWAYS_OFF;
7 h2 X( U% h5 j
Defaults.common$.diags_USER5 = Diags.ALWAYS_OFF;
, H6 o: P3 s r* T
Defaults.common$.diags_USER6 = Diags.ALWAYS_OFF;
( J. W# _8 L/ D3 \2 w
Defaults.common$.diags_INFO = Diags.ALWAYS_OFF;
1 b; \! _* S7 g, @& B
Defaults.common$.diags_ANALYSIS = Diags.ALWAYS_OFF;
8 R* ~( u5 d) Y% _/ |
( R5 |7 m2 x v
/* override diags mask for selected modules */
, L* C: r, d9 [. l6 I% d
xdc.useModule('xdc.runtime.Main');
9 K7 I( @3 H: }- k& B2 @
Diags.setMaskMeta(
v5 _4 g( @, p' y4 D& M
"xdc.runtime.Main",
8 R# p' o$ _! [ l
Diags.ENTRY | Diags.EXIT | Diags.INFO,
: M/ F' I% ]7 v
Diags.RUNTIME_ON
" _2 g5 v+ c9 G: D* L2 j
);
7 w: A d! L- d0 F; u% i* u
: V2 ~: I- [5 s3 r% m3 p! e' z' g
var Registry = xdc.useModule('xdc.runtime.Registry');
. X8 d8 ^) |1 W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& p" y2 k: M8 u1 ]
Registry.common$.diags_EXIT = Diags.RUNTIME_OFF;
6 _9 _- Z8 ~0 ` j' t- d. V
Registry.common$.diags_INFO = Diags.RUNTIME_OFF;
. ?7 P& F) H6 n" G1 O; L6 E0 g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
z0 B! d: ]1 c. H$ b! S
8 n; z; |$ z3 ?8 s3 }8 y% {
/* create a logger instance */
" d( Z% y9 t2 l6 V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ j0 s8 C! }# z- s& w
var loggerBufP = new LoggerBuf.Params();
( G: B: W0 N9 j4 Z8 Z+ `
loggerBufP.numEntries = 128; /* 128 entries = 4 KB of memory */
/ J* C( M& N4 V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ l' ]. |3 T$ I3 d
3 y! i' Z q- P8 u" v: |
var appLogger = LoggerBuf.create(loggerBufP);
( b `% q0 b) p& G! j3 Q" T; v. ^- ]
appLogger.instance.name = "AppLog_Core1";
$ g7 e4 G" A" n
Defaults.common$.logger = appLogger;
, R& q; F8 `2 C1 W; \
Memory.defaultHeapSize = 0x8192;
' j' N% n2 {! Y% \" f6 @2 E, E
Idle.idleFxns[0] = "&LEDStatus";
! f* l4 n5 x1 X" J9 V* _! s
Cache.initSize.l2Size = Cache.L2Size_32K;
; m2 }; L+ r4 Z8 a
* l: E9 J* U! d
作者:
tulipyyf
时间:
2015-9-7 15:38
为什么没人回答呢? 大家都不用动态申请内存方式吗?
作者:
teddy
时间:
2015-10-28 09:51
/* create a default heap */
2 m s! y3 H) g+ f" E& G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- F8 b" k( y3 h! j
var heapMemParams = new HeapMem.Params();
+ L; R# s, [& Z# ?
heapMemParams.size = 0x4000;
9 B2 u! O4 a" V( P5 I
`( _6 P$ U% M# \/ z4 A" S U/ a0 [
var Memory = xdc.useModule('xdc.runtime.Memory');
7 F$ F# X- j- t# T, e7 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 U- n. a$ Z/ h1 G1 q! o+ H$ Z
8 G( c( L; N) b* K8 Y
我大约calloc 每次共计大小为5K*16bits,
0 g U7 S; P% h
而默认配置才0x4000、需要改大。
* F0 u. F* S# T, f
1 ?6 |% e1 v' r" e+ O) ]+ b: u- A1 N
作者:
tulipyyf
时间:
2015-10-28 16:14
/* no rts heap */
; Q9 a. `9 G! i6 t# h; o- W
Program.heap = 0;
7 C% Q' b; ^+ v3 N ]5 V
Program.argSize = 100; /* minimum size */
$ d- h9 {, C5 e
Program.stack = 0xF000; //我改到F000 也不行
作者:
teddy
时间:
2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4