关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6374|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' A8 }: M7 ~5 |( L$ C) ?( `

/ o! [) F& }% d. p, H4 N& w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) \1 t9 S) k- ~* K0 q* y( s. n$ y0 k3 _6 c
其他程序段。。。。。
% e* o! \$ |& P/ z& J+ _  t' ? 2 ?9 P9 W, \; ?$ D! a0 x9 q9 G
   free(x_d);: D- l7 x: V$ i

/ D: e3 J+ u9 Q. A) t8 D" z2 Y3 y; E6 p0 R使用DSP侧单独调试功能,验证动态申请没有问题,
; c) O7 k1 @  U9 O6 Y+ M, f
5 Z5 C4 x# B  v/ {/ r: E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: f  L/ e0 A2 J# Y0 J' x! x

& b) M$ a7 q( @: S
& S" }/ f) G# `0 P( T, n& W! v# ]4 v5 M1 b6 O

" t  I& b, O, E7 u  X; [$ ~
4 O! f4 g% m. N: B  x6 _
! ~5 f: ?2 g2 r, `! r: `; \. [' s
* k) B0 m( _$ Q& n
9 ]" G; v$ L; Q3 _5 E9 d# \% Z- }- y& F0 ]2 K

3 Z# p, a. {  u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 o; G2 l, q3 V; P8 _$ ]6 c
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' j8 `' P  V7 S0 \* j/ c' v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), g$ S1 W6 A: z" r

4 P. G. r. g  w7 a& x* b' o是不是需要在DSP.CFG中进行配置: X* p* m7 o- H* H+ I
我现在的配置为+ e* P1 [/ x$ }! V) Y
3 ?7 C* Q+ G6 F. r$ M% W
/*7 g2 H, E% Y7 ^3 U2 o( v* P. r
*  ======== Operating System Configuration ========; _3 b9 A  }0 n2 R$ e* a
*/
, k. ]# Y/ V) ]8 o
$ |& G& L5 }* M! ^5 q2 H+ p/* no rts heap */
9 p. M0 }0 z  j1 ?1 A1 GProgram.heap = 0;* k: S6 X# g6 {$ X5 R
Program.argSize = 100;  /* minimum size */) [, u/ U, g  {8 W( p- d. y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 g0 _+ N, u* s: l' f0 \& l( H

/ B- e$ n( O/ Z3 o/* create a default heap */
! A! _# T6 \# b1 ]- \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) g/ @$ @1 T, ?7 {, Z6 Nvar heapMemParams = new HeapMem.Params();6 j" r' }2 a) R# b. }% u* w( ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! h9 d3 I2 G+ E8 }) R* _% K$ Z, X
. D0 D+ I5 }7 h( x8 ~
var Memory = xdc.useModule('xdc.runtime.Memory');
( t4 g) d5 O' ^  cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 I  }3 h- i' P- V/ D
' h2 d  U9 `# S) q) _/ r% I
/* configure System module */
6 b! ?) @9 d: a; Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 I: b; |* U4 Z' uSysMin.bufSize = 0x1000;
. Y( ^8 c+ O. D# C9 T% X3 ZSysMin.flushAtExit = false;+ U/ P7 ?' K# b

5 l+ A4 \9 e) [var System = xdc.useModule('xdc.runtime.System');
7 y7 \0 k: l/ [4 ^System.SupportProxy = SysMin;" s9 x; p6 r8 Y- H; ?. w" k

+ Z1 A( T  ^5 v- k, v( J/* configure SysBios to use the lower half of Timer 1 */
, k5 U4 n2 O9 k+ ^  ]& e# n  N& N; Rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: \3 _. x  D# r, D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: F/ m. P+ N: `& H  J
Timer.timerSettings[1].master = true;
) J0 ]: [" V6 S7 vTimer.defaultHalf = Timer.Half_LOWER;# a# i' ]) K" q
Clock.timerId = 1;& [9 t4 V/ u+ F
, l/ \2 ^( L% H# {' \- R' R
0 J  v4 a5 Z( j9 z7 E" e
/*
* D0 Q; |. K: B *  ======== Miscellaneous Configuration ========
# p* \+ m; l  D6 V */
$ V- p% C/ ?- A/ F& z0 a( a1 Z: G+ K/ l1 \# Z4 v% L: T3 }
/* set default diags mask */3 R4 Y, d- d2 u. k9 ^
var Diags = xdc.useModule('xdc.runtime.Diags');/ R: \/ ]6 x7 Y* b
var Defaults = xdc.useModule('xdc.runtime.Defaults');  G0 a, ]% @" [6 i

- f! l6 Z' e/ x9 f/ H, HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  o* [+ C/ L% y, G' ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  n4 e: Z* A) ]$ Q6 B6 s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 l0 C$ w* R) l) U& DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 F) l9 |& K2 y( A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" c2 Y- x3 `: |" }1 R! ZDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ O: v5 O" r, U  g8 u! X* w( q: b. e
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' j  h: Y/ N1 K/ A0 c) V; i
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. h3 W- G6 g7 q; A
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ ]) a# p, L; I4 y. QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& q2 ^) _8 O% v* \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 [' a0 G8 ^7 eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( X4 }7 g' H/ z- W7 v8 @, L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 [3 L$ {* `5 ~! X/ B$ N$ O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 n& o7 |1 J/ g6 O5 Z6 h; q% T" p
1 R- ?3 b2 s, f' `3 h4 l
/* override diags mask for selected modules */: P/ B2 b7 n/ Q4 ^
xdc.useModule('xdc.runtime.Main');" q7 u' @& s. [! Y
Diags.setMaskMeta(
# }8 \: B5 n% J& T& m6 X- f    "xdc.runtime.Main",
2 N5 c/ y# {) s, o: p( S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' ?8 j1 F9 p$ Z' `# d; [+ \    Diags.RUNTIME_ON
4 B6 k2 l4 v$ N% y) s- b);
5 U4 c1 X6 I8 b% @- q
# a. L; Z- i& \3 P) I5 j$ Ivar Registry = xdc.useModule('xdc.runtime.Registry');
% T2 {" H$ O9 _3 [/ j2 A: DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" R6 }# e: v8 _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- k: R# ?! f  `' oRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' Y( U) Z. }* `0 T8 ~Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 g8 S# M7 b! E( m5 T/ K
; a3 A9 t+ D" T, ^( K
/* create a logger instance */
% u0 D5 G5 J6 a8 Wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 r& p" d9 r7 ^- @8 F$ W, qvar loggerBufP = new LoggerBuf.Params();
! t/ H8 {- [# J0 kloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 w2 W. u8 a! g7 s, a  v
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. w, z5 `1 {) E: l" }; \

3 K: {% U# n! xvar appLogger = LoggerBuf.create(loggerBufP);8 l# i9 S3 G4 j
appLogger.instance.name = "AppLog_Core1";
: B& G9 J4 g) j8 [: v1 R* jDefaults.common$.logger = appLogger;5 X# a9 v9 M/ g( v$ o
Memory.defaultHeapSize = 0x8192;   
7 I$ ~& F) S& K( RIdle.idleFxns[0] = "&LEDStatus";
, ?$ H* V1 b$ R8 E% a3 ACache.initSize.l2Size = Cache.L2Size_32K;$ U0 {& S  g' }3 j. u. C( l
( Y& ^: C3 A: t
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
4 ?1 l" h5 a/ V: C" svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: p( ^+ b# n/ Q) D. _
var heapMemParams = new HeapMem.Params();
2 }- d+ o3 B0 h7 }heapMemParams.size = 0x4000;8 v- \, v/ X7 J3 J) }5 G( D

" x. q. Y: v5 X8 Svar Memory = xdc.useModule('xdc.runtime.Memory');
  a) Q. H5 b- CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 T* S& r; _$ q

, T+ k: G* L) q9 z5 m) [我大约calloc  每次共计大小为5K*16bits,
. o# Y9 R0 X. d3 x" u而默认配置才0x4000、需要改大。+ O: `% x: N' U

4 U1 k) X- U7 N1 p9 U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' m& n% R; H# J+ {5 t% s
Program.heap = 0;
$ e$ O* }. A  J1 P5 BProgram.argSize = 100;  /* minimum size *// k' J+ y, K2 X& I
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-7-4 11:51 , Processed in 0.039919 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表