嵌入式开发者社区

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

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

3 g! L( w0 q; e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ C1 \" ?: u3 o- k% p, Z. {1 l

1 K  c# ?3 G; E1 _其他程序段。。。。。  ~5 L# c' b6 v) y. d

; J8 z1 `1 m7 N2 S# e/ |   free(x_d);
. d7 V& i( O4 f; y1 d' t3 E. J1 }; Q0 E. ~0 D( o. {
使用DSP侧单独调试功能,验证动态申请没有问题,& f8 ]( K  [- K9 H1 A' C

, ]4 Y9 s, @7 c; }4 v2 t* m# E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: W  o1 T9 [5 e1 l3 G! E; k  i; T8 W

  O, X# p" w- L' B2 T$ `, t$ ^' x$ s; G
0 h% j! _, X5 e( v5 P
0 j7 t7 ]2 k5 n0 s6 v

# e+ z# f2 I4 V/ [4 `  c
( ~  L2 d! C( {% j; R4 v3 i' s6 D) V: F* G) g
% r  H$ a9 }" W! w+ R- ^( F

. s/ X3 ^* g, |  Q/ n8 a+ a( @+ B" F* N2 U  s, j

作者: tulipyyf    时间: 2015-9-4 10:29
补充说明
- h! K* n: R8 I' C我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( E  ?3 d( Q, R6 A3 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% N5 v% u) K0 z% K) D8 t# r- ~3 v# P- y
) ^& w/ |& g5 U  T) q
是不是需要在DSP.CFG中进行配置
7 i- r' h: h( Y我现在的配置为& X) q: w1 u, m" ^+ c; z
3 n; l3 Z2 X' h( g: L
/*
1 b% m( j% b9 p *  ======== Operating System Configuration ========
& a9 b( F8 P  \; _: F4 C */$ T9 f5 E: g' I, w0 k7 D/ D* q0 n

% h; y, n4 X6 f+ O/* no rts heap */
2 F* z4 \3 c" D! ^( Q1 J  xProgram.heap = 0;
0 W7 z" T9 [/ nProgram.argSize = 100;  /* minimum size */
6 Y0 Y' f' @, pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ l+ U! q7 Z) Y9 g

; q/ q7 L! G7 w3 q5 s  V; T/* create a default heap */% [5 Z& G! W; P7 v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 ~# G5 ?0 h( Q0 E' ?
var heapMemParams = new HeapMem.Params();4 z% q# h% p6 I+ O  k! O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) e+ W- r5 v: j% |
7 R4 g  K' ]) ?0 w0 P, v+ j
var Memory = xdc.useModule('xdc.runtime.Memory');' U, f0 f7 S( k7 d. n. E- K1 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: H% |) V/ J2 s  P7 H7 Q( ?9 E* n% I- S$ r2 o
/* configure System module */+ A! j. ^, h, e7 b3 w+ J5 d
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" }  `' J! T; e, \0 |SysMin.bufSize = 0x1000;1 r0 _2 K8 O: |3 Y( g$ y
SysMin.flushAtExit = false;8 g; ]/ @2 C( J9 F4 n

" N0 C+ m4 g6 P' M8 w- Nvar System = xdc.useModule('xdc.runtime.System');3 t' I  _, \- b% G! T. e
System.SupportProxy = SysMin;
* \! b. r) {8 c2 i* l
9 T* h7 O6 K% P1 G' a! b/* configure SysBios to use the lower half of Timer 1 */1 S' S. R! a. a) c4 n5 S: X! ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 [1 Z; O3 p) ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' b- d, s' |' c' K7 p0 g6 v! ~Timer.timerSettings[1].master = true;
4 H' q+ g( F% z3 S* {1 X5 CTimer.defaultHalf = Timer.Half_LOWER;7 u% c: D# L) G* W) K
Clock.timerId = 1;) q$ Q+ y$ |; H. H2 a
9 g, ~( L! t% [4 `0 |

, ]: v: I. z- @5 p/*
+ s3 b, }$ ^1 p% h( f *  ======== Miscellaneous Configuration ========
; v8 k! ]8 o. R& V! G% h9 u- ~ */; k$ f* n! a# X7 L. _
3 R. X5 [/ h# v7 {
/* set default diags mask */* J0 F& ^% P5 w8 v/ D6 d3 u, a6 ?
var Diags = xdc.useModule('xdc.runtime.Diags');
0 u  B) E1 J$ uvar Defaults = xdc.useModule('xdc.runtime.Defaults');" @1 O  B+ s) R

. O, F( i5 H4 D' O* r: FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 @" x. P! ^$ N: t+ u$ X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* x) S* W* o' ?% c6 b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 b, a' L+ N4 N7 q2 SDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- o: E5 O7 M' S1 p" K3 eDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& h- P/ s$ C: J1 k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ s0 }: s# U3 w0 {! o% o* `- V" R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 C  v/ U4 h: x2 r; o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. m7 @2 K1 M5 t! b
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. q5 `. e( ]9 TDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 O  u' L8 Y2 s) z$ H4 VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' D9 m5 t3 f' _3 V8 u( W( y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, J8 l5 u, o0 h8 Y2 l( t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 l# V& C- ?) V* K1 \Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# I( `& O) x2 I( b# A' K+ t" B5 W, W! K$ w2 {3 M2 Y3 l* A8 a& k
/* override diags mask for selected modules */( m3 Y2 M3 p  s: B& B8 F
xdc.useModule('xdc.runtime.Main');) Z5 p. }5 ]' o' h2 V+ b, W& p
Diags.setMaskMeta(
- }) c* W4 U( k6 F, a    "xdc.runtime.Main",& r& H+ h$ ?6 D
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 d) t( x9 V3 h9 V* e1 f/ X$ D) h0 H* w
    Diags.RUNTIME_ON7 ]0 i" L$ g6 @/ N: b# E0 X
);8 v5 N% s9 K1 \; A8 m

( Q6 E  v3 R) s4 hvar Registry = xdc.useModule('xdc.runtime.Registry');$ |' P& ^* q$ W) _9 L; N
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! s" n) e8 B5 ?' hRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ i$ T" e$ x5 w5 Q/ t8 }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( ^- [; j- ~7 |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- b4 n. L' Q& c1 r: Z6 v+ Z
- R* w; h+ Y) E( T1 O/* create a logger instance */
! f  h; ]3 k: e0 zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 _. `, {$ Y. F' D) T0 `4 Z7 V+ b
var loggerBufP = new LoggerBuf.Params();
3 Q+ V+ J+ s7 L2 ^* `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ y" \0 `9 O4 M0 R7 w. G/ v3 ?loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" ]$ K. g2 a( N. c
4 D: k1 @) E1 x/ ~0 N; Ivar appLogger = LoggerBuf.create(loggerBufP);
2 e* }- }6 e' k: U4 a7 i2 yappLogger.instance.name = "AppLog_Core1";
$ {; q, o8 b( fDefaults.common$.logger = appLogger;1 k) s3 q7 e/ F* b. W
Memory.defaultHeapSize = 0x8192;   
% u2 p- I$ E0 x4 X+ B) ?Idle.idleFxns[0] = "&LEDStatus";
5 q1 c# F* }3 o0 YCache.initSize.l2Size = Cache.L2Size_32K;8 ^' k5 j, ]# ^8 j5 q+ |
! X; e+ X9 G. x0 \4 {3 }8 j

作者: tulipyyf    时间: 2015-9-7 15:38
为什么没人回答呢?   大家都不用动态申请内存方式吗?
作者: teddy    时间: 2015-10-28 09:51
/* create a default heap */  D6 W. @4 M' }% E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 \% w; |6 m( D2 ?8 M; G, wvar heapMemParams = new HeapMem.Params();% U! U- i- K/ t  i2 P% O
heapMemParams.size = 0x4000;
; R$ ^+ `+ Y& E) h! ?0 X8 J8 ~+ f# |) M
var Memory = xdc.useModule('xdc.runtime.Memory');
) Q5 u$ g6 G+ NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* v2 u9 G: \4 G. W- o; ~; S* U
! e3 ]3 J0 j2 z6 Z- g$ h
我大约calloc  每次共计大小为5K*16bits,% R8 F0 B" G  O# Z' c6 p; G6 p9 B
而默认配置才0x4000、需要改大。6 J8 V8 z* n+ a9 K1 }' ?
6 K; V. Z4 }0 ^, R9 R

作者: tulipyyf    时间: 2015-10-28 16:14
/* no rts heap */0 N9 x0 o, `; J7 f8 U1 f, |- ]* {
Program.heap = 0;. a0 Z* t8 C1 c- Q
Program.argSize = 100;  /* minimum size */
5 M' D/ T) _3 l0 F6 lProgram.stack = 0xF000;                   //我改到F000  也不行
作者: teddy    时间: 2015-10-31 20:55
这个问题,我再测试一下,过两天实测后给你答复!




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