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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ c+ i+ [& Y; Y( m/ Y! f- L4 T; d, d. j
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ }0 S$ q! H. D5 x% P

  H9 t" K. d) u其他程序段。。。。。
% z/ b+ J1 S7 v, B) ]( m: {4 @
: j/ m( p  s7 q% ?( {   free(x_d);& V# v' x3 I0 A9 x! `0 b; O5 L. [

1 c% s( R3 V! w8 l& o6 C使用DSP侧单独调试功能,验证动态申请没有问题,5 ?/ }  S7 o+ p6 ^

7 I5 D( t' K  j7 O# Q5 B1 \( c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* e+ G) I) J1 H9 |! p9 g

& }  @7 `; t8 w+ T# V6 ~- G6 F8 h, T6 B4 d2 r
2 V6 b2 T- h9 q

) u$ y- m  O7 J$ T( s
8 Y- h  p# ]1 Y$ I8 v8 k: [, s( q7 V4 D7 o+ M+ ^0 Q8 x% M- V

" x) u0 q' q  F# i1 I% m# s9 V" N0 C; o  d
" ~$ O$ S5 P7 m: ~# R

" }$ h5 t1 ~3 L2 h* }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 G5 S) C( m1 M  q, L
Program.heap = 0;
. q  h0 l: x8 R3 }/ v, w2 GProgram.argSize = 100;  /* minimum size */
$ ~, w1 d  ?5 f  SProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  ~5 L" Q; G6 w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# X) h8 _2 l1 b/ y" `
var heapMemParams = new HeapMem.Params();; T( C  j0 t2 D  A' v7 m( C
heapMemParams.size = 0x4000;
4 C$ u3 n+ p- D2 w6 w
, r( n( D( [1 Hvar Memory = xdc.useModule('xdc.runtime.Memory');. f. R- @  C8 {# y% X6 z! A/ P+ [, u7 J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 e$ C0 s1 h' L. P' P; \# C) C
- B1 l/ k* }, m6 C* M我大约calloc  每次共计大小为5K*16bits,  F6 X% q( j# m, ~
而默认配置才0x4000、需要改大。
  R/ K( B1 u) E' @
5 n) R' B( a9 Z) ^/ E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 l! u& Z3 E& W  }0 c' m# l8 a
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' C; M$ t/ y7 I) r2 |% O. Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?). I. w. ~' a9 @3 e, m/ Q1 a
; W0 I+ I  |/ h6 O
是不是需要在DSP.CFG中进行配置
2 k" t7 q& h0 t" G% V我现在的配置为
) o& Y& y+ @* \
6 k1 q/ k8 D( @& K/*& T" l7 [! x1 h8 k
*  ======== Operating System Configuration ========
  I& @3 F9 K2 m# d$ y$ W* @; |0 [ */7 |3 m- m( P  \* z- [9 }2 K

! @1 |! r! {: i! g1 L1 |/* no rts heap */! ]2 Z. G, K% v: d1 Y
Program.heap = 0;, p; C6 T1 K% C; S( z% L
Program.argSize = 100;  /* minimum size *// }. \8 Z( R2 Z% w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ j& G/ i3 ^" f4 e$ f+ ?2 N6 P6 M% H

2 U3 Q, K% h! R4 K, K, B6 _) P/* create a default heap */
8 l- M  |; z1 ~1 j& h- ~& N0 Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. E' Y, H8 g/ o$ e7 q1 `% q
var heapMemParams = new HeapMem.Params();) i6 g7 i3 \# u2 I' t! u* }% ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; X: K9 ]3 ~! E" |: \8 N! A4 z

6 n7 R2 \/ P% J+ r$ k0 R  _# ?
var Memory = xdc.useModule('xdc.runtime.Memory');" P! y0 s! ?5 v3 J5 [, f% p, t/ b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; m$ Z0 x; L5 A

4 j) a- _! q, P/ s" ^/* configure System module */" E- J& O6 F4 Q" k# r2 n
var SysMin = xdc.useModule('xdc.runtime.SysMin');
% G: G# b0 z0 l3 dSysMin.bufSize = 0x1000;0 [) V- a$ ^9 ?9 x! l
SysMin.flushAtExit = false;
2 x  O  a( {" u
6 o4 ~5 m* K9 j! M  |var System = xdc.useModule('xdc.runtime.System');
6 h5 o$ b+ D4 TSystem.SupportProxy = SysMin;
' }' k% j. Z( g3 [5 E: _/ D: e% F9 \, C% s8 q$ H; m& `# D8 c/ L
/* configure SysBios to use the lower half of Timer 1 */
7 l" u4 S: i) O, m; b/ q9 ~* Jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 q0 v' `  B0 f/ ^6 Cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 M7 e2 F- ]+ Y" W8 _- \Timer.timerSettings[1].master = true;
8 \- r& G# z5 p8 T" i0 T9 ETimer.defaultHalf = Timer.Half_LOWER;: V& W4 q7 z8 l$ R
Clock.timerId = 1;
* [8 k0 R1 r; T0 I" s: D% u: R6 F% ^) X! J( h8 j! `% k" j1 }

0 t# v' d: @- c: P$ E2 ^/*( K" o) h* E* M& d9 |
*  ======== Miscellaneous Configuration ========9 g' y2 b; n3 `( F, {# [2 l8 ]! b4 K
*/
: t" h( N+ b# H# K" ^( F$ B1 l- J) Z6 W% w0 D- d- i& o6 M  L
/* set default diags mask */
+ r1 s) F: O+ m; Tvar Diags = xdc.useModule('xdc.runtime.Diags');8 G9 g3 h' ^; S; c, W
var Defaults = xdc.useModule('xdc.runtime.Defaults');% ]- h5 x: X  O9 G( ~  i& N

3 T6 J$ }* C& V# GDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( C, G0 `# I- N
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) j' @8 ^- H+ A; K
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! D) y4 _3 |$ R& D! A- [5 }9 BDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 \2 c+ M: S/ J2 a1 ]& Q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 t7 l/ ^% T# N- \& t5 Y( ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* c7 `3 t8 Q. yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ h: {, D! l- oDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( A6 Z& e/ N# F; l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* I5 W6 V; i" g3 L+ F2 G  t) G
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 j/ O. w7 I; a
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 |8 h( f% k+ X7 c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 R( T5 w% b6 |. V) \- i2 yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 V2 n6 H  h+ v5 s8 zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& T; `  w" y1 w% o. |
# y9 ]4 ?2 o4 {/ O  \5 ?+ v; m8 F/* override diags mask for selected modules */% d0 p- D4 A. U3 L) j5 V0 i
xdc.useModule('xdc.runtime.Main');6 }  O* c# K: H5 ?0 Q
Diags.setMaskMeta(
' m- [- w- |1 Q, A+ N2 a0 G  y: Z    "xdc.runtime.Main",) U& V7 D5 y( [4 N" o9 E
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 W' l' p2 ^, A" J6 r" I1 Z    Diags.RUNTIME_ON6 m- N$ W4 _! `# Q. Y
);
5 \1 B. m1 T4 g6 Z# t9 `% ]; R8 w
var Registry = xdc.useModule('xdc.runtime.Registry');0 P8 a* Z# ]- n6 w8 p( ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& S$ W# L& ^+ V0 `0 u4 ?Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: j' E' Z  X, _9 D% z6 n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- P* V5 z# r& i$ rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 z5 p. t3 J- @# h3 z- w+ w- \
3 b0 }) v5 r4 V! d* Z$ [/* create a logger instance */* c- y* l: g# t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 @: c. b. K& j& z' X# m3 E2 f
var loggerBufP = new LoggerBuf.Params();, m6 `( k, M# c* ~! s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 }* V+ ^8 C+ o/ z7 BloggerBufP.bufType = LoggerBuf.BufType_FIXED;
; f1 U( l; q6 |" ]7 p
, @! p; X9 D4 R9 l( Cvar appLogger = LoggerBuf.create(loggerBufP);* F' r% K; X+ m! {. f
appLogger.instance.name = "AppLog_Core1";$ e2 i, o2 U8 `. B7 R' K
Defaults.common$.logger = appLogger;- j  l& N: J" c- F3 r* L% {
Memory.defaultHeapSize = 0x8192;   
; R/ k3 q, i9 f1 [- d" S3 MIdle.idleFxns[0] = "&LEDStatus";
* q6 g* B, l. M2 X& U& r1 m( gCache.initSize.l2Size = Cache.L2Size_32K;
5 v: P# |1 }6 Y! L# V7 c4 Q% P2 x  u7 y+ i
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 10:58 , Processed in 0.040563 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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