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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; g* ?6 n+ R5 O# U$ k1 n. M/ J. o* B/ H8 K- d0 Z! Z, ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 E: E/ Z' @8 z, ]

7 ^+ i, g& ?4 W/ ~; i- K' J其他程序段。。。。。7 m' p9 {. a0 C* j# P0 c: F
6 r+ S0 p2 N; ?8 \
   free(x_d);
4 d: c& T' Z! ?2 d6 d& u
! j, R+ h6 A; ]# m) b% L4 _使用DSP侧单独调试功能,验证动态申请没有问题,2 V* R+ |( J7 ^% Q* r3 p9 C% l
4 Y4 X2 z4 r' d2 h" ?. U4 ^
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& v/ D; g+ @2 `1 o: {. N7 d* k

9 U* C9 K$ ~. a5 _8 z5 x- ~3 r
. p5 s" s0 d- [7 n2 L' p. e8 B4 V7 U% {2 l
- ?( t. p+ O6 u# U. E; c, Z

, w  p2 |+ y8 W+ L* D8 x; o7 q& q$ w& S, k  n
# ?: p1 O- w0 q) m

- \. \- {3 Y/ Q& `$ s& q! Y# x" c9 V
! P/ ?  A  H( G4 V5 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; m9 Z+ W6 w: L1 u我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 n. e5 ?% W: v9 ]. T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 K% F! S1 X- E

8 m1 o/ x+ N* ]9 I: o是不是需要在DSP.CFG中进行配置
: G$ z) |0 j- a+ z# X: A/ [* L我现在的配置为
' U' V; j& Q# u) D9 U
* R* [+ Q6 S; x% Q/*
6 Q6 A" l2 s6 G. e *  ======== Operating System Configuration ========2 S. E+ B2 r7 I/ Y' \
*/
2 r5 W& m. E; P3 `* ~2 |- D
* B8 K7 A# q+ E5 ]4 Y/* no rts heap */1 X: W7 r4 l+ @2 d  @+ L! g
Program.heap = 0;1 K7 v" d# t" T+ t
Program.argSize = 100;  /* minimum size */
9 V* r1 z/ P$ v: [& ^7 AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 E5 j. n/ b. D* z  u6 ?

# B$ K" V, _' R/* create a default heap */
/ f4 R/ p1 F9 A  b9 c$ C7 M! ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 n. j% N3 F* H# y: o5 U
var heapMemParams = new HeapMem.Params();
6 Y; w/ v& J( d8 x4 B. c9 z1 xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; K+ @) G1 Y  F. g7 M5 K" ?( F
- [. k: N; _. f
var Memory = xdc.useModule('xdc.runtime.Memory');
3 ^$ b3 N. Z5 q+ _/ u" B2 _  CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  @5 R# Q6 k1 \, ?) b8 v
+ d$ H) J& ?* _. w, z9 }0 v/* configure System module */, N1 K8 j0 }" u  C$ b2 j6 a
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 a' u- K4 x/ _SysMin.bufSize = 0x1000;
# D% T' _5 o" u: _6 MSysMin.flushAtExit = false;% w4 L( B1 W5 D3 {* ?0 z

# I2 M3 K2 y, I' Z, w8 Qvar System = xdc.useModule('xdc.runtime.System');+ W) h  m6 f4 h$ R; X: n8 i  F
System.SupportProxy = SysMin;. `; n, G6 |* m

# v( i# Y- J+ E( J9 L" A+ H/* configure SysBios to use the lower half of Timer 1 */
. P* c: t3 b  G2 d7 Kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ ?9 |/ \. p4 o# ^: O" Evar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* }! x. v" X2 g& |Timer.timerSettings[1].master = true;
9 }( \& {8 ^* e/ g1 v/ RTimer.defaultHalf = Timer.Half_LOWER;
7 I9 F7 o9 n; G: @Clock.timerId = 1;
7 n: }2 G8 M  `# t* P' V
; q; c5 }: v9 h' P) w/ }* x, E! `9 {1 @+ J1 o+ n# d7 J8 s
/*  l  Z: a2 X' @  W! m2 v
*  ======== Miscellaneous Configuration ========. ]+ f; J& E8 ]
*/
2 d; t$ m% t) n0 H
/ s8 o$ Z( l) n' C: O& f5 T- @/* set default diags mask */
, l2 O! N. ]+ g5 I) mvar Diags = xdc.useModule('xdc.runtime.Diags');6 m) o0 w0 O! U0 Y& h
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 d7 i0 e6 v9 F  [+ v+ g$ e0 {9 w$ [$ T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- [# T0 D) b% o, x% C9 l; S4 B
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& h. {# R! O+ }, ~, D; }8 p# EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 b! _; V6 \  [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* F1 s+ n; G6 E( A! S0 z  j7 C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* ?6 _4 k( G* |* E; f) r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 C1 \- Z  Z" f( {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ B% L: y  s# y  e3 P
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% F1 H7 R  c& q: R* u. s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' T( L4 I( Y# x
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  o. @1 T8 r% DDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. z) g  t" Y3 F  I  @$ \- E& B
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- a" v- u/ s8 a( W$ A2 j( }$ FDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 j: d. S" ^$ [8 A; pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# U5 N* `3 h2 ]
9 I+ z/ {* P0 v# d, ~4 }/ X7 ?/* override diags mask for selected modules */
$ l" V* P( ]/ cxdc.useModule('xdc.runtime.Main');1 l3 L" x! U2 b8 O  Y* t6 ]! R+ r. C
Diags.setMaskMeta($ c! y8 w+ ~2 U$ l- D5 \
    "xdc.runtime.Main",, a/ ]% I, F  H1 c; g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 D( H9 Y8 x& J: R2 S    Diags.RUNTIME_ON) W5 j4 x" s/ V% ^. y
);
, c$ ~) p0 k. M/ E, V5 J6 r
$ Z6 H. V, U: ]# {var Registry = xdc.useModule('xdc.runtime.Registry');% N3 M! r" [% H# @( P, F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  a) P) h: @" Z3 V, J
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 ?" H( U' g3 R0 H, p" t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) |+ K( e; s3 m/ g1 _5 iRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;; ?5 s4 z; U" S. b9 K9 Q% ]

5 K. H( D- n2 e3 n, ~9 H! F8 O/* create a logger instance */
9 I$ G0 B+ R# g  y  e# z4 A6 O$ a# z( Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- n' d+ G  s; p) G6 Kvar loggerBufP = new LoggerBuf.Params();( r8 ^% t% ^) `0 l% Q' G
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# q% B* K: u0 EloggerBufP.bufType = LoggerBuf.BufType_FIXED;+ n9 n8 r, u2 n" n. Y% }; s2 b
: W! n0 J$ f+ a# X7 b) B
var appLogger = LoggerBuf.create(loggerBufP);
8 }6 L& e4 C% k& f2 d% ]& h7 lappLogger.instance.name = "AppLog_Core1";
& |/ d* \' Y; @Defaults.common$.logger = appLogger;
! f0 v6 d& ?4 |% \6 sMemory.defaultHeapSize = 0x8192;   
7 q$ E! b3 X" |; u7 I( sIdle.idleFxns[0] = "&LEDStatus";& d0 l% p  j  B) a
Cache.initSize.l2Size = Cache.L2Size_32K;7 C5 ~* s- F+ b0 C1 L1 j
! j/ c8 V7 n4 J% y; }9 Y  _
回复 支持 反对

使用道具 举报

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 */
1 q" Z; T2 O) D/ A+ rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 Y. [/ ?/ r& k( K# n; Y$ svar heapMemParams = new HeapMem.Params();* Y6 G, L& r/ p2 }  j
heapMemParams.size = 0x4000;4 M" h4 V8 J) E

  o) z' `2 s  Y0 Hvar Memory = xdc.useModule('xdc.runtime.Memory');
3 _0 U% j/ b: j+ O0 _$ L( D6 n8 }+ c+ M6 JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, J2 ]8 i. |3 n3 N7 `

2 J/ N0 B5 F& U1 j我大约calloc  每次共计大小为5K*16bits,. z& K! u2 w/ x/ j
而默认配置才0x4000、需要改大。. X5 }- N6 n$ K; d7 T# O

7 J1 ]( v# I% v2 q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! p4 I& ?* X3 b% V& k. s# ^! t2 \
Program.heap = 0;
* A: ?4 l3 L1 V# lProgram.argSize = 100;  /* minimum size */# k" ?5 u* l& X3 r/ N
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-26 05:48 , Processed in 0.062091 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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