关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' h5 f% ~; F' j! B6 S' b* L# M/ K1 U  q* U' X, M; T5 c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ ]% S) ?6 n: N2 C! S' Z3 x( z4 O1 K
5 t; R4 x( Q5 }6 ]5 C其他程序段。。。。。% P( q* Q2 w# H! P

7 S) U4 o- L" w* @' }   free(x_d);
: `* S1 T4 O# y* S: t
! s( x/ }9 j& I  C使用DSP侧单独调试功能,验证动态申请没有问题,
. Q0 @. y  I. I) ?: [
* }, S# m9 d1 a0 j但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 j, C3 N1 X0 e# r( u" [% s5 z7 d

" d1 _" I; W3 |) @$ L5 _# S8 Z/ F# S0 Z  k

$ x+ ?2 v% ]5 ^& R* P$ M3 X# @: H6 A. t* y
. B& E' n: v# w5 S( b; E' X

, f5 Q" @8 }, }3 i, A/ C8 G( J- s7 W# N

) G0 ^8 a: `4 U6 l
4 m/ u2 b/ Q- S; f' c/ b
( z. i3 [! O( N6 \/ E( V) n% L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 d( S) Z6 r. F$ F( T. M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 Y! L: U/ Z8 Z, n8 D3 |' f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 v: B8 b9 Q$ I

5 }, N; o# r  [: t, }是不是需要在DSP.CFG中进行配置3 d2 T( c# l% M$ l, z1 }
我现在的配置为
, U8 z' p7 h  j1 J: ]3 h3 t4 `6 W# x- F" v6 a) n' s* b
/*) V* Y5 o; y2 B6 _! Z
*  ======== Operating System Configuration ========; ?8 [/ L& q/ e! n) @# E. _% N$ c8 \3 V
*/
* X7 w( N8 q6 U  T
  p" [1 z; u9 H2 T' w4 g/* no rts heap */
, w* x' _6 _. D5 j( HProgram.heap = 0;
, U! y" Y+ f& ^7 U0 j5 WProgram.argSize = 100;  /* minimum size */) y: M/ N9 D* K- T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 b0 Z0 z2 O9 H1 w( @
. d7 M0 d/ D4 y, o
/* create a default heap */8 n# A* d* H3 a$ O5 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 U: j9 Y! b& _" svar heapMemParams = new HeapMem.Params();+ K5 d( Y" j( b0 T6 q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& M/ p  E- H9 h8 a6 P; K* ]
0 j) X6 G$ A% {3 V1 ?. }! t2 P4 o
var Memory = xdc.useModule('xdc.runtime.Memory');9 @4 G" i2 h. V5 {/ X4 j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- ~6 |* s" j% m7 X, L, M( e
3 ^( L& K: X1 q7 y+ i3 X
/* configure System module */( K! z- W; \* T7 [
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ F* W  U& b9 w! v2 t; YSysMin.bufSize = 0x1000;
& F: F: N6 m/ _4 E, g# \& N7 NSysMin.flushAtExit = false;' Y. `3 d3 W" m6 A9 z

- V2 ?. z; o- z  s. i' kvar System = xdc.useModule('xdc.runtime.System');
) {' d5 \+ m/ O  DSystem.SupportProxy = SysMin;
: L' W. c. f, ]3 s, v# e+ `6 Y9 _5 C' ~% F/ A
/* configure SysBios to use the lower half of Timer 1 */: R: i) ~. h- X. R( @& d8 Q, p6 v
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% r# f( B0 K* r; Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 E+ S# |$ W1 k% ATimer.timerSettings[1].master = true;- l) `* J( g- L; ~- s3 E! Y% @
Timer.defaultHalf = Timer.Half_LOWER;
1 ?; l+ ^3 B# T( zClock.timerId = 1;
7 g( f8 v, P8 X8 g3 R2 \! w) P1 e: S' }
8 V1 [( U+ ?: n5 |# }' p
/*6 b, e2 g+ i& V3 v) q
*  ======== Miscellaneous Configuration ========
# y3 u8 a# L$ q  J/ B* {9 w */
3 M, p& W( |( q: I6 K* H+ S( p' O3 L9 A
/* set default diags mask */( e5 @' C: p" D/ K; e  f  ]
var Diags = xdc.useModule('xdc.runtime.Diags');' D! H$ x* w! L. v1 u
var Defaults = xdc.useModule('xdc.runtime.Defaults');# E7 x) Y; H9 p: i, S; e
/ |. [9 o* Z4 `5 E3 v$ G+ G
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* Z, |( }: j- T9 L. ^. _3 vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" }& {$ ^2 k# q8 U  i5 ?6 xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; F* g+ H! k- h" E* l5 M/ ?/ x* g$ T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 x# j2 B4 g0 Q3 N& C- \! G0 q' t
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 B' }2 _! i' N8 O" M6 ^. {  L
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 j; O9 u. @% ^" v4 C4 KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% I* F: F4 o& A: h; Q8 V+ t
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& r- ^( f3 O4 m2 G$ R( t2 V6 U8 j! O( @Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: y  `) v6 P% c0 z+ d
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 @5 I. X# v) X( P/ I/ QDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* s- }2 L$ f+ G# H- ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- ]/ h' f6 U" o5 d! J7 g* ~; O7 BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( c4 }6 M: Z/ f5 T2 I
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 U2 B2 H+ Z" l
  i/ e! M: D% v( o9 l6 z2 b
/* override diags mask for selected modules *// `! K, z( S1 p) ]: ]- r
xdc.useModule('xdc.runtime.Main');
/ {0 C) m) H  x9 ]0 kDiags.setMaskMeta(
) f& C! h! _6 f( N    "xdc.runtime.Main",( G: }" {8 P' f' v
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" {  T4 ]0 W# A0 z" A" I    Diags.RUNTIME_ON8 T/ k/ @% k' ]  [* s) L: J
);
9 }7 c3 _5 X1 @# M, ?
& i4 F' j  |4 \var Registry = xdc.useModule('xdc.runtime.Registry');
  M) g3 ^* b9 `& Y" dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# `/ _2 w9 Z0 g2 t" a3 M, J
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% H, H; c( s" O; \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: O" J3 v0 P5 D) T/ ^8 r2 qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 Z  V. }4 H" t4 S  B  p' n" c
( ^; N1 @1 u; q4 C% e% I9 d0 p
/* create a logger instance */
8 n- L4 l! W3 L  zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 Y, O) x" }$ |
var loggerBufP = new LoggerBuf.Params();5 |7 l: [: ]/ y8 V9 m* z0 R7 `5 K
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* B" T8 y5 z! s& nloggerBufP.bufType = LoggerBuf.BufType_FIXED;* Y+ M& f9 x  l6 Y. t: J2 R  _
" [6 K& m3 @$ E1 o8 U5 R  O5 t
var appLogger = LoggerBuf.create(loggerBufP);5 a7 p, m0 P# S; Y8 x
appLogger.instance.name = "AppLog_Core1";6 P. k/ O4 U1 s4 v5 y9 k
Defaults.common$.logger = appLogger;* F8 }. [9 E2 }  ]: H6 C
Memory.defaultHeapSize = 0x8192;   
; S4 {2 ?7 E& j/ K' ?Idle.idleFxns[0] = "&LEDStatus";. r; A# k3 K: S9 S
Cache.initSize.l2Size = Cache.L2Size_32K;+ r# c1 K: Z: C' p/ ]: [
' [$ y- ?2 V( l3 P+ L
回复 支持 反对

使用道具 举报

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 */, Z: H9 n2 c. b0 K" y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; O1 K# Z+ f; f4 w4 S8 Yvar heapMemParams = new HeapMem.Params();. J' m! t2 F$ Z3 _
heapMemParams.size = 0x4000;; D, l2 }9 R. q( Y( i6 o/ X6 ^( w4 K
, T9 r( [7 W" m( w+ d8 l
var Memory = xdc.useModule('xdc.runtime.Memory');
. q2 S( p; ^/ V' Z0 `- lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 A9 c" r. ]7 u. K: a

. A4 I3 B) Q2 q, {& t% F' `' T我大约calloc  每次共计大小为5K*16bits,
5 d0 `+ k# |/ _2 k. K8 R7 m5 a而默认配置才0x4000、需要改大。
7 W% e& n& I( c5 C0 Y; o# r& z9 @/ s1 E& e1 w7 t. y4 t! F4 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, X! ^( W4 w1 n; _& K4 O7 gProgram.heap = 0;
" V8 b6 Q+ I' x1 j" B; @Program.argSize = 100;  /* minimum size */8 u$ e) x; C, x3 E( t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-20 21:43 , Processed in 0.041556 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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