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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 p( B/ [' t, q' b( G+ Y) P6 X6 I: x/ D. E  G) C
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 e2 P5 J& G0 _: V
1 V( ~$ t% n" v其他程序段。。。。。/ R* P. p# ]/ X- z* I5 g- B

# R* S4 J  s3 C+ p, Q; L   free(x_d);
* @0 o1 c* T$ [4 T3 E- ~2 z% f0 T* _% o* k8 U- }, G7 Q
使用DSP侧单独调试功能,验证动态申请没有问题,1 D! U$ a  k. g3 d

! T& U8 y- W4 k. \- |/ A; P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 u3 M- }! q6 d4 m( m' ]
9 O4 g, v$ q) Z' O! U& G
+ k/ @3 P; h. P# Z
! W  t8 b' c7 k5 A) ~( @9 v$ X

. m) X( I  i  q2 d& X: ?
% J1 R9 p+ O1 R5 S/ u( `0 N( j3 `, Z+ G- O4 t

8 Q: m/ r- J8 t8 ^6 w( I! m( c+ c. e- \2 ~; `/ z$ W
6 G* G# C- y/ G
$ z- i4 H2 L* ^! \7 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& f- v( H& ]( n0 ^) G% h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; {/ h3 Y* y& Q9 d0 r  ^' m1 r5 x
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" c$ D9 d6 S# w5 G8 x  M" }
0 [( C4 X% ~8 ^4 z' A
是不是需要在DSP.CFG中进行配置& R: e; W& ?2 p' D% s
我现在的配置为
( }! m' r/ m3 Q5 T' @- s& z7 ^2 _. F) e
/*' i  c, b5 u& X
*  ======== Operating System Configuration ========
! {* a/ B  k" r. n* O3 O3 I  e% H! k */$ J  H( `7 j! X/ O

1 V# D" V1 {4 d& Q$ v6 i3 ?7 r/* no rts heap */
$ j. \2 `3 B& r9 D* E% K/ a, G- XProgram.heap = 0;
9 {8 Y# }5 O# H6 i. NProgram.argSize = 100;  /* minimum size */
) f; I% I7 }  }% m, k! o& O" NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 t- `, x2 v/ ^* a6 p& U6 E; G# O8 _+ u) l! r. b$ k* f! S9 w! S
/* create a default heap */9 U: ]" y3 a* B' Z( l) `3 k6 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 z  b, c% E7 A$ g. l4 v
var heapMemParams = new HeapMem.Params();  q4 \' S* \4 L( A( O& m1 t
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ i. N# q, i1 Y9 H- F5 E

* o/ i4 |: s+ X. u9 X; H4 u
var Memory = xdc.useModule('xdc.runtime.Memory');3 ^  Z) N, U% o' I  c! x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- b  W5 V/ k: ~. d
4 e% ^8 v, X% x- j7 h/* configure System module *// n, B2 h: q5 _* w
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ Q2 l, M! K* `/ [( R) y' v$ k
SysMin.bufSize = 0x1000;/ p( [& s1 z# k: k' G9 B8 E4 N" `
SysMin.flushAtExit = false;6 W0 `; i/ f& @: \$ |( b

2 v. @' u1 v# ?3 d  C) \) Wvar System = xdc.useModule('xdc.runtime.System');% \1 V4 i+ K0 V$ V% L
System.SupportProxy = SysMin;6 ]  o; u! i# h; l8 k) S5 j7 T# I

5 @1 ^9 H6 E( R* P( {. e/* configure SysBios to use the lower half of Timer 1 */
. D8 ^: Z  c0 y# m+ _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ t  n8 e2 D: L% _/ b) E6 ~var Clock = xdc.useModule('ti.sysbios.knl.Clock');( y: U5 L& Y( a' Z
Timer.timerSettings[1].master = true;5 c! |1 R& z2 t( _: I) [2 Q
Timer.defaultHalf = Timer.Half_LOWER;
6 w: R! L  C2 r! Y7 PClock.timerId = 1;
/ d% }" N" x8 }2 x# ^1 q1 T8 w1 D3 u) \
; d- x+ X. H# O5 F* X+ V
: d5 Q- L$ Y7 \2 T/*, x; T) }" r  w- k* C' N; [) z
*  ======== Miscellaneous Configuration ========( F5 C, R/ u$ Z# V# f6 n$ A& D
*/9 L( \8 x8 |# J* [* L/ e

$ c( N3 M5 Y: g0 f0 R, M/* set default diags mask */
, c9 r* [" R7 a' U" e7 Dvar Diags = xdc.useModule('xdc.runtime.Diags');3 s$ b" l) g# m+ ?4 g( R  g
var Defaults = xdc.useModule('xdc.runtime.Defaults');9 `6 ?: X* l3 ~2 j* F

8 {5 _0 z1 ]0 k! m7 k, b: _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: f  k+ B' ]- r4 D4 @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, t2 C! E9 ^" u% B  v9 V
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& p4 c" C- A1 V8 t6 j+ @) fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! X4 d) O9 m) L" Q2 G5 B1 e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 q& V- M! ^2 V; iDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, i, d3 Q( Q; \7 J8 J( ^7 VDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- A) q" U4 F. Z5 Q) t( e+ O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* m2 V) }; l* ?7 T" D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ z8 P8 n8 A9 C$ v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 t  x' l- B2 n/ q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ Z  M! G8 P/ m( V: s- c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# R, \6 D. i6 V% A$ L# L- Z0 B, yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& D" o: V" g* S* n4 qDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ K0 B  n1 n& [  \

  X: l, m# `1 o9 O! k% w; _. x/* override diags mask for selected modules */0 }1 F+ o. @1 y! D$ x- W5 ^8 y
xdc.useModule('xdc.runtime.Main');7 B6 K% R2 ~* R& \9 J: G' J& l
Diags.setMaskMeta() m+ p3 P+ o. `6 ~; s
    "xdc.runtime.Main",) C0 y1 K, _% b- r  E
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 X  d2 Y* F) J2 `8 I0 {
    Diags.RUNTIME_ON' D/ b8 J' R. ~6 V
);2 v9 o& R" E1 g" `9 ~
# |* f3 s$ j- I$ l
var Registry = xdc.useModule('xdc.runtime.Registry');% l* u* {, |4 {. E
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: |; O$ b% l3 H0 j0 s& e! C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# ]6 o# B/ x# i% CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# k. V; J3 ?% y5 n( [3 e8 w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' A- p& j! Y: i# J5 Z# v# ?

; `/ @: ^* |. ]" A; v( Z6 P2 V" o3 J/* create a logger instance */
3 g8 u) [6 X2 C# W. A4 g/ y& bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" B" Y0 w" s. `2 wvar loggerBufP = new LoggerBuf.Params();
- A- E  A% t# X8 jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( e* J$ @7 }5 OloggerBufP.bufType = LoggerBuf.BufType_FIXED;
) ]0 F# d  V5 ^# m# }3 v9 B+ \9 ^' C' q  ?
var appLogger = LoggerBuf.create(loggerBufP);9 a  m! W! U( T' L
appLogger.instance.name = "AppLog_Core1";
. t# P% o: M1 O1 I6 [Defaults.common$.logger = appLogger;$ e: O! b' B4 `0 U) e6 T3 c9 D+ F
Memory.defaultHeapSize = 0x8192;    7 U- @4 I9 ~, X4 D0 I9 g+ H" D
Idle.idleFxns[0] = "&LEDStatus";- V+ }& q! m! d. d3 K3 H5 O
Cache.initSize.l2Size = Cache.L2Size_32K;
/ B3 L0 E. E$ x; c1 ]
; k" T/ Q" L% r5 D
回复 支持 反对

使用道具 举报

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 q+ N5 M. r9 F6 ^9 R+ [. V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ ]5 o8 Z& z! P. \! _) Z
var heapMemParams = new HeapMem.Params();
. \1 U+ ~( p0 ~heapMemParams.size = 0x4000;" s- h7 G) b% h9 Y8 D( s( ^

' \  _% U5 O/ q8 X/ [* C/ w8 M/ Yvar Memory = xdc.useModule('xdc.runtime.Memory');" e/ x6 t+ ~/ C/ v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 V( K6 |+ l( T% p4 f: {, W! x) O; |. }/ s* j5 }- ~
我大约calloc  每次共计大小为5K*16bits,3 m; i( M: d/ I* F- ~# Y; g* G
而默认配置才0x4000、需要改大。
" i" u  F/ T9 W
) z6 @$ v* f6 ^+ c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  U1 m) w0 d# d$ s  V, K. }8 y
Program.heap = 0;: _" F: P: }% E4 Q5 z, g
Program.argSize = 100;  /* minimum size */3 N% ~0 Q, p6 y  u: N5 z- k2 {
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-28 19:50 , Processed in 0.040629 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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