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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 w3 k! ~# i: P! m
4 t0 r& P# _( t* |2 x6 |
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 I0 Y! |! I  e$ c6 ?- W2 I- T* C
5 e2 T' G: F6 r, n# g* g" W6 v4 W: D其他程序段。。。。。0 d& f- q1 b; C' d" X$ V* ]
2 W/ j7 j% J3 o$ `
   free(x_d);: y5 n5 N% x& C1 `! \

; C4 l8 d7 |6 I: }使用DSP侧单独调试功能,验证动态申请没有问题,2 R% S$ W; Z6 {1 I4 D& M

/ m; \; a3 }; [" ~+ ?! V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; z2 u" B. m. G5 h- y/ C. r
( G* A# ]. j8 h/ P& I& \: R
$ o4 U$ s) ?# d5 q5 h7 }; n

  `# z( l0 b, K% A. t
! {/ M+ V* H$ d- v) d( n: n4 f9 D% [! }" z
4 P& n2 c& y+ u, N4 K6 X- J

' I8 ]6 N. ~6 L( _& g2 J3 ^! m) F7 }8 E. @' t5 A
. T& v/ q# c0 D/ o' `. `& a

, g0 c& I. Q9 m7 {: e. Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) K2 W  Q" U, `  |8 z8 D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; ~# Y9 A0 a: h% B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( W  K  `3 c4 F; e' S
: C- B0 b; i" _* K$ }
是不是需要在DSP.CFG中进行配置
: h* g' A9 N% r% ~9 |我现在的配置为
% `. J- u& a" H: ?7 ?4 v
) t* d: }7 U9 T: F1 L/*
( `; o" D" i, X6 e *  ======== Operating System Configuration ========
: |' P/ ]. n# a8 ]) V  V */% m; x; \: y8 T! ?3 G. [  j3 E

: w* m% V/ f- G/* no rts heap */+ L- N7 ^$ {7 X  G
Program.heap = 0;
' L. Q" E5 l& k  v& h6 oProgram.argSize = 100;  /* minimum size */
1 |" }6 e- D" t$ VProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  J8 S1 z7 Y# z; G9 i1 K
+ f) d% o! h$ o% P8 {8 {( J; l& W$ d
/* create a default heap */8 {, v* R' u/ _0 q, w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- t$ D  V1 j, F! G& L& S
var heapMemParams = new HeapMem.Params();! U9 T$ y9 O% b- ~& l( ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 k5 E0 b- m9 y$ j% |7 a& A

" g5 p) ^% [7 b# c
var Memory = xdc.useModule('xdc.runtime.Memory');3 @$ k9 A# }- Q7 R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# @7 j6 r5 r7 {4 e! X" ~8 e2 c# R

7 i3 l- k* \1 i" b( U/* configure System module */
" G8 y" X- P2 X: y( Q2 o$ evar SysMin = xdc.useModule('xdc.runtime.SysMin');+ P% @6 d: q; p. U7 ?% k( s; D: o$ H8 Q
SysMin.bufSize = 0x1000;9 E6 W8 u; `) [9 t. n8 j7 Z
SysMin.flushAtExit = false;+ o# t  j9 V# b& w

1 u5 o3 F3 M! w9 z8 i6 t: [/ e# ovar System = xdc.useModule('xdc.runtime.System');
3 V  ]: q: M3 T7 g6 T& M' F% g- GSystem.SupportProxy = SysMin;
1 {7 R, j6 ]9 Y' j# @* g
2 K& |% h4 R( g4 G5 ~/* configure SysBios to use the lower half of Timer 1 */
7 n# j2 L3 o6 A: [; l/ l2 z# Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" j% p, w6 v* |9 w2 f9 N
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, c. i1 a8 A7 Y
Timer.timerSettings[1].master = true;
6 z# F) X4 Y3 y; x0 GTimer.defaultHalf = Timer.Half_LOWER;& a* J8 Z. Z7 A/ z$ w3 B
Clock.timerId = 1;% Z* s$ w* S, }$ W1 q0 p
6 G6 ~9 D* }- Y- m
- a( _( \% M0 \2 `" A
/*0 q* |2 I" j# n4 ?
*  ======== Miscellaneous Configuration ========
, T! N, n' }! m3 O9 x3 ? */
/ d7 K, L2 S& a; ~8 e0 v- H  o: `+ }! ?! ?& d2 ?: g* f/ Q/ ^
/* set default diags mask */
: u( T( a; M9 o0 u' ^3 fvar Diags = xdc.useModule('xdc.runtime.Diags');0 k. f2 @' U( ]0 y6 H3 {
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 ~1 W; i( B; C
. y- G+ ^9 o8 a$ z) _$ [8 N& H  CDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ b( t- E0 [+ C) q$ \8 MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 E% \6 n1 L' v& W" _# yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ t  z7 m5 Z5 o, F5 u" F7 u' fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 `7 O6 |+ d, J" l! X& FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: W+ A$ H0 g5 V) `7 S$ ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 N6 X$ y8 `: F4 C9 s9 E0 n% l& _9 oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' }6 d5 m) D/ \" ]
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* d4 t; s2 l6 y! N+ d- _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 U0 C6 ]- q* E* R- bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: X9 R. q6 t; t) z4 B9 U6 R) _8 v, lDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 U  |! S3 G/ b. H) B0 @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 H4 z/ I9 I0 r. Y8 x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) z0 E% _% L4 C( A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 m- u* C+ a) _6 p7 y; C' t5 y# v
0 e, M0 u8 ]8 O. _
/* override diags mask for selected modules */
) J; X* l) F) L6 oxdc.useModule('xdc.runtime.Main');
- D9 j' Z$ N% @5 V3 cDiags.setMaskMeta(
# ?0 k% ]9 [2 M    "xdc.runtime.Main",$ j9 `! {2 U4 {+ N) q( `/ Y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 m0 P7 A& E9 L/ p4 y  x4 [5 D
    Diags.RUNTIME_ON
/ k  f$ L4 |2 G( E);  i" d  }4 H; A6 H' {  M  o7 t

; e0 x1 J" f8 E0 h: \$ a9 I5 u# @var Registry = xdc.useModule('xdc.runtime.Registry');2 z* B! R5 H$ l  l& R  C9 M% t
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 C0 c! h0 j$ b7 x/ F" H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 |6 `4 c. p! z# eRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 Q9 b  @% P! i2 ^" _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 X1 m" u) A% x
. B% ~- P! B% [* {  O! E
/* create a logger instance */3 \. c8 Y! U4 {1 @' F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 m- S: s3 L. Z, c# I" N( ovar loggerBufP = new LoggerBuf.Params();9 E* B  S/ U/ C+ G# y  f( q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 {" K/ i1 I9 W3 q' X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, v, E: s7 _! Z0 r: t1 i% \
! \) R; j$ j* @5 w9 ~% T6 G
var appLogger = LoggerBuf.create(loggerBufP);
. z) f; Q2 e& O5 q, S8 D/ t( z: \% iappLogger.instance.name = "AppLog_Core1";
5 O+ i7 @9 A- f8 RDefaults.common$.logger = appLogger;# u* c5 T3 K/ U" `8 f  L/ [
Memory.defaultHeapSize = 0x8192;   
4 q5 B5 N, v# {+ I6 g+ eIdle.idleFxns[0] = "&LEDStatus";
8 b$ k" C- J) {+ ~Cache.initSize.l2Size = Cache.L2Size_32K;/ J3 n$ s9 Y$ S' D3 G
( M0 f! `7 R1 a1 _
回复 支持 反对

使用道具 举报

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 */8 K% A$ y7 j% d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! N! n6 ]3 _+ k1 p3 j  k" Wvar heapMemParams = new HeapMem.Params();7 s1 o' i  b7 Z8 ~
heapMemParams.size = 0x4000;
8 b) ], S9 W: Z$ B' P- X
! c( H$ C" T% zvar Memory = xdc.useModule('xdc.runtime.Memory');
7 f. z( A' D$ E  P6 b. b7 j+ tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 b, A5 S  X/ T' O; m* Z
; j# Q2 X9 F, E1 M3 k
我大约calloc  每次共计大小为5K*16bits,
' [3 ~  j- I( X而默认配置才0x4000、需要改大。1 [6 J: B6 |0 b- b: n1 B. M6 g& G2 m
( p! a4 ~9 m) I( P; I8 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 S8 I' b9 O7 Q' b& m
Program.heap = 0;
* f$ h  l7 \2 mProgram.argSize = 100;  /* minimum size */
/ g- c/ |, f5 IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 23:11 , Processed in 0.050799 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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