嵌入式开发者社区

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

作者: tulipyyf    时间: 2015-9-4 08:33
标题: 关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& }% b! t( F4 q5 \( I

$ w2 X6 r! U: x) a+ m) F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 P7 T1 Q: j; z& W, w

  t" F1 r$ ^+ U, F0 Z& F其他程序段。。。。。
9 n1 t/ D4 t, n+ U
1 R+ o0 A# }9 S2 R0 R   free(x_d);5 {! x0 f, w5 B9 G  E
0 A  ^) {; ?# ~5 d
使用DSP侧单独调试功能,验证动态申请没有问题,
( k% \: p* h: u# }! j5 }; W0 b* ]9 Z; J. Z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 V, ]. H# k; [( f* U
% C+ W2 \8 X) Z  z' s/ m

# v0 L. |5 L  h7 A9 }9 C/ b2 d# X8 ]3 G/ z7 b
! K; A$ }5 f% G, c+ R
$ C1 C+ Q9 t9 T9 i4 Y
9 ^5 @  v! Z6 K0 S1 i0 W4 n9 B) S
. u. {2 ~& o& H4 s6 k

, ~2 d- E! m' b- Z: x& D
4 _, R2 b' b' e( y; ?; C$ M4 P2 u! h' W  e0 y) U& x

作者: tulipyyf    时间: 2015-9-4 10:29
补充说明
3 b. U( b6 S, [5 m* v* @9 E我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 ~! h" f1 n% O* ^; x8 w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 m& x7 k& ]6 O

( |* j- ]$ m9 c是不是需要在DSP.CFG中进行配置- y+ N3 h$ x2 B0 p$ x
我现在的配置为+ _0 t0 K2 `3 E8 x

8 q4 `8 ?/ n6 B6 O! c4 s3 F/*7 V% F4 `% G" O/ l) X
*  ======== Operating System Configuration ========
* g% w/ ~) m3 z( w1 y: q" e */
1 O& i( a% O4 x0 z
$ b6 ~3 e5 b- Q# v# O* r' d/* no rts heap */
9 t6 M& x, G# v( s# D- @% J- mProgram.heap = 0;7 `5 Z( J% M% v: [+ c$ H
Program.argSize = 100;  /* minimum size */
+ B' x' F" B" D7 fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& N8 x2 Y- C5 _  U, u6 q! Q' I

% J; R4 ]' P) Z9 p/* create a default heap */* g9 h- S, G5 G: Z+ S/ j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! a( i% s9 D8 A3 d+ M4 e) B
var heapMemParams = new HeapMem.Params();! k/ q0 d) F" @2 w" V; K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; S: n8 j. s4 d; U" J/ E

5 \' |6 D  Z7 f9 D$ H
var Memory = xdc.useModule('xdc.runtime.Memory');
  G; c8 i) U' P6 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, Q1 r4 S6 Y7 V; D$ O
3 H2 E: W& |+ k& q
/* configure System module */2 M) I' }' A1 b8 J
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 K# K6 Z, q* e7 D6 w2 M3 q/ e; R4 R
SysMin.bufSize = 0x1000;
( n' ?- }9 d2 S0 H2 K% I( M. JSysMin.flushAtExit = false;
6 Z6 I# C2 [9 @; W' p
3 m; x( t0 {' ~* Svar System = xdc.useModule('xdc.runtime.System');, Z$ p1 V( M; N* `, ?$ s
System.SupportProxy = SysMin;
9 M5 R6 N' t4 o% K% Q6 S# {' x; Q% E, D  e5 d$ B
/* configure SysBios to use the lower half of Timer 1 */
% K  |& Q" Z6 R8 D) \9 Z* l+ h/ qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ l) s, t6 H, F2 m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; [% k5 M5 |! @Timer.timerSettings[1].master = true;
1 d7 M7 B# S( z3 `8 ]& M( H7 ]* y4 tTimer.defaultHalf = Timer.Half_LOWER;6 Z& L6 N- g0 L
Clock.timerId = 1;. W, W0 \) N0 W$ R0 y
' C8 S* Q# J% [; h
! h1 p  W, b& G! k
/*
  S9 m6 \4 q& m* H! k) b: k *  ======== Miscellaneous Configuration ========
$ f% J7 J5 @% v& ] */' y: L9 ?/ }+ l7 Y
0 L+ Y3 s! f, W" I: [
/* set default diags mask */: k; Y8 n1 I' e. i
var Diags = xdc.useModule('xdc.runtime.Diags');- z) o( G5 k# V( O) Z$ Q4 K2 O9 t0 ]
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. b; O. T; ?% E3 u8 P1 j# S" X: X, w& J
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# q) ^+ R2 R$ Q; w2 e. e, t# jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ {& P! ^2 G% L5 N1 E) P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 s5 Q+ A. q) [+ B8 ~1 p9 M* ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( C; T: k4 L/ M# X+ zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% ~; R: E3 n( W- I. j% b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 @0 w! h' `! |9 D0 ]. }  I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% e9 \6 j3 W4 S% G7 j4 x
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 Y3 ]/ Y: t: F$ _/ {' L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 t; J7 D2 U3 p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) E+ L2 t0 S. L9 m/ D1 WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* }  z5 {, X5 w) e/ p. f; M, YDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 M! J- l1 v7 q6 R5 D9 Q" w- [Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 o/ o: t" S3 c! WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- {. @7 u6 g9 y1 H

6 X7 s$ ]3 i; I8 ~/* override diags mask for selected modules */
. e. m! ]% }. A& o* j- z! ~- }% R* kxdc.useModule('xdc.runtime.Main');
( }# W1 L! r& G  ]+ s% p* O: ^Diags.setMaskMeta(+ B% z6 D1 N( {
    "xdc.runtime.Main",
: r1 g, G9 `# F  q) k' o    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  l$ z6 B+ k. _! r5 V    Diags.RUNTIME_ON2 K( j3 E4 K8 I8 a# }( |: q
);
" G' J( p, G! c- _2 ~! y8 n$ G4 A$ n: ~0 B) G! q
var Registry = xdc.useModule('xdc.runtime.Registry');
2 U2 e& m, M8 @4 a! hRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 U; |8 S$ N% p( `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 N% K8 O: \, r2 q  ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 q2 i1 U6 [6 T5 o1 VRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" G" ?' q7 t% E
2 w1 i& G3 A4 ?0 Y. z% j/* create a logger instance */9 |& p0 n# `4 w0 K; h7 ?' ?# e2 j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% ]. y8 J6 }' R: U0 G9 B: t
var loggerBufP = new LoggerBuf.Params();2 t/ B  m5 y5 ?1 l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 v+ e: }& e; Y. E$ \7 X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* d$ V0 _& B' h  q6 p2 {
! e3 I: L/ w1 K8 r: s" r- H. zvar appLogger = LoggerBuf.create(loggerBufP);
7 c0 a6 D; N6 r3 N- M+ h% GappLogger.instance.name = "AppLog_Core1";( V( [8 m2 b& x0 @8 D$ G
Defaults.common$.logger = appLogger;+ o, G, F# [* u2 Z( i
Memory.defaultHeapSize = 0x8192;   
9 r' A3 t6 s. C# K( s5 ~3 l; B7 B+ DIdle.idleFxns[0] = "&LEDStatus";
( p/ ?  I8 H. JCache.initSize.l2Size = Cache.L2Size_32K;
: }& O9 i& O& ~* v2 m: X0 G' R) N/ {7 s7 m) L$ d! J

作者: tulipyyf    时间: 2015-9-7 15:38
为什么没人回答呢?   大家都不用动态申请内存方式吗?
作者: teddy    时间: 2015-10-28 09:51
/* create a default heap */
: A! W. K; E8 h: R8 _6 s5 j5 qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 |: `2 C- u2 @6 ?1 mvar heapMemParams = new HeapMem.Params();
2 L) L( }/ C. f4 _heapMemParams.size = 0x4000;
) D8 D0 N  n: G9 G' G
2 @) [# W& F# A. ^) Q' |var Memory = xdc.useModule('xdc.runtime.Memory');+ s6 `0 n1 e$ c0 }3 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ g- m8 s6 [' ?; R9 ~/ V3 {. |6 [
我大约calloc  每次共计大小为5K*16bits,
" @( m" `3 D, Q$ A1 P而默认配置才0x4000、需要改大。
3 N+ N/ C% K2 G6 K6 A8 Q; Q0 E  s
; ]( S& ~$ [( g: ]% E1 b6 b4 n% b
作者: tulipyyf    时间: 2015-10-28 16:14
/* no rts heap */: m; ?. X" B* `# V! Z/ S
Program.heap = 0;
$ q. {" H4 t( `Program.argSize = 100;  /* minimum size */
* {1 R+ w9 H. A1 l3 r2 F9 OProgram.stack = 0xF000;                   //我改到F000  也不行
作者: teddy    时间: 2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!




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