嵌入式开发者社区
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
[打印本页]
作者:
tulipyyf
时间:
2015-9-4 08:33
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 i1 d% I7 `& B
3 g! L( w0 q; e
float *x_d=(float *)calloc(len_in,sizeof(float)); //256
/ C1 \" ?: u3 o- k% p, Z. {1 l
1 K c# ?3 G; E1 _
其他程序段。。。。。
~5 L# c' b6 v) y. d
; J8 z1 `1 m7 N2 S# e/ |
free(x_d);
. d7 V& i( O4 f; y1 d' t
3 E. J1 }; Q0 E. ~0 D( o. {
使用DSP侧单独调试功能,验证动态申请没有问题,
& f8 ]( K [- K9 H1 A' C
, ]4 Y9 s, @7 c; }4 v2 t* m# E
但是,
当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败
,没有成功。请问是不是需要在哪里设置。
: W o1 T9 [5 e1 l3 G! E; k i; T8 W
O, X# p" w- L' B2 T
$ `, t$ ^' x$ s; G
0 h% j! _, X5 e( v5 P
0 j7 t7 ]2 k5 n0 s6 v
# e+ z# f2 I4 V/ [4 ` c
( ~ L2 d! C( {% j
; R4 v3 i' s6 D) V: F* G) g
% r H$ a9 }" W! w+ R- ^( F
. s/ X3 ^* g, | Q/ n8 a+ a
( @+ B" F* N2 U s, j
作者:
tulipyyf
时间:
2015-9-4 10:29
补充说明
- h! K* n: R8 I' C
我大约calloc 每次共计大小为5K*16bits,怀疑哪里需要配置一下
( E ?3 d( Q, R6 A3 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% N5 v% u) K0 z% K) D8 t# r- ~3 v# P- y
) ^& w/ |& g5 U T) q
是不是需要在DSP.CFG中进行配置
7 i- r' h: h( Y
我现在的配置为
& X) q: w1 u, m" ^+ c; z
3 n; l3 Z2 X' h( g: L
/*
1 b% m( j% b9 p
* ======== Operating System Configuration ========
& a9 b( F8 P \; _: F4 C
*/
$ T9 f5 E: g' I, w0 k7 D/ D* q0 n
% h; y, n4 X6 f+ O
/* no rts heap */
2 F* z4 \3 c" D! ^( Q1 J x
Program.heap = 0;
0 W7 z" T9 [/ n
Program.argSize = 100; /* minimum size */
6 Y0 Y' f' @, p
Program.stack = 0xF000;
//此处修改后的值。不太懂,所以改大
+ l+ U! q7 Z) Y9 g
; q/ q7 L! G7 w3 q5 s V; T
/* create a default heap */
% [5 Z& G! W; P7 v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 ~# G5 ?0 h( Q0 E' ?
var heapMemParams = new HeapMem.Params();
4 z% q# h% p6 I+ O k! O
heapMemParams.size = 0xFf00;
//此处修改后的值
。不太懂,所以改大
) e+ W- r5 v: j% |
7 R4 g K' ]) ?0 w0 P, v+ j
var Memory = xdc.useModule('xdc.runtime.Memory');
' U, f0 f7 S( k7 d. n. E- K1 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: H% |) V/ J2 s P7 H
7 Q( ?9 E* n% I- S$ r2 o
/* configure System module */
+ A! j. ^, h, e7 b3 w+ J5 d
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" } `' J! T; e, \0 |
SysMin.bufSize = 0x1000;
1 r0 _2 K8 O: |3 Y( g$ y
SysMin.flushAtExit = false;
8 g; ]/ @2 C( J9 F4 n
" N0 C+ m4 g6 P' M8 w- N
var System = xdc.useModule('xdc.runtime.System');
3 t' I _, \- b% G! T. e
System.SupportProxy = SysMin;
* \! b. r) {8 c2 i* l
9 T* h7 O6 K% P1 G' a! b
/* configure SysBios to use the lower half of Timer 1 */
1 S' S. R! a. a) c4 n5 S: X! ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 [1 Z; O3 p) i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' b- d, s' |' c' K7 p0 g6 v! ~
Timer.timerSettings[1].master = true;
4 H' q+ g( F% z3 S* {1 X5 C
Timer.defaultHalf = Timer.Half_LOWER;
7 u% c: D# L) G* W) K
Clock.timerId = 1;
) q$ Q+ y$ |; H. H2 a
9 g, ~( L! t% [4 `0 |
, ]: v: I. z- @5 p
/*
+ s3 b, }$ ^1 p% h( f
* ======== Miscellaneous Configuration ========
; v8 k! ]8 o. R& V! G% h9 u- ~
*/
; k$ f* n! a# X7 L. _
3 R. X5 [/ h# v7 {
/* set default diags mask */
* J0 F& ^% P5 w8 v/ D6 d3 u, a6 ?
var Diags = xdc.useModule('xdc.runtime.Diags');
0 u B) E1 J$ u
var Defaults = xdc.useModule('xdc.runtime.Defaults');
" @1 O B+ s) R
. O, F( i5 H4 D' O* r: F
Defaults.common$.diags_ENTRY = Diags.ALWAYS_OFF;
7 @" x. P! ^$ N: t+ u$ X
Defaults.common$.diags_EXIT = Diags.ALWAYS_OFF;
* x) S* W* o' ?% c6 b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 b, a' L+ N4 N7 q2 S
Defaults.common$.diags_INTERNAL = Diags.ALWAYS_OFF; /* needed for asserts */
- o: E5 O7 M' S1 p" K3 e
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF; /* development only */
& h- P/ s$ C: J1 k
Defaults.common$.diags_STATUS = Diags.RUNTIME_ON;
+ s0 }: s# U3 w0 {! o% o* `- V" R
Defaults.common$.diags_USER1 = Diags.ALWAYS_OFF;
8 C v/ U4 h: x2 r; o
Defaults.common$.diags_USER2 = Diags.ALWAYS_OFF;
. m7 @2 K1 M5 t! b
Defaults.common$.diags_USER3 = Diags.ALWAYS_OFF;
. q5 `. e( ]9 T
Defaults.common$.diags_USER4 = Diags.ALWAYS_OFF;
7 O u' L8 Y2 s) z$ H4 V
Defaults.common$.diags_USER5 = Diags.ALWAYS_OFF;
' D9 m5 t3 f' _3 V8 u( W( y
Defaults.common$.diags_USER6 = Diags.ALWAYS_OFF;
, J8 l5 u, o0 h8 Y2 l( t
Defaults.common$.diags_INFO = Diags.ALWAYS_OFF;
3 l# V& C- ?) V* K1 \
Defaults.common$.diags_ANALYSIS = Diags.ALWAYS_OFF;
# I( `& O) x2 I( b# A' K+ t" B5 W
, W! K$ w2 {3 M2 Y3 l* A8 a& k
/* override diags mask for selected modules */
( m3 Y2 M3 p s: B& B8 F
xdc.useModule('xdc.runtime.Main');
) Z5 p. }5 ]' o' h2 V+ b, W& p
Diags.setMaskMeta(
- }) c* W4 U( k6 F, a
"xdc.runtime.Main",
& r& H+ h$ ?6 D
Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 d) t( x9 V3 h9 V* e1 f/ X$ D) h0 H* w
Diags.RUNTIME_ON
7 ]0 i" L$ g6 @/ N: b# E0 X
);
8 v5 N% s9 K1 \; A8 m
( Q6 E v3 R) s4 h
var Registry = xdc.useModule('xdc.runtime.Registry');
$ |' P& ^* q$ W) _9 L; N
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! s" n) e8 B5 ?' h
Registry.common$.diags_EXIT = Diags.RUNTIME_OFF;
$ i$ T" e$ x5 w5 Q/ t8 }
Registry.common$.diags_INFO = Diags.RUNTIME_OFF;
( ^- [; j- ~7 |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- b4 n. L' Q& c1 r: Z6 v+ Z
- R* w; h+ Y) E( T1 O
/* create a logger instance */
! f h; ]3 k: e0 z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 _. `, {$ Y. F' D) T0 `4 Z7 V+ b
var loggerBufP = new LoggerBuf.Params();
3 Q+ V+ J+ s7 L2 ^* `
loggerBufP.numEntries = 128; /* 128 entries = 4 KB of memory */
$ y" \0 `9 O4 M0 R7 w. G/ v3 ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" ]$ K. g2 a( N. c
4 D: k1 @) E1 x/ ~0 N; I
var appLogger = LoggerBuf.create(loggerBufP);
2 e* }- }6 e' k: U4 a7 i2 y
appLogger.instance.name = "AppLog_Core1";
$ {; q, o8 b( f
Defaults.common$.logger = appLogger;
1 k) s3 q7 e/ F* b. W
Memory.defaultHeapSize = 0x8192;
% u2 p- I$ E0 x4 X+ B) ?
Idle.idleFxns[0] = "&LEDStatus";
5 q1 c# F* }3 o0 Y
Cache.initSize.l2Size = Cache.L2Size_32K;
8 ^' k5 j, ]# ^8 j5 q+ |
! X; e+ X9 G. x0 \4 {3 }8 j
作者:
tulipyyf
时间:
2015-9-7 15:38
为什么没人回答呢? 大家都不用动态申请内存方式吗?
作者:
teddy
时间:
2015-10-28 09:51
/* create a default heap */
D6 W. @4 M' }% E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 \% w; |6 m( D2 ?8 M; G, w
var heapMemParams = new HeapMem.Params();
% U! U- i- K/ t i2 P% O
heapMemParams.size = 0x4000;
; R$ ^+ `+ Y& E) h
! ?0 X8 J8 ~+ f# |) M
var Memory = xdc.useModule('xdc.runtime.Memory');
) Q5 u$ g6 G+ N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* v2 u9 G: \4 G. W- o; ~; S* U
! e3 ]3 J0 j2 z6 Z- g$ h
我大约calloc 每次共计大小为5K*16bits,
% R8 F0 B" G O# Z' c6 p; G6 p9 B
而默认配置才0x4000、需要改大。
6 J8 V8 z* n+ a9 K1 }' ?
6 K; V. Z4 }0 ^, R9 R
作者:
tulipyyf
时间:
2015-10-28 16:14
/* no rts heap */
0 N9 x0 o, `; J7 f8 U1 f, |- ]* {
Program.heap = 0;
. a0 Z* t8 C1 c- Q
Program.argSize = 100; /* minimum size */
5 M' D/ T) _3 l0 F6 l
Program.stack = 0xF000; //我改到F000 也不行
作者:
teddy
时间:
2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4