嵌入式开发者社区

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

作者: tulipyyf    时间: 2015-9-4 08:33
标题: 关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 l2 x- @( P; I5 h0 H% `: R
3 A9 t" K3 K2 Y/ m% R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; Q2 |* M* ?9 `$ r* m
0 ?' Z/ f8 U6 S0 l# S- H3 {其他程序段。。。。。2 d3 a$ x: r5 N" o" J, ?. m
: s2 Y) T* ?1 M4 J+ C
   free(x_d);
) S# ?+ ]+ m( _# b3 `" J! E
: ~" q* @& F5 ^0 C7 r3 V& t% d使用DSP侧单独调试功能,验证动态申请没有问题,
1 P* X+ |% }" I. Q( k2 T
8 H2 [" D2 O3 y9 h7 H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! M$ Z7 W& U* |2 V0 a: [* Q

, Z# b3 g  G0 D5 X7 [
& G! `8 O! a! T3 \1 A7 |8 X
6 D( ~5 A' `3 N2 M
/ n: ~; ^8 C6 z
' s3 T9 W9 ^, f; s9 L0 ]# G+ Q8 q8 g, \1 V% O9 {% ~2 A2 _

7 M$ K# C( @9 k4 U0 d/ e7 \/ r
8 Z  }7 ~7 O) S3 ]. _% X7 z  v
1 b' M- {" t* P* F3 j$ Z# w: X1 r* Y/ ~* p4 |5 Y

作者: tulipyyf    时间: 2015-9-4 10:29
补充说明
) b0 I8 Q1 ]/ t9 s( R) m! E8 T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% d$ B3 w; }. J% @7 B6 o6 h5 F6 m3 A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; U) C1 f# t7 \+ e

/ K8 O5 G( L, z( U( a  [是不是需要在DSP.CFG中进行配置* _# l- I! F1 L/ W
我现在的配置为
' T, N. S) O- X# m" j8 a* P" C- q  o. I( F3 R" P9 C3 h
/*
* S2 X3 I+ Q- a+ |0 D* w7 W1 R *  ======== Operating System Configuration ========
1 _1 X# E3 H! F, N; h7 B */+ W7 M$ t/ ?! n0 {4 `
3 ~& K, r' J2 b
/* no rts heap */
& X3 r) N$ }, qProgram.heap = 0;" I) u, g8 W$ F3 e# n) J
Program.argSize = 100;  /* minimum size */* }" {( t0 ~& @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 W! P- l  G# L, c' s
9 t$ n' X) z$ h/* create a default heap *// O" Z" u2 U- H) F; Y0 U1 q/ j* J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- B3 B* m" W2 \/ [
var heapMemParams = new HeapMem.Params();8 m( A/ ^! t6 i  y. V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 f; L- ~, [% l

+ |. E" p+ o6 z4 n4 u: E9 y
var Memory = xdc.useModule('xdc.runtime.Memory');
0 k! {. k5 }; F. i/ rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; w5 k4 w( {* i8 T, y9 V$ F* {+ P, T8 F* D: P, J
/* configure System module */
5 h9 Z; t: m+ jvar SysMin = xdc.useModule('xdc.runtime.SysMin');( `; {4 p! @5 D6 O: r7 X
SysMin.bufSize = 0x1000;* a: ^- u# R' s4 C% w
SysMin.flushAtExit = false;
) ~6 c4 M7 Y; o5 |: ]& e
) }0 V# T1 [) O2 o8 S. V# S2 _var System = xdc.useModule('xdc.runtime.System');5 [5 T3 P6 Y" t6 p: A: K' E5 U  q
System.SupportProxy = SysMin;' V4 U. W7 z  K% D6 u' U$ ^
& N# t7 T& f5 O# A; k8 l
/* configure SysBios to use the lower half of Timer 1 */# v- ~. o5 K1 q0 W% r$ s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( c1 n- K; E+ ~: H9 {% a% _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 I! {7 n, G8 RTimer.timerSettings[1].master = true;% z' x+ Q$ w- G: L2 u" }- ?
Timer.defaultHalf = Timer.Half_LOWER;. g* Y; I" D" _8 Z  f6 ?, P
Clock.timerId = 1;5 f0 V: }/ `+ r
, r1 S/ R4 |( W  u" x: m" Y& r

/ b7 g. \+ [- a& ]8 t/*
/ M2 `; K0 R( g% s: D5 d5 w. v *  ======== Miscellaneous Configuration ========
/ N6 D& ^7 T' E */
9 p  @* v/ k; {0 F: Y8 x& y9 z6 y( V/ [% G# e" ^& l' g
/* set default diags mask */
- ]: c: L7 h3 @4 i+ pvar Diags = xdc.useModule('xdc.runtime.Diags');0 R! S! j. |. k6 W2 O* m! K) F. Y: B
var Defaults = xdc.useModule('xdc.runtime.Defaults');; L( X' K  P  f' J' G5 E. Y

$ |1 u( C8 J2 Y8 R* x0 gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 L) T) c$ L+ ^% t6 vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! J0 c# l$ z# [! UDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, A" k' I5 V+ {1 `! G, N
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; X$ C/ T4 T7 _' k+ ~0 Z3 m3 M/ r9 ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 V* ~2 n! p4 X' Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* f4 K7 j4 w1 r! T# z2 s0 P0 a9 kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 T& F% ^; P" m" q0 ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 V! G9 |( T  l" E4 `" G8 JDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# X  A) N7 F& \) \Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 h2 X( U% h5 jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, H6 o: P3 s  r* T
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( J. W# _8 L/ D3 \2 w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 b; \! _* S7 g, @& BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 R* ~( u5 d) Y% _/ |

( R5 |7 m2 x  v/* override diags mask for selected modules */
, L* C: r, d9 [. l6 I% dxdc.useModule('xdc.runtime.Main');
9 K7 I( @3 H: }- k& B2 @Diags.setMaskMeta(
  v5 _4 g( @, p' y4 D& M    "xdc.runtime.Main",
8 R# p' o$ _! [  l    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: M/ F' I% ]7 v    Diags.RUNTIME_ON" _2 g5 v+ c9 G: D* L2 j
);
7 w: A  d! L- d0 F; u% i* u
: V2 ~: I- [5 s3 r% m3 p! e' z' gvar Registry = xdc.useModule('xdc.runtime.Registry');
. X8 d8 ^) |1 WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& p" y2 k: M8 u1 ]
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 _9 _- Z8 ~0 `  j' t- d. VRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. ?7 P& F) H6 n" G1 O; L6 E0 gRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  z0 B! d: ]1 c. H$ b! S8 n; z; |$ z3 ?8 s3 }8 y% {
/* create a logger instance */" d( Z% y9 t2 l6 V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ j0 s8 C! }# z- s& wvar loggerBufP = new LoggerBuf.Params();( G: B: W0 N9 j4 Z8 Z+ `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ J* C( M& N4 VloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ l' ]. |3 T$ I3 d
3 y! i' Z  q- P8 u" v: |var appLogger = LoggerBuf.create(loggerBufP);( b  `% q0 b) p& G! j3 Q" T; v. ^- ]
appLogger.instance.name = "AppLog_Core1";
$ g7 e4 G" A" nDefaults.common$.logger = appLogger;
, R& q; F8 `2 C1 W; \Memory.defaultHeapSize = 0x8192;   
' j' N% n2 {! Y% \" f6 @2 E, EIdle.idleFxns[0] = "&LEDStatus";
! f* l4 n5 x1 X" J9 V* _! sCache.initSize.l2Size = Cache.L2Size_32K;; m2 }; L+ r4 Z8 a
* l: E9 J* U! d

作者: tulipyyf    时间: 2015-9-7 15:38
为什么没人回答呢?   大家都不用动态申请内存方式吗?
作者: teddy    时间: 2015-10-28 09:51
/* create a default heap */2 m  s! y3 H) g+ f" E& G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- F8 b" k( y3 h! jvar heapMemParams = new HeapMem.Params();+ L; R# s, [& Z# ?
heapMemParams.size = 0x4000;
9 B2 u! O4 a" V( P5 I
  `( _6 P$ U% M# \/ z4 A" S  U/ a0 [var Memory = xdc.useModule('xdc.runtime.Memory');
7 F$ F# X- j- t# T, e7 `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 U- n. a$ Z/ h1 G1 q! o+ H$ Z8 G( c( L; N) b* K8 Y
我大约calloc  每次共计大小为5K*16bits,0 g  U7 S; P% h
而默认配置才0x4000、需要改大。
* F0 u. F* S# T, f
1 ?6 |% e1 v' r" e+ O) ]+ b: u- A1 N
作者: tulipyyf    时间: 2015-10-28 16:14
/* no rts heap */; Q9 a. `9 G! i6 t# h; o- W
Program.heap = 0;
7 C% Q' b; ^+ v3 N  ]5 VProgram.argSize = 100;  /* minimum size */
$ d- h9 {, C5 eProgram.stack = 0xF000;                   //我改到F000  也不行
作者: teddy    时间: 2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!




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