嵌入式开发者社区
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
[打印本页]
作者:
tulipyyf
时间:
2015-9-4 08:33
标题:
关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; h2 N5 x, N2 x- d3 {7 N: `) |; y
|" ]( D) M$ W- w7 C
float *x_d=(float *)calloc(len_in,sizeof(float)); //256
) e$ \3 S( L6 C( J! P
% _+ `8 t/ U& Y0 Z: m
其他程序段。。。。。
/ x% @ Y3 g! n B* {3 C+ g8 i
# S: U& A6 U2 X+ X; a7 E) [: |% i
free(x_d);
" Q, u3 S1 ~6 b) q; L3 V! ^
5 B' \1 i+ w7 F1 N! r: G/ T
使用DSP侧单独调试功能,验证动态申请没有问题,
9 a6 Z& n- {! x# y. S2 y& `' q1 G3 D
3 _* F6 S3 B, X" U8 [3 |
但是,
当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败
,没有成功。请问是不是需要在哪里设置。
. H, J/ A6 s! D' p: e2 Z
; _. Z% P8 V. q2 i! R
( }# e# ]" ]& W4 {
3 v2 d, c: n) \4 N& Z
. E$ g# y2 Z! t0 q s
% J; ?. Q+ C! c4 @
$ T7 u1 q0 b& }5 g% H) \
5 T; ?# S6 u" [" P6 Z( O7 }$ @3 C: K! Z, W
# ?* `. ~9 D9 ?0 V
1 v' Z. e; u0 }% K+ S* g$ d8 d
# v8 n, c; m6 u) m9 M: ^& w
作者:
tulipyyf
时间:
2015-9-4 10:29
补充说明
; C. f1 C* H7 n7 Y* r$ _. b2 L4 |
我大约calloc 每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 A" F0 Y' k) H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" j( D, g' s u# e; a) S
3 O. [- {$ ?) E8 {( _
是不是需要在DSP.CFG中进行配置
6 l0 }9 d' T: c+ a
我现在的配置为
4 z# ]! Q" N- B6 V! t) S$ p2 x
! D, @5 `( I$ V; q9 {
/*
A/ S+ H/ u6 q& R' h
* ======== Operating System Configuration ========
' M( H" K: T+ }- Z9 W5 G
*/
; w" T* c# Y+ o+ @8 T8 |
) o% p" A/ T& {
/* no rts heap */
6 X* p) x' c+ p$ s' j$ |' a
Program.heap = 0;
. y3 p+ _7 _3 ~# W
Program.argSize = 100; /* minimum size */
% s1 t V; c* _ o8 U" W
Program.stack = 0xF000;
//此处修改后的值。不太懂,所以改大
, W7 Y) a, r1 M# m% s8 f9 K2 v
: b+ u9 h, `: i. s, z; g' r& P" n
/* create a default heap */
' _& J# z5 f& u0 G) Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 A$ P( b% p, o9 x! a
var heapMemParams = new HeapMem.Params();
7 {. b' m* g& I& Q3 ~. t
heapMemParams.size = 0xFf00;
//此处修改后的值
。不太懂,所以改大
% b# k$ E! ]/ L- |" N' ~
, t3 J- X6 `1 b* [ r
var Memory = xdc.useModule('xdc.runtime.Memory');
2 U; K! u' j1 ]0 A$ C! g A, W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# D. U7 j- |: Q, t" h0 X" \$ A
0 {. n( V. f. c3 \- w
/* configure System module */
4 ]! A- y& }7 _' P' y3 K
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ S, {, o4 g4 n+ ]
SysMin.bufSize = 0x1000;
4 U: M4 c/ c8 Y, ?4 r2 Q/ s, B( y9 u
SysMin.flushAtExit = false;
6 g( O7 v3 `) u% M+ o) y. e6 u
' z, J' B* \) L7 c6 d6 h
var System = xdc.useModule('xdc.runtime.System');
9 I R7 q" F" g3 ]1 Y
System.SupportProxy = SysMin;
]1 M W5 _& `, [ q
2 }- |2 q1 S7 D' O8 G) I
/* configure SysBios to use the lower half of Timer 1 */
5 c- Z8 D. k. U* s0 D4 H
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. V9 D2 _2 P6 t! Y# {$ a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ ~! L+ _9 C' i: x6 r1 z' M6 P: A
Timer.timerSettings[1].master = true;
' f3 |- g7 Q: x; x+ V
Timer.defaultHalf = Timer.Half_LOWER;
. \) J ]4 A v& P7 l( B6 n
Clock.timerId = 1;
2 _/ K) y3 I# ]; @
9 f/ \. g {- R
0 g; e0 s+ d% ^ t- ^8 O
/*
0 L5 {; W8 X& Z2 |
* ======== Miscellaneous Configuration ========
: T2 T; ^: U8 T% @
*/
5 U0 x; n1 P( ?1 B' y2 }$ ?; z
5 q2 W! F1 z5 \/ ^1 h
/* set default diags mask */
; ]! M" h7 \- c3 `
var Diags = xdc.useModule('xdc.runtime.Diags');
8 o) ?7 w# E3 o; C0 d% J! h# R
var Defaults = xdc.useModule('xdc.runtime.Defaults');
- \$ K0 F3 [5 I3 @; a1 Z
: b% q$ Q1 c+ ~/ U* K; I8 k+ d
Defaults.common$.diags_ENTRY = Diags.ALWAYS_OFF;
5 Q- U% r) M% x( u6 e: a
Defaults.common$.diags_EXIT = Diags.ALWAYS_OFF;
# a. D+ |+ N& T
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& ^, B6 O% F5 S" I8 X& `3 Z
Defaults.common$.diags_INTERNAL = Diags.ALWAYS_OFF; /* needed for asserts */
! g5 ^* b8 b ^
Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF; /* development only */
X& X" T) e6 S* |* A
Defaults.common$.diags_STATUS = Diags.RUNTIME_ON;
9 z1 R! i" _9 d6 W
Defaults.common$.diags_USER1 = Diags.ALWAYS_OFF;
9 ?8 D* s* O: Z( ?: x+ q
Defaults.common$.diags_USER2 = Diags.ALWAYS_OFF;
9 Z* u; a3 o# H9 l! m9 {2 N
Defaults.common$.diags_USER3 = Diags.ALWAYS_OFF;
. Y, c; l* ^- A A! W, K
Defaults.common$.diags_USER4 = Diags.ALWAYS_OFF;
% c5 q0 Z l) G5 T. d3 |
Defaults.common$.diags_USER5 = Diags.ALWAYS_OFF;
" X( Z5 v3 t- y
Defaults.common$.diags_USER6 = Diags.ALWAYS_OFF;
% H0 X$ W. x. t3 D4 v- G" o5 V
Defaults.common$.diags_INFO = Diags.ALWAYS_OFF;
$ E; Q( [8 i9 o
Defaults.common$.diags_ANALYSIS = Diags.ALWAYS_OFF;
1 i8 ?+ p8 N. A5 L3 k+ k. U
+ E) Y' K+ C$ _: }3 g
/* override diags mask for selected modules */
* g; E, J% C& n5 s6 I
xdc.useModule('xdc.runtime.Main');
- ?1 Q' m9 H1 _' y
Diags.setMaskMeta(
/ F& \- A9 H. t4 C& Q3 X% R8 U
"xdc.runtime.Main",
+ g- N1 B' {8 k: _8 C
Diags.ENTRY | Diags.EXIT | Diags.INFO,
" j8 E/ J% c* E4 Y( m& |
Diags.RUNTIME_ON
6 Y4 x9 R0 ^1 T/ ^
);
% F, L9 y. i5 D6 `- p: j/ L' ^
- s& h$ X: `/ {$ W
var Registry = xdc.useModule('xdc.runtime.Registry');
1 Y2 v7 W# Y% n/ J8 Q& B% _2 x& B# @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 x2 U- {3 P5 j* g9 j( w
Registry.common$.diags_EXIT = Diags.RUNTIME_OFF;
! @+ N4 p9 e9 x+ X1 V
Registry.common$.diags_INFO = Diags.RUNTIME_OFF;
1 J! D! p. M' X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; m" o* `+ Z, |( R; q" A
' ]/ V: Z- R- z$ w' A
/* create a logger instance */
6 e! Z- U7 x2 [ u: D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 Y' n" H0 M) j8 A7 j
var loggerBufP = new LoggerBuf.Params();
! H7 T- d- E4 F3 U$ k$ d
loggerBufP.numEntries = 128; /* 128 entries = 4 KB of memory */
. c. d `! Y6 B9 c1 x& l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 A2 X2 g0 E* Z" T' W- c
1 t6 m d$ B5 p) m9 M* x& C
var appLogger = LoggerBuf.create(loggerBufP);
2 L5 a2 G0 q3 g+ A& B5 S
appLogger.instance.name = "AppLog_Core1";
. w7 D9 j: p$ h) Q. ?# Y( J2 ^4 b
Defaults.common$.logger = appLogger;
3 Q8 f" ^: o' }/ c, E2 ?8 u+ q
Memory.defaultHeapSize = 0x8192;
' |: C, r3 n& {8 x4 ^
Idle.idleFxns[0] = "&LEDStatus";
# ?& g% }* v. h% s6 S% V& {
Cache.initSize.l2Size = Cache.L2Size_32K;
1 m1 L w/ X5 Q- ]; [; I7 X+ M
; c' A2 G" V3 v3 z1 q0 D
作者:
tulipyyf
时间:
2015-9-7 15:38
为什么没人回答呢? 大家都不用动态申请内存方式吗?
作者:
teddy
时间:
2015-10-28 09:51
/* create a default heap */
9 `# t7 a% }2 q0 l; t8 F/ u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ v6 ^ N9 a5 X+ M- C5 b, K' [7 Q" A1 q
var heapMemParams = new HeapMem.Params();
2 W. E# r" W! w3 p0 m3 f
heapMemParams.size = 0x4000;
1 @6 k" [. M* G, _1 o
! O4 I$ S, c7 e# f; j4 @
var Memory = xdc.useModule('xdc.runtime.Memory');
1 B& j0 r5 \. ?( c8 m+ i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: i3 S; p' `0 O+ l3 C" s
7 L ?8 w0 W# v+ D8 }3 y/ Y# X1 x) R
我大约calloc 每次共计大小为5K*16bits,
) }; F# a' R, ?1 d: i, A2 M
而默认配置才0x4000、需要改大。
- O9 ~4 b+ b3 n+ z- p
. n( }" E5 R5 h* @
作者:
tulipyyf
时间:
2015-10-28 16:14
/* no rts heap */
, f8 u' \* ^, G
Program.heap = 0;
: A) z* R2 T3 C9 Z" ^9 a7 g) o
Program.argSize = 100; /* minimum size */
. r f: t4 l$ T8 T" q
Program.stack = 0xF000; //我改到F000 也不行
作者:
teddy
时间:
2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4