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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! d7 l0 ~# x. e3 [& a
" L1 ]. ?, u/ C2 O    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ {1 d# @2 f* y2 b

$ o5 |" p" J! d9 c& t; [8 I. u  @0 e' b其他程序段。。。。。. ]' [# J: G; z. P

, ?1 J/ y- ^5 L. U3 m" d   free(x_d);
, x$ q) x. ?5 X' ^
/ A1 p& }; _& Y! F使用DSP侧单独调试功能,验证动态申请没有问题,
: A8 b4 e% V' I* w3 L% @3 F" M# L) `1 {
# T' N5 U7 T4 q% ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! _; i- U  S. A( |8 i

9 M9 Y: h/ r& E- s0 D1 G2 P7 `& K; I5 Z# o2 b5 z5 _0 i* b
- X2 w, ?# g! r( n5 a! ?2 d6 b5 d
2 R! C- Y' r, }- p0 x# J

) `5 w1 A0 [6 M* D7 r9 l" f% K% u1 Q) D3 q1 ~, E

7 Y' T% v+ V# f, S& n
! k* q( f! L, W, p% ~5 |* u5 U& e7 o8 C& s

# B7 ?" P: ^; k1 l) n. N1 z5 f1 c3 C. Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' N! s0 U: \0 w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- D. l* E  r6 `5 \  P
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( E0 F: K4 \; C5 r
7 P+ H& S$ I$ m" s, D( x7 V
是不是需要在DSP.CFG中进行配置
5 W, i( @: S- ?* P# l4 {8 H我现在的配置为
: A+ B$ U4 [5 m1 u$ c) c- i- p8 U& L' Z5 ~
/*0 H8 @) `: e6 ]6 s0 J
*  ======== Operating System Configuration ========( c. [' r$ g5 [8 F3 l- B2 C
*/
  i% u* F, Z2 N6 C2 k- h% d9 D8 x2 H+ @. V1 ?1 V5 e; ^" {) z) j
/* no rts heap */
9 \- d5 u' r8 Q# ?* ]6 C0 SProgram.heap = 0;7 ?( z& k. Q6 ]- `
Program.argSize = 100;  /* minimum size */
. b. D1 M' q& w; P2 p2 XProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 U8 o! l  a  f$ Q2 x

: A* o$ m6 w  b4 u) V: R( I1 q/* create a default heap */
. k, e2 p3 z1 R% P5 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 B8 D' x9 z( S9 Y
var heapMemParams = new HeapMem.Params();
5 x2 s/ H7 Q9 |. J) G% l9 n1 YheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. s. ^" O4 |4 a# f
! T. O# N- b7 X& x5 x+ E4 U& L+ ^
var Memory = xdc.useModule('xdc.runtime.Memory');! q7 F# P: g; ]8 C9 m) s, w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ x7 `9 i& m4 b" M5 ~# R! h8 E) Q- y7 Q
/* configure System module */# }+ W5 u& G% o- p. ]6 J5 `
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 _$ ]2 p" I3 @/ t; Z: rSysMin.bufSize = 0x1000;7 m# E, d/ H- h* Q& Z
SysMin.flushAtExit = false;6 w5 _; |; @' r; Y

: ?" V" }& k* t5 Gvar System = xdc.useModule('xdc.runtime.System');( @/ m" d2 ~1 J8 ]' r& h
System.SupportProxy = SysMin;
9 S  o' k* ^$ `" R( |0 h, f; N4 W3 S: h' H
/* configure SysBios to use the lower half of Timer 1 */
: S5 c, O; }0 N, xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 _- x7 L1 O. w8 E* Hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 n% C1 r; W; E; c( pTimer.timerSettings[1].master = true;. h) V. ~  ?4 {, z
Timer.defaultHalf = Timer.Half_LOWER;
& u, s' \; b- ]; J6 Y! h- W" \Clock.timerId = 1;
8 |5 _+ j- L$ `# a( W! Y- H7 c1 _
/ J/ \& X9 o- \& g, q5 m, V& t/ [; Z, z
/*4 Z% ]2 J9 s) D6 y4 G; v& R' h6 k$ O
*  ======== Miscellaneous Configuration ========; j2 i4 D) L) `9 J
*/
/ d/ g$ \8 c! e, Y0 C/ l# v: e
5 X) D5 P8 w  H% m5 o) T# a. a/* set default diags mask */
8 r7 p0 n- }! `+ R5 [& b2 Dvar Diags = xdc.useModule('xdc.runtime.Diags');
/ h7 n: C7 Y* Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 B( }. R( W6 Y# x  L4 n
1 I. Z& R0 N4 F: u4 zDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' c) h1 s  h" `2 y/ d0 ~/ G% [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  }( r% I" Q  R  B
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* ^: U7 T" @, X7 m8 F2 q- I* bDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 S2 q0 I% q$ nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 I  z. m9 g) W5 O5 I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! a/ y) W  e0 i: J$ @& x- ?9 j
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" ^' q8 \! l# }  R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. h3 {3 U0 N8 k& U$ K% Q% ^- I, M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& L. M7 z2 t! h* @; TDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  x1 T! V# U) Y8 NDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 T. e! Y, @4 [6 Z8 U* e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 ]$ l& P3 E  u; r
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 ~% W+ d/ e1 V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( F- ]8 z& G. ^$ y% B1 Q7 p7 z0 W

' R6 [: Y) B: ^7 ]/ O5 e$ k/* override diags mask for selected modules */
4 L; N; m: a9 ~* jxdc.useModule('xdc.runtime.Main');
! ^! \# g1 H+ Q' C  l! \Diags.setMaskMeta(
- ^$ A( \3 q- b! a0 h    "xdc.runtime.Main",$ S* S) p1 u# f0 H
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) [5 e- j( o* C( m
    Diags.RUNTIME_ON* G7 o7 m7 m: C& C* M3 |6 ]
);
1 o! J! J+ I' M' D
) Q- _* Q4 ?9 {+ Z( S2 Fvar Registry = xdc.useModule('xdc.runtime.Registry');4 l; H9 K9 J& G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 ?  n2 G2 H- C; Z4 f+ a4 F$ r9 j" @- o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. M  P$ P  {- i: M) {+ K) wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" X) D+ k2 P* H# Q* C
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: l' w6 }* T( Q) B
" ]2 _" G9 P% `* `5 `, w
/* create a logger instance */
( U5 a' Y# A9 [, v! t9 u# _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; P6 e% L  ?# I, \4 ]8 ?. Dvar loggerBufP = new LoggerBuf.Params();2 w% B) ?- v* z% c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 ?8 L9 e( x" b; t
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" r6 d4 f- Z- A( z  v7 Y

) z6 l& N4 k2 ]- Nvar appLogger = LoggerBuf.create(loggerBufP);
! i- `" x. k7 h% s3 DappLogger.instance.name = "AppLog_Core1";
4 M0 d+ r& b' K9 L1 y; XDefaults.common$.logger = appLogger;
+ c3 t  q; v) n1 pMemory.defaultHeapSize = 0x8192;    . w" `8 r3 T5 T, Y
Idle.idleFxns[0] = "&LEDStatus";3 b" c6 _) s# [  d8 s' q
Cache.initSize.l2Size = Cache.L2Size_32K;
1 W& l0 L( e: P6 \
1 e! |( e7 C7 ?# }/ H2 ]* c0 C9 X
回复 支持 反对

使用道具 举报

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 */
; x3 m8 C( i0 c" a& a8 H& Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 j# W% n, \% J8 k
var heapMemParams = new HeapMem.Params();
* H; @4 _2 o. i- {$ o( w. j6 WheapMemParams.size = 0x4000;7 D+ }9 o" b5 L/ p

, \3 X2 x% ^: _/ `2 ?6 S* uvar Memory = xdc.useModule('xdc.runtime.Memory');; j7 I+ }6 O4 s" z9 ]7 z6 [" s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 @* Q4 t; @' Y/ t8 h1 s0 m
0 [; ^4 `: A8 }" ]- |- c0 l
我大约calloc  每次共计大小为5K*16bits,' ]. H) g  U& c
而默认配置才0x4000、需要改大。
( }- h$ b. u$ D' p+ a* z0 w" x: |: \  R8 y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 V) J0 U/ D2 b
Program.heap = 0;1 N* L0 n+ O! _) O% ~4 U
Program.argSize = 100;  /* minimum size */# P. Z3 {& x" v: S; }2 T4 e
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-12 17:00 , Processed in 0.041366 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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