关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. V3 ~2 W3 Q) C9 ^: @7 m7 E
3 a! [) O& p# u6 t/ m& J5 D1 h7 C
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ u' }4 @/ w- d: U$ o( {& n7 B$ {. k% G* F# t' b
其他程序段。。。。。
* ~, U, K3 k- i# K" J7 r0 I
5 W+ S* x/ Y% t4 l/ D/ f- K   free(x_d);
1 s9 H7 P, I' _5 v8 p. @- @4 a9 ]1 T* D8 B0 x2 _! b3 R
使用DSP侧单独调试功能,验证动态申请没有问题,
7 R* H4 I5 U4 Y6 t+ u
( c5 K1 j* ]0 R  s. ?5 u+ x0 ?但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) ]; a3 K- l( X# U

2 u9 U+ _1 p9 D, B2 n- O$ z
0 g! M! L; n$ Z* a* x* ^% {
3 }. M" d3 @5 g+ [2 c
# g$ Y- e7 P: n$ [- T; C! K2 c# f3 L3 k& \! N' r/ [$ Y

6 S" [8 J5 w, X6 q6 _# Q8 X2 S. V' p; G  L4 X9 @1 m% a7 u

( ?! X- Q+ f0 N: m9 E
/ g* c: y7 d' Y2 j; f' C1 d5 Z9 ~) F5 O/ K& {. N7 x/ n. M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ u+ r3 v* h+ Y' A% C  H9 a
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 N" o- q! {# ~  C5 k2 p  l
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 o. d! [  P8 \1 R. d$ H7 z, w
+ Y; |5 P/ {3 f- @  U" n$ \, T+ a
是不是需要在DSP.CFG中进行配置% I" e9 ^. `/ `
我现在的配置为
! \$ }% W8 u2 K" Z$ U8 }  g2 ~
3 x) ~( Z6 y# x! k/*
3 y2 c0 [0 U# \; I; Y *  ======== Operating System Configuration ========
" x4 S( H# ?# ~1 O5 _/ H */
9 X% w; l" G/ H% |# M; e  s$ e/ h2 x0 d& Z' \
/* no rts heap */+ N+ P+ Y- G3 x8 H/ ^
Program.heap = 0;% d' K- L" F+ \# t3 C* v% e6 t
Program.argSize = 100;  /* minimum size */
! R5 K: Y  j4 {6 V0 W5 N1 p- uProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ e; w, c; U3 @+ ]# S- [  }7 ^

2 ~6 g3 W; B, F$ M/* create a default heap */% Y! q6 a4 ~! R  p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) o9 M3 ?2 W2 s8 |% [$ T8 W7 x
var heapMemParams = new HeapMem.Params();% t- L4 {: l& ^* N9 J# \6 @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* @1 c" [+ U+ K- r7 E4 F( k3 l
6 ]! k( d5 T: }' k* d7 N
var Memory = xdc.useModule('xdc.runtime.Memory');
# C9 F& q) ~& x2 {! l% V* y1 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 A7 Y* A. g+ y1 h8 I
0 }- d" ~% ?3 H9 x: o8 Y/* configure System module */
; D" |7 h9 y- Y7 ovar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 r( k  e& s2 y( T  @" pSysMin.bufSize = 0x1000;
0 _1 {: R2 _; E2 _; PSysMin.flushAtExit = false;
' f  l* m- c: o/ C% \3 a' K4 p7 _* y0 l# }1 P# \+ ?4 A, q* V
var System = xdc.useModule('xdc.runtime.System');# B8 W% q: U  B$ _
System.SupportProxy = SysMin;
. ?8 C& P" Y2 c- `1 u6 `9 c) j) `& Q! [' F# f/ i) x( j
/* configure SysBios to use the lower half of Timer 1 */
& T/ k) N0 G. l9 nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. D. N0 E6 c' G2 |9 p( t* _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 Q6 i$ ?3 y$ N# _0 o5 t
Timer.timerSettings[1].master = true;
* `. z1 l8 g9 b! c* pTimer.defaultHalf = Timer.Half_LOWER;
6 g4 L+ y- x4 ]; D0 T2 ]" c4 B1 AClock.timerId = 1;3 h0 I; [* p3 f1 o3 s

! m: q. w% \1 U: J( m- V  _* ^3 k2 m% M! I
/*! E$ e" Z8 O" V$ A" f7 j
*  ======== Miscellaneous Configuration ========
7 j" F; j! ^3 P% O  s6 G */
' ]( v& j) v+ @; O* `; ]& R4 _9 I7 t, X# E9 g
/* set default diags mask *// I) T2 C7 |% y) u% V/ e$ y
var Diags = xdc.useModule('xdc.runtime.Diags');
0 Q$ t6 f1 ?8 f. R) n- Svar Defaults = xdc.useModule('xdc.runtime.Defaults');" T* p9 O- g8 ~6 a7 u% f7 {

: D# G; P7 |7 |( Z5 mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, p9 x* W) g* e2 n! r2 U4 s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 [: |- \6 A" ?4 i( u
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! I2 Y6 _- `7 Y- N0 V7 `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" ?. o# v+ y5 z! R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" z% T- P# h" E* M; H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 U! \2 Q# ^) VDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 q( e- K  \% _0 K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 R* r+ a. B0 e7 i% S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 t9 {( Z( n# V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ {( S+ }" k' x6 r* l; v& ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- O+ k- h* I5 U/ `3 [% h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ t/ y% V# g4 C3 [
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( R5 X! z; m, M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" W5 A9 Q# ~* }6 ?: o
6 R3 E2 X3 W) B) |: J  }5 Z9 s% b/* override diags mask for selected modules */
, b- J  ?1 H$ r! Hxdc.useModule('xdc.runtime.Main');3 r* j! ~5 n( ^3 [1 i
Diags.setMaskMeta(
2 _' G6 S' u' k* W1 [2 R6 Z5 k    "xdc.runtime.Main",, g  P- p$ O% ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( ]- d+ o$ p2 R, I4 d2 j    Diags.RUNTIME_ON6 q$ B7 p& w% {2 _% Y8 B6 q- [$ j# V
);1 a7 h/ T9 e; N) L- c

  W3 i! O5 U% E0 Xvar Registry = xdc.useModule('xdc.runtime.Registry');% h. P4 E0 u8 ^! n" a& z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' d* B( Z0 A; E$ p/ \
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. r+ \6 u" `# p' t( q+ M. r9 l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; r4 f3 u6 L8 J" ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) B6 P" q( v/ ~4 W5 p, M# W$ F% ]& m/ F. J2 C9 @- u0 U. z2 M
/* create a logger instance */
3 A5 U. G& F8 @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' u. [3 z3 z; b, H) |* |% d" Z, P7 n
var loggerBufP = new LoggerBuf.Params();
" k& d7 O+ s3 I9 O2 `7 XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 {3 ^8 [, Q" n1 {8 u0 D( QloggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ b6 Y) t6 j1 a7 `* r: x4 ~1 k0 y; o; l5 ~. X  Y' s# ]8 r
var appLogger = LoggerBuf.create(loggerBufP);- s2 Q, L% d1 i' N' V5 [
appLogger.instance.name = "AppLog_Core1";' @' J$ O& R) [) S+ s& W* O3 c
Defaults.common$.logger = appLogger;
# R( \. C3 d6 }- v, g2 EMemory.defaultHeapSize = 0x8192;   
2 w+ _' }3 ^( D2 Z9 s5 F- `! IIdle.idleFxns[0] = "&LEDStatus";; h- ?  h# Y+ H' m4 Y8 q
Cache.initSize.l2Size = Cache.L2Size_32K;* }8 a% b6 b* w6 S3 N( b
/ \+ Q+ T- S8 a; x) j% e( k# u
回复 支持 反对

使用道具 举报

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 */4 j$ I- \" W! z" c+ Z) `+ M' }& d. y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# ]; \6 p" f9 O) x- i6 \* J3 z
var heapMemParams = new HeapMem.Params();
  S/ ^% ^8 r2 B- U- z. ^heapMemParams.size = 0x4000;8 X+ a2 @; x* a/ ~1 g4 D0 n6 @
0 W* M4 g- e# v9 a
var Memory = xdc.useModule('xdc.runtime.Memory');4 T+ e& \, V% o& x! u; x$ H: n9 Z; S0 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 g# l! ]4 x* A7 E5 t9 O. D

5 I3 @5 `$ O' u- j- k, [# z我大约calloc  每次共计大小为5K*16bits,
$ {2 d  H# T1 B5 H; {3 u5 P# \4 J而默认配置才0x4000、需要改大。4 F" S8 t7 v  g! `+ m7 I' [; h& P0 w1 J
( q; f) F. j3 X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  F( B# P" N3 @! OProgram.heap = 0;, I5 g9 A( f3 E: E( D5 @. F. J" h
Program.argSize = 100;  /* minimum size */
7 Y& \9 X& u9 @; `Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 20:29 , Processed in 0.040774 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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