嵌入式开发者社区

标题: 关于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 V1 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$ |' aProgram.heap = 0;
. y3 p+ _7 _3 ~# WProgram.argSize = 100;  /* minimum size */
% s1 t  V; c* _  o8 U" WProgram.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) Zvar 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 ~. theapMemParams.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 Kvar 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 Hvar 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: ATimer.timerSettings[1].master = true;
' f3 |- g7 Q: x; x+ VTimer.defaultHalf = Timer.Half_LOWER;
. \) J  ]4 A  v& P7 l( B6 nClock.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# Rvar 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& TDefaults.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* |* ADefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 z1 R! i" _9 d6 WDefaults.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, KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% c5 q0 Z  l) G5 T. d3 |Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" X( Z5 v3 t- yDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% H0 X$ W. x. t3 D4 v- G" o5 VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ E; Q( [8 i9 oDefaults.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 _' yDiags.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: `/ {$ Wvar 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( wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! @+ N4 p9 e9 x+ X1 VRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 J! D! p. M' XRegistry.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& lloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 A2 X2 g0 E* Z" T' W- c1 t6 m  d$ B5 p) m9 M* x& C
var appLogger = LoggerBuf.create(loggerBufP);
2 L5 a2 G0 q3 g+ A& B5 SappLogger.instance.name = "AppLog_Core1";
. w7 D9 j: p$ h) Q. ?# Y( J2 ^4 bDefaults.common$.logger = appLogger;
3 Q8 f" ^: o' }/ c, E2 ?8 u+ qMemory.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 fheapMemParams.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) oProgram.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