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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  n" ?. r. K. m# C5 t& M) z4 ~. x1 l) |- `% p, J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& r# Y6 w0 S( p! A$ r, q8 ~1 i
1 ~* p. Y, M; y
其他程序段。。。。。. o0 u$ ~/ S+ T* ^) h2 Y. h
( T8 O. d* t* s; Q! w; r
   free(x_d);) C" p1 l! c& l* \7 h
) n3 q: k" g5 Z1 e
使用DSP侧单独调试功能,验证动态申请没有问题,! @# x) O% }8 z4 J+ M8 b- C8 W

9 }1 T2 t3 L- c) j* ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. [. z; @" O) B) H
( K1 e' L# S8 {9 `0 @6 \: c
( s$ s! N3 }7 Q+ v
+ H. Z1 g8 r2 z: h4 L
. a" S- b) m. D6 a( Y
$ C( k% P2 }! h" [! j6 i, d3 s& S
6 W6 h' T$ b- a+ z: b4 ~

& F/ N( r9 D2 H
3 u. g+ t8 x& I* _1 v, s# A# S3 n! O" f1 ~! b9 Y1 x
/ P' _: \2 }3 M, ]. H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) A8 g, r/ N7 h# u2 X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' i$ t2 F- }3 K# M$ f" S9 `* T0 g6 g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 B  `3 t: g: A0 C1 R) A

7 g) h- A% b$ x是不是需要在DSP.CFG中进行配置# g: z6 k1 [2 \$ R1 Q% N" Y
我现在的配置为2 F3 {- ]3 h4 B( }+ w

; B# Y' R6 K7 y  z/*& H  X/ b8 g) T4 E
*  ======== Operating System Configuration ========
3 O& e# P  K0 Z */; v+ F5 r7 W1 o
0 \) ^- R  g& Z
/* no rts heap */
6 j/ a% P5 V6 `: ?: AProgram.heap = 0;
' W; `" r$ ?1 F  ]. |% K! b3 bProgram.argSize = 100;  /* minimum size */# x8 V, s4 Q: w% U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: ~: P# S' n! R  f) k7 a& S& x7 ~0 N6 ^+ L. P% n* O/ C+ H
/* create a default heap */0 H* t2 N! t0 @: ?7 s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ U& d6 s. b* r. ]( xvar heapMemParams = new HeapMem.Params();' b2 G* r$ J6 E) r; H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) t$ L; i) J2 j& r6 _
% p4 \6 @% l3 x4 Q. j! L4 Y
var Memory = xdc.useModule('xdc.runtime.Memory');
) |% _# h( ~% Y# [, h" y: aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ v* Q% [- ]8 M) K9 r2 h- t
0 K! j5 f/ X- K$ M2 L/* configure System module */
) U) ~0 ~# f3 j$ G6 c/ Ivar SysMin = xdc.useModule('xdc.runtime.SysMin');. i8 }2 S" ^" @) Z) e
SysMin.bufSize = 0x1000;5 {& U8 [0 q7 I! P/ Z2 U; M
SysMin.flushAtExit = false;7 A2 d, c/ m* i4 u. h7 i1 P

2 D7 a3 F5 m$ H( z: k! ^var System = xdc.useModule('xdc.runtime.System');1 g+ y4 Z" b( u
System.SupportProxy = SysMin;
9 X8 |0 [# n  A) j- a
; k, n+ U6 K$ W- C/* configure SysBios to use the lower half of Timer 1 */% X' n' L4 M6 m! ]" P. {4 V) K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ S. j9 ?9 k% P5 C8 Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 Z9 O# H( C- v2 O- S, NTimer.timerSettings[1].master = true;( f5 a$ C. n2 R7 b& `
Timer.defaultHalf = Timer.Half_LOWER;
6 F2 A, P6 }0 P8 I0 pClock.timerId = 1;* z% G6 y, \+ ]  W" W) e

; K3 B+ M7 u3 p% N& _9 D; p' J" e/ R$ t* ~. l. o
/*
6 N: H$ k- G+ ~6 u4 n *  ======== Miscellaneous Configuration ========
/ [& M! g+ l4 S; [4 C4 w */
* I% l4 P+ L  b/ C, L
7 r) @. {- g6 n8 E4 c# m; C, x/* set default diags mask */
2 v3 d: x; K# z: S4 z9 @5 lvar Diags = xdc.useModule('xdc.runtime.Diags');
( ~3 |% _: P5 T: }3 Pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
; ?0 c8 D6 y0 L4 i; o9 B1 H! q6 ?. G& C) W
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ C2 r. i  i7 _) J0 \. s8 V' VDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 L/ u9 H2 j  T! E5 m$ u, v
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# Y0 `5 C9 b+ M. HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 ~% ~, k1 p: B  W( ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# ~6 h0 G: l4 |) o2 gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' i" G- Z$ m, r1 h
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' o0 I9 k! `- |! ^& s$ [Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) k  i8 P7 p1 ~. J% A4 S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* ]7 a: R$ F2 C+ A; X4 O/ _3 FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, w) k0 n  @; K: O) i  o
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 E1 X; w  L9 v' WDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. j2 A9 K# U/ O9 c' HDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 h- i: p+ G2 Z9 l9 W( m. [& \. A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  |: N5 s: n7 i* s9 H# B
6 N5 F6 n! w* }' N. H; o# P; w
/* override diags mask for selected modules */
; o  w4 ^1 Z% {xdc.useModule('xdc.runtime.Main');9 E' l* ~9 c; ]' x+ S( y' w' ^
Diags.setMaskMeta(
' f* i1 i& ^% T0 L    "xdc.runtime.Main",
8 i2 J9 t0 [& N  J  n' p    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 \6 D$ N" P5 v0 ~+ }
    Diags.RUNTIME_ON; q  Q2 B5 {, F3 a
);
2 B$ L9 R8 B  T' x) M/ x  Q# g  B, \/ ~
var Registry = xdc.useModule('xdc.runtime.Registry');0 P% q6 @6 M6 M4 H- z3 n: n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ n' c; X3 A; B$ d( P
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 R3 l  m8 d% U1 x; lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& W6 ~+ Q! E+ D) \/ K/ l
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ B( t$ G1 u: O5 K
' F1 ~( u% P1 Z( z; m/* create a logger instance */1 _& A9 ~1 U7 |+ Z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; \  }( u+ P8 v
var loggerBufP = new LoggerBuf.Params();. v. _9 o4 P% d( N$ S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' \5 C! ?$ J. R- DloggerBufP.bufType = LoggerBuf.BufType_FIXED;
% ?4 U$ J+ N5 r, ]/ ?0 V
; D$ |' a; `$ `; c( Zvar appLogger = LoggerBuf.create(loggerBufP);" f# a! }( d; E4 ^0 }
appLogger.instance.name = "AppLog_Core1";
7 U2 h8 D/ t) Z4 q" f9 T3 O! Y. jDefaults.common$.logger = appLogger;
& l$ I: s* F2 x  G( C3 D# C% k; u, ]4 SMemory.defaultHeapSize = 0x8192;    8 M6 i" o' i* {% P" ]
Idle.idleFxns[0] = "&LEDStatus";6 D' Z; ]' ?0 s1 i
Cache.initSize.l2Size = Cache.L2Size_32K;5 w! x+ ~: Y9 R: a6 n% }

9 x; I9 Y' ]" ^- Q$ C3 |6 z% ]( K2 p( A
回复 支持 反对

使用道具 举报

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 */7 }6 a$ N9 s; a* }# k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 B. ~5 T- Y6 ?& |0 L
var heapMemParams = new HeapMem.Params();
$ {9 P& O8 v4 h$ B" HheapMemParams.size = 0x4000;# c: D' n/ v! q+ v$ b3 f: X

$ ?( D" O+ b" [% E/ S6 x9 L& u; ovar Memory = xdc.useModule('xdc.runtime.Memory');4 Y+ V; H% D  G5 I, i/ l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" S+ }, Z! O1 J. x% T( u/ O# o3 {8 ^4 ~6 z! t
我大约calloc  每次共计大小为5K*16bits,
  |3 Z% d; j( ?6 D+ v! }, E而默认配置才0x4000、需要改大。
( K' E: e9 T/ M; _( @9 ^* F
5 p7 F" N! \0 A& Y* C1 p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 _8 @6 U9 H5 a/ x8 y
Program.heap = 0;+ ~# }# V* D  s" l& M: b
Program.argSize = 100;  /* minimum size */( @1 Y3 R" g5 s( T6 S( w! K
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 22:58 , Processed in 0.044563 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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