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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% Z% U$ H9 R3 B. r* v* O
" I5 h& d8 B* ^, P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) k$ c) z/ S6 Y8 e/ q6 g

3 V* E/ q- ]: y  j5 b其他程序段。。。。。  O: e  R3 N* b  |
/ e5 K' X, Z$ p+ v4 N
   free(x_d);$ {/ M: T7 P: G# _

3 c  Q/ h8 v8 l$ n使用DSP侧单独调试功能,验证动态申请没有问题,
/ u' R+ ]7 q" s) h0 S6 K
) o% X- L9 E7 a* t# @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' V# H! R5 z* r, ]9 V6 _3 m

) K0 [6 m1 C6 a6 ~9 a! ~! l5 k4 P0 x

2 d9 P6 x7 w" n* e6 F& a
) x( @# f$ I+ l7 n& D# r4 u. n5 [+ k, G6 B! ]
8 g- q! S/ f5 d* W1 J9 k

3 x- e3 v) @7 f- M: a8 ]# B0 i. v
6 u4 w2 S1 I, d" B- Z- v# G1 E$ Y% [( v* S7 k5 L. ]' C/ R

$ ]# u9 |) j; f; n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ P$ g, D+ J1 c) ^7 W: p# s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 K! d5 K, m8 J9 W(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 L( e/ a  `+ r- R- B
( C6 {, N' ~/ b* J3 \1 W& B) o9 V, c
是不是需要在DSP.CFG中进行配置2 Z1 B8 f$ K# j: B' o
我现在的配置为. K) t5 Q0 A: [1 V

3 B! w( W, Q9 l& ~/*% ^$ Y" K4 M% X9 _; P6 ]
*  ======== Operating System Configuration ========* _1 n9 V& X  |6 H# R
*/2 ?7 W4 _% `4 u+ i

, w2 b0 j% ^5 U% ~1 n' M% F! x  O0 R/* no rts heap */
6 b- o. C( q) }( V% ~0 j  a- b7 }1 PProgram.heap = 0;! F2 i) E7 n$ Y! d0 m! E- D3 n
Program.argSize = 100;  /* minimum size */
5 s  x3 U+ m7 K+ _/ T6 d2 Q3 y  A5 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 B5 W+ y! Q6 `8 w% Q  k

* O6 E. c  x  }$ T! Q4 Z$ x/* create a default heap */
7 U2 [* Y8 P+ x1 K3 f: W; l4 U" Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( g1 p% l2 y9 E* [+ B: g+ `. \$ avar heapMemParams = new HeapMem.Params();' _- u) _2 {+ M3 y" e; {# W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) y6 A1 ^) H& H1 Q# N
0 U* J7 \8 p0 ?, }' b: c8 Z! D
var Memory = xdc.useModule('xdc.runtime.Memory');+ G% i: R4 U! H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( f- {* F- S3 ?- x% o& o
2 S2 `: ]+ r; @$ T/* configure System module */+ O' h3 o9 G& O# s1 h
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! E1 J8 B$ t4 g# W9 |SysMin.bufSize = 0x1000;4 f, \( I7 |/ S- S$ e. _
SysMin.flushAtExit = false;: p5 |$ D2 W- J/ u/ w2 l9 m2 a: W' m

! B6 i# n* w/ ]6 z' K! e4 Kvar System = xdc.useModule('xdc.runtime.System');
; J& R9 g) B3 K; {8 [System.SupportProxy = SysMin;" R( ]( Q- I4 Z& }1 F/ O, L) q

& X7 F2 |4 i8 [5 X9 ~/ y& s1 ^/* configure SysBios to use the lower half of Timer 1 */
/ u* F. }. t8 L& evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 O. [, @' c+ J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');- }' R; [- m1 c+ }+ K
Timer.timerSettings[1].master = true;
, v( W, n% F0 o- oTimer.defaultHalf = Timer.Half_LOWER;9 F- }" M% N6 g
Clock.timerId = 1;
  k8 Q1 H( q, G% u: t- _' y- \0 l7 o1 j. g6 [( u) V
5 s! r( N9 \) }# l9 N; ~$ o
/*6 b% d# h, j  ^; H
*  ======== Miscellaneous Configuration ========
  s; V* O' S* N% R/ D! o *// R- X9 ]  }6 g+ i

& s: i" O4 ^2 H2 U, A  E/* set default diags mask */
1 k! W* q8 W: s5 x, `var Diags = xdc.useModule('xdc.runtime.Diags');1 s; b1 J( r2 J7 P  F* J9 O, t
var Defaults = xdc.useModule('xdc.runtime.Defaults');' a  o+ V# y4 M2 u3 a) n& d7 F
/ [' p* e* I. }$ \" m& a6 ?9 `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& v& C( P! ?1 E, R$ _4 R; |5 A/ l( C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 V& s( z0 \) x5 A' a1 {1 {7 dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' k' g2 f7 W8 b: L, EDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) `- d% ~, _8 f5 |9 O1 S1 uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* m' K/ L3 n! C. I9 vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. I- ^$ e- r% E& I+ V6 p5 s# S/ P- d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; m2 Q8 M9 p# Z; eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& d3 J! F' I9 A" M2 m4 T, i& ?- x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 v6 \# s, J6 M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 K6 U7 C9 d6 r: M' b9 U% w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" L7 o. ]. y: b% ]; `( g
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 ^; ^  X, H# a: t' K) t7 L( {3 p' Y: ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 Q* n* `6 H1 s6 T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 z8 [' w  P1 |! D( ~5 K) C
$ }9 I. k: e! a( d+ ]* @% ?
/* override diags mask for selected modules */3 z2 X- q3 r  q) W* K7 G% x2 q
xdc.useModule('xdc.runtime.Main');3 H/ {/ h+ l6 j/ p- W
Diags.setMaskMeta(2 C) f+ Q4 f& d6 ~9 A
    "xdc.runtime.Main",% ^  {7 ^: B  Y' u& O, k6 V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 l' ~+ y6 A# x7 `8 v7 v
    Diags.RUNTIME_ON
( l7 k/ i' M  O);
2 c3 D* @+ Q: }, x$ n
" ~* J' D4 M' L/ y; f- x1 S! vvar Registry = xdc.useModule('xdc.runtime.Registry');
  Y( K) V, R; ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: N+ Y5 x$ [- q3 c2 V+ O( o/ y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 d2 i% I- e* ~1 F6 RRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; M( x( a' b, @) TRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 a1 q# C& q3 `7 r+ d
" Y+ v5 }& L( Y5 \5 g' t/* create a logger instance */! V* l" J3 R0 d5 R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  h+ D, b5 P* e8 r# M, ivar loggerBufP = new LoggerBuf.Params();7 S- Z/ l. O8 _. u% ~% T" q5 x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% }4 n- c% j1 c- I' L' E, L9 v8 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ Q2 ~- B! r! h9 e5 N, U1 _
- |' s- e/ c( m3 U2 e3 T) Jvar appLogger = LoggerBuf.create(loggerBufP);8 h6 {7 X- N1 \( l& J, g
appLogger.instance.name = "AppLog_Core1";6 ~/ y1 D1 u  }$ J) m
Defaults.common$.logger = appLogger;
, i" Y6 h! y. a' ]& AMemory.defaultHeapSize = 0x8192;   
6 U/ [- F4 i7 [: xIdle.idleFxns[0] = "&LEDStatus";- G( j  b6 Y6 y4 C# R" J
Cache.initSize.l2Size = Cache.L2Size_32K;8 o' V/ D* q5 \7 l
5 [. H' y) v# s, w" B3 |! @1 }
回复 支持 反对

使用道具 举报

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 */( I- |/ b  C1 m: @4 h7 |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 q, {  c- D2 R, l9 R/ o
var heapMemParams = new HeapMem.Params();- m0 d3 m6 j  y2 L- W; c
heapMemParams.size = 0x4000;% N5 B8 E4 a8 a5 B: |1 ]) v
& [: T+ h- H4 h) b- n
var Memory = xdc.useModule('xdc.runtime.Memory');
0 E1 ?! ?1 S) w, i6 P+ T6 [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  \1 b+ X1 \8 ^) q/ y
2 e' S' t! b/ u4 I8 a4 y3 i
我大约calloc  每次共计大小为5K*16bits,' X9 ~: Q5 _3 E( k; m; V6 U) q
而默认配置才0x4000、需要改大。+ D$ j& H9 g# y' p( H( Z9 O

$ w" W3 }! p6 ~; z! _0 h( n( p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 T2 i( N  \9 x2 Y' H8 a8 }' V
Program.heap = 0;
0 D& h8 h3 X8 {% j2 [Program.argSize = 100;  /* minimum size */
! r& {7 L4 X  x+ x' s, Y4 [8 O9 ?Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-6 18:19 , Processed in 0.043255 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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