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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% ?7 ~0 l' A: I- N5 t' V2 ]9 c& a: r7 E. l; M9 Z' T6 o* ^6 S! W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 z1 E- [5 I* P* k7 w
. P' Y' g9 t: p& O! T
其他程序段。。。。。# `2 X- D$ L+ V0 ^
% V+ k: d5 B) M2 p$ l- W' N
   free(x_d);/ {9 c& t, ~3 V/ T' A
6 K/ J# p1 S" I+ L! }# m: Y
使用DSP侧单独调试功能,验证动态申请没有问题,; T5 k' f5 Y* a( x& C: x5 d

" g6 j; v1 J3 V" V8 O, @: V) K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 @# J. u( r& M8 U- A4 W1 S

2 v1 E. }4 f" Q0 T( \% q2 m
0 J  ^- }! i" A# f( a
$ f) |. M- w$ w+ K( b1 J* x. Q8 ]  P
/ C- X& Q$ z/ {, Q5 n
1 c0 h( _9 e) I# X7 k3 A. v6 F3 W, y6 O  T$ c3 J, }! m# W, k

4 j) D0 `* L. w4 L5 I; n3 q
/ `- Z2 Q. a: {! r4 |7 K8 j) U1 H7 g2 c2 {6 c1 }  W- O2 M" y
* v) B/ @+ n* @6 E1 ~3 n  K- T, ~& v' f: V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 c9 E; F" m, D+ d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' @3 ]$ n: r  M( U- }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: F2 v/ y6 D+ y. W0 ?
$ L1 f9 O* K+ N- C
是不是需要在DSP.CFG中进行配置& d5 o6 k# H7 ?0 Q3 Y
我现在的配置为
" N; d: c( d# e, t! F& Z# ]; l7 h/ w7 b. G+ H  F) l. x3 n6 k* H
/*
0 M' \4 O. \5 N- d& C *  ======== Operating System Configuration ========
. D, P4 O4 Y' o3 K) H  b */
# p, S/ X" N2 @
; r3 G5 d* Q& s/* no rts heap */
2 p! K1 n, f, @0 Y* r$ e2 tProgram.heap = 0;: @! e5 l/ R5 ^- i0 O$ E- O
Program.argSize = 100;  /* minimum size */+ M. X* _( Y  D& {& E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" k+ V( Z- G  x8 d4 Y: x1 ]1 o- v  }6 I  p; L; c8 n
/* create a default heap */
7 g( Q% ?! I2 h9 b& Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- P3 c% g$ Y! J' V, u8 y' j
var heapMemParams = new HeapMem.Params();
) D/ Z& x& i% Y! RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  i* {1 r2 B0 W. c& I+ F7 i$ R  _% ^
+ k; [4 L3 E: X. a
var Memory = xdc.useModule('xdc.runtime.Memory');
) i: s! F; S& ~  u1 ^: wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) z5 {) T# ^' s, J4 b- S; n. S  I% }5 o. Q
/* configure System module */4 ]* A) S. H# z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 ~9 i! D# w' h6 }4 U4 }$ nSysMin.bufSize = 0x1000;
7 y( b$ |/ j9 O# Z8 q' sSysMin.flushAtExit = false;
1 M3 i4 }9 x5 d: I1 e9 w+ T# l* Y' D5 Q
var System = xdc.useModule('xdc.runtime.System');( O5 G6 ?* P5 F% [: s% m2 n
System.SupportProxy = SysMin;, |5 R3 j1 z1 Z) d9 z# S

, m; m8 O1 l" d& |; }/* configure SysBios to use the lower half of Timer 1 */; [5 A7 x" j1 G$ H+ g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 n2 ~+ D% S( C: D& vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ b5 h, t- J- a" x' D" [* w) ZTimer.timerSettings[1].master = true;
# O( ^5 ^; F8 s# F# pTimer.defaultHalf = Timer.Half_LOWER;
- W3 U1 I" `& n1 x: B  zClock.timerId = 1;& l" r9 q4 M; g$ V8 Q8 M
6 u( @7 k" a( o2 T; o3 [1 s

# X7 j& P8 ]6 h6 }1 L% v. L/ B/*+ W( k, Y- t2 x% M: l
*  ======== Miscellaneous Configuration ========
  a; {/ w6 R  o4 W1 ^# j/ N/ m- x */
/ W* |: z5 O) Q3 Y$ R! d8 g& q# G6 {/ Y3 |# L* |
/* set default diags mask */
& x5 |5 f* j& }* C  e  U0 {var Diags = xdc.useModule('xdc.runtime.Diags');, t$ I7 ~; U  \5 F! l4 O; p& Z& `
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 }& P4 }  P" T" J9 S7 t# H7 i6 R3 j
; o. p9 X# U" ?$ V# nDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 y% {4 r" `; N  K
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  E$ F" I5 F! w& gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 C  t- X* p7 k: q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 t$ b4 q' t2 h1 j3 N6 n( B* w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# x8 \# ?% ^& N, G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 `; i$ D" N" t: t- g! `Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' _( s0 o5 ~0 `Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: _% B6 Q+ Q9 A8 ]* xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% W: D; M1 O6 |5 X2 E
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 l9 X. X! E% P; h( _0 m0 J# k5 P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 ^; m) c; h0 Y8 F# ?1 a. J9 T
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 {6 l% R& z' _% Y' _4 fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 ]9 E, d8 B' C8 {  }: `# J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* l; G3 i7 T. r7 |2 F& ?1 b
8 j2 V2 r. M( ?* D: d6 B/* override diags mask for selected modules */
8 [" c: B3 r: q; Gxdc.useModule('xdc.runtime.Main');1 j0 t4 H$ q* Y
Diags.setMaskMeta(
6 e' L9 u" L1 d8 P- V7 k6 ]% Q    "xdc.runtime.Main",0 h; J0 K9 ^2 c8 H3 U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) k9 D2 e' b' H    Diags.RUNTIME_ON* \% }, L3 r0 H7 N
);
8 I$ Z9 g" w: W" \, l4 B
; s' ?0 f" K( {7 `* S! Q5 Rvar Registry = xdc.useModule('xdc.runtime.Registry');
4 B7 k2 V( Y# O4 r% [% aRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ [% b  z2 s8 ]4 J" ]0 ]3 `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) o' r" E" p2 m1 r# @/ \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! E) r$ j; @+ ?& n+ o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 v! `5 ~# D) @1 Q* c# p4 \

2 t, C# f3 F, k5 f/* create a logger instance */
  S3 c! G/ `% p7 J" `, ]; Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 S+ E' h, E, e+ p6 evar loggerBufP = new LoggerBuf.Params();3 M1 Q% E& ^  P& K
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) _/ ^; R4 H) R3 h; G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 @/ M# X9 K( `! }0 ^4 ~8 B6 U1 N: Z& A( r- z+ R! Y
var appLogger = LoggerBuf.create(loggerBufP);
/ L8 g" a. U2 h; h% \appLogger.instance.name = "AppLog_Core1";
+ P! w! @& M( ?Defaults.common$.logger = appLogger;
, ]  i" n+ J) z& w5 S4 b0 W( OMemory.defaultHeapSize = 0x8192;   
" _0 L+ Q6 \$ _Idle.idleFxns[0] = "&LEDStatus";# J; I7 B6 D- _' a% P! b/ \
Cache.initSize.l2Size = Cache.L2Size_32K;
4 k1 g8 C$ y3 |. v5 Y, t. j( _7 w) z
回复 支持 反对

使用道具 举报

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 */) ?0 F) z# E  {7 B: H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  Y! |3 I& R2 i1 [. I4 v6 fvar heapMemParams = new HeapMem.Params();
- S$ S% U, K# oheapMemParams.size = 0x4000;
+ n, O2 A6 \5 d- Y5 z* }! c8 z; K
var Memory = xdc.useModule('xdc.runtime.Memory');( y( E! ^1 m9 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) T8 W( p; W! Q4 J* ~
" O6 U% s! [! q, y) t
我大约calloc  每次共计大小为5K*16bits,1 T+ @! _) @: F' N# h1 Q
而默认配置才0x4000、需要改大。
5 {0 Z% C6 \3 b; f
! Q+ W' G" a6 S9 o' ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 @7 o/ a% O* o+ B: u+ {& h
Program.heap = 0;
) R" p7 c$ L# qProgram.argSize = 100;  /* minimum size *// H. ~+ }1 X3 D4 I0 @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-27 17:08 , Processed in 0.040131 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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