嵌入式开发者社区

标题: 关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 [打印本页]

作者: tulipyyf    时间: 2015-9-4 08:33
标题: 关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 ^1 v) b' i' x! _7 U- l) ?" Z9 M* x1 B% l: A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 k2 q' D* L, [1 p6 u
& j$ T% l# K$ ^其他程序段。。。。。% C! @, d: n2 s6 Z/ E
1 R. t8 F) |) S  F2 J
   free(x_d);. P/ z6 `: C2 T) V# Z

3 r% O- g; S! g- b# H' X使用DSP侧单独调试功能,验证动态申请没有问题,; S3 z& f1 `$ R; C& C- {4 N, l
5 L' U8 e, ^. ~# q6 J- b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: \6 M6 N+ }5 ^7 }* b- Y

& X+ D/ G2 ~9 n( t4 h) K- }7 P$ Q' R

) I+ m6 a1 h$ c# L" P/ Y3 X
5 W2 f' F# t5 @+ e; Y7 W
) M! R& i6 M/ V/ `2 ]6 N- _" F! [9 }9 l* @. X. @! C. k

! @4 A& K+ W6 x9 ~5 h' ]$ t1 H
- B" ^5 ]& [( V" F5 Y3 K+ b
$ o) y% A. O% g4 _8 ]% g1 A8 D
8 M! `) y1 v2 l1 @6 P
作者: tulipyyf    时间: 2015-9-4 10:29
补充说明
2 X6 M3 y  P3 ?( ^3 |% G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* D) j" Y6 y8 F' b: I; s: o! r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 |; L5 b* r. V0 E  m$ k: l( F: @# J! e

$ U5 J* b1 E- d5 p8 f是不是需要在DSP.CFG中进行配置
$ t' U: e% `$ o8 |  ]" `. `  Q我现在的配置为0 m9 S& I( g9 `! X/ ]# i: v
4 T6 [# j0 ?* B# f  p3 R/ x: L
/*
7 l/ ~' w3 f5 O$ T *  ======== Operating System Configuration ========9 @+ m5 z, s  s1 A+ W8 s# n7 L6 ~
*/
/ B( `* y: Q8 S$ ]
1 }* S& q/ Z( i) [' B0 n; h) X/* no rts heap */. h- ^# D2 W* `+ k0 a
Program.heap = 0;
: v' C4 T; _7 t1 U2 ^Program.argSize = 100;  /* minimum size */
$ }* Q8 b- f9 d* V0 V: i8 u4 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% p# l/ f& S3 L  h
0 k. w0 i! [2 }9 O
/* create a default heap */; E- g- m! X4 y5 J. e. q. K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ c" z8 f3 G% U* b; m4 tvar heapMemParams = new HeapMem.Params();+ y6 }4 n; S7 ^- }! A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, q5 E& x' T+ j" X+ C
8 b& E* c6 O" q7 k# @7 z
var Memory = xdc.useModule('xdc.runtime.Memory');
; C- Z  N6 W$ l" }3 Z! FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 D) X  Q, A4 V. Y' e
5 n" u2 |" S5 Y( F8 G/ J/* configure System module */' b/ f1 j7 V+ ]. q7 P0 r# R
var SysMin = xdc.useModule('xdc.runtime.SysMin');) @5 j: k& |* R2 U% S  j( i5 }
SysMin.bufSize = 0x1000;
0 k6 c4 y+ v! a& V" ASysMin.flushAtExit = false;
) D! |: }7 b  A! v( Q3 ]8 Z0 z  r' |9 A
var System = xdc.useModule('xdc.runtime.System');1 k3 V( y- S# }+ `
System.SupportProxy = SysMin;) U% ~" o9 M  E+ w3 n6 [; z

% l) ?' }& A. ?# D) d/* configure SysBios to use the lower half of Timer 1 */
7 e  u* \) @( A1 z3 c, |- l5 Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  x1 k1 h3 o* a+ k1 q6 a" vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');. M: c4 X3 X/ Y9 {9 P( ]! \
Timer.timerSettings[1].master = true;1 W7 V4 O( W) K8 e0 |# D! \
Timer.defaultHalf = Timer.Half_LOWER;6 s0 E* B2 {( b$ v# Y  D
Clock.timerId = 1;
. }5 p8 q* e5 q( }% w" b: R, h
  y0 e. S/ l% ]/ S& }0 P2 x4 T. g  X# Z
/*
0 h) u+ [0 `) H- x8 { *  ======== Miscellaneous Configuration ========
( J, B- U# |7 N */
; m. n! \+ ?2 k* }# q* {) L
5 O  ^0 |* s7 m' A8 T/* set default diags mask */' `0 a# G: J2 B8 n; w6 O
var Diags = xdc.useModule('xdc.runtime.Diags');& N. M9 ?, t5 C* I0 N2 A( B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ {7 f2 C% w! [# H/ L2 D# j8 V! n' m- y2 r
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& N( Q+ x* k. p2 B; h1 ^+ l
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: U7 j& _% p. v' A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& z: q' y- B; j& Q9 l
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( O: }# l2 ]* F9 J5 N$ m. ]
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! d% \: S2 c' A* ^! J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ [; N/ a) r$ C' ?* n+ hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 y7 S6 f* y: \
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; {2 H1 Z) x+ Z! H8 t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 s5 S! a9 @$ ]- l# r3 O: A7 N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% G* Y3 U' C9 K7 S! uDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! H( B4 s0 h$ E# U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) D1 p  q5 {2 @- p# m. `* I* \3 {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* S  Q3 W; h; {. w) S- L+ DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! G5 r# ?7 A/ T, w5 i5 S' x
# i) l0 i* Q' C4 V1 D8 {3 {
/* override diags mask for selected modules */6 B  {/ L' ^  O1 X3 @
xdc.useModule('xdc.runtime.Main');+ i. A: B7 q0 e0 h% L6 t. f
Diags.setMaskMeta(' u. Z3 k' n! \7 i
    "xdc.runtime.Main",1 U  Y5 i5 g" R2 y9 w- Q& S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 F* M3 j3 s/ G3 _( X    Diags.RUNTIME_ON2 M2 Q6 \: I5 v8 N& S3 x. e
);) b: D0 Q. w! A' ]6 m0 `+ g
4 v, P3 P& ?; h, m' a
var Registry = xdc.useModule('xdc.runtime.Registry');
* K. w; l0 O: F- J" g8 l9 {Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 ~, G( m( Z# U4 a1 S& [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! `/ x; ^1 c' N0 G. R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 x4 |# A6 W2 x5 ~; [( XRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 S1 @; i( K4 i2 z& ^# K/ r) p6 T
, T# B7 V& i! A5 y* R; U8 n/ ^( W/* create a logger instance */6 e$ f7 `2 o2 N" h; K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 R# t6 x$ @5 d5 Z% j7 G3 d
var loggerBufP = new LoggerBuf.Params();
/ B$ [% u! O0 f2 B) aloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ i  X, C8 J, h8 _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;! q) d0 P6 O1 c. e6 c" t+ N9 O8 l: z

% [- x, h2 H% N3 P/ T- ?" \var appLogger = LoggerBuf.create(loggerBufP);
9 k' J0 F9 y7 B" D4 _" KappLogger.instance.name = "AppLog_Core1";9 p. K$ U8 X0 F+ |3 ?1 f$ E
Defaults.common$.logger = appLogger;
. a) u5 x/ X3 ~Memory.defaultHeapSize = 0x8192;   
8 @4 X$ c( m+ k6 D" Y( oIdle.idleFxns[0] = "&LEDStatus";6 K# b/ M; o' c; N
Cache.initSize.l2Size = Cache.L2Size_32K;6 _2 f/ Y4 _; f' y

  p% d% q; B; b1 D# z

作者: tulipyyf    时间: 2015-9-7 15:38
为什么没人回答呢?   大家都不用动态申请内存方式吗?
作者: teddy    时间: 2015-10-28 09:51
/* create a default heap */: m9 _% l$ h4 B* e, z6 d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) v+ q1 O: S5 ?' T0 o5 B1 Pvar heapMemParams = new HeapMem.Params();. j. h5 y( x. J8 V# d- G( V# Q8 ]
heapMemParams.size = 0x4000;
5 G' k5 a5 R7 Z2 V$ v  s' E6 t- Q5 D% z9 W
var Memory = xdc.useModule('xdc.runtime.Memory');9 Y- r/ l( n8 Y2 Z2 G' e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* [. \2 I) K( c3 X, H4 K

; V( x9 n  i$ |' C0 |( o我大约calloc  每次共计大小为5K*16bits,$ p" y2 i9 S( i7 e
而默认配置才0x4000、需要改大。7 ^) I7 |2 P( s6 T5 e: W1 g0 p+ p
3 k' {9 S" d6 \3 H/ M

作者: tulipyyf    时间: 2015-10-28 16:14
/* no rts heap */1 G* a- k4 e; [- L
Program.heap = 0;& b, M/ F. {; R) p- x
Program.argSize = 100;  /* minimum size */
) y# O* }/ u( Q3 H8 a( KProgram.stack = 0xF000;                   //我改到F000  也不行
作者: teddy    时间: 2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4