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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! G8 f- O! M* y/ |- y
+ E$ l; u$ M9 h2 s& ]8 j# a& \    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* z: C2 \. p6 K& b& X& j# ?9 @, Q3 I: M- V
其他程序段。。。。。9 g% T/ `$ B6 B( ^6 Y3 n# Y

. q7 j& ?; K1 g, I   free(x_d);! y) J+ H, _1 w: {+ m

7 D0 n( w( @" f; c1 J; _使用DSP侧单独调试功能,验证动态申请没有问题,/ n# `# T+ K" i1 I4 |7 o) O

, W2 u! W& s3 Y# H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, q4 V/ f8 {: g8 v. x  _0 R
* V2 X: Y( j7 E" t2 x& @3 ^6 J' d8 _
, M. D, J8 C9 g" r% I

  \6 ?6 z! p# e" E" q  z3 S8 h
8 X" R; ~! X/ V4 _* D1 b" e! V% v8 R3 }- l/ a5 J/ @

# `5 M* e* m+ a- y; L! I7 x# c; O, X# }3 h: x

' f, ^* r- r- {4 b2 [$ F; d+ h
% T/ z. [3 h- S: P" D4 q- C8 r8 A6 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 W4 f% u* R+ y) p/ l1 E我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  t5 G% A5 S# W) T, t; A! W5 r) T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 n. A& B; H8 B* G
( C- {: A: n- W" v. Z+ B( H9 P
是不是需要在DSP.CFG中进行配置
( p5 P# h; k% S7 W我现在的配置为  a6 C; @0 \8 u2 Q- A) _

, q; D$ h  t2 K: n& b/*
2 r( z2 U* W( B, l *  ======== Operating System Configuration ========3 B- F- R/ v# ?$ _6 d' ~
*/6 f3 m: R. m5 Y- k; ~, U* L

8 k) Y  }: E, Y! E- g5 ~, w" Z/* no rts heap */
9 @; W& z2 K' B* d% OProgram.heap = 0;
. Y; \7 Z9 a( h" Q2 I6 J9 TProgram.argSize = 100;  /* minimum size */1 k9 `" p( J# @" v0 o" [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 ~+ p) |# j) ?( C. F3 z  g: K! ?% q# o) P
/* create a default heap */6 J. p/ k- G9 o7 d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 `) H! F0 B) M% k. w+ ]8 `var heapMemParams = new HeapMem.Params();
% P! w& H% Z3 n9 wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  v: c+ H4 |; a8 F6 Y; t# ?

* Y' h/ a; x: l
var Memory = xdc.useModule('xdc.runtime.Memory');9 }" d/ h- [  E0 P- ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* I6 W' g) {& C# {! \& U& q' U; d: D' M$ U- u2 p
/* configure System module */
' P# a3 t% e5 a: `var SysMin = xdc.useModule('xdc.runtime.SysMin');: N% y" ~3 r/ W( v; `: E
SysMin.bufSize = 0x1000;
9 s2 W0 D+ Y% g9 ^SysMin.flushAtExit = false;4 l% U  R4 t# v; r8 R1 m+ v

) h$ a" c! E# bvar System = xdc.useModule('xdc.runtime.System');
( s* r/ o  w& C9 GSystem.SupportProxy = SysMin;0 c5 w6 t( k8 m
: G( `4 u3 Y0 L4 ~8 e) Z% \2 x( t  [
/* configure SysBios to use the lower half of Timer 1 */1 H: l% S1 E1 A! t5 B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ c9 d" i- F- k  hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 y# Z; i5 K' w& t6 pTimer.timerSettings[1].master = true;% }; C& G/ I, `7 y
Timer.defaultHalf = Timer.Half_LOWER;
8 G$ @$ n% [( P0 c! o2 LClock.timerId = 1;0 I! W7 f7 ~  d* W8 X  K- M
5 A; S8 h8 R& b8 K6 w) I+ h1 p

- A. i) f, n$ k5 q/*
! H' f0 T% s7 i4 H& M# h3 T5 \8 d *  ======== Miscellaneous Configuration ========3 Y2 y2 s1 C2 |
*/3 Q: q; Y' I' `% y

9 {/ a1 G" H0 g* E) S/* set default diags mask */
7 O- O6 n9 J4 L2 P. D" Evar Diags = xdc.useModule('xdc.runtime.Diags');# p# ~& Q: S. Y+ o, o: V
var Defaults = xdc.useModule('xdc.runtime.Defaults');$ V+ K( G, u4 m8 P
+ w% [- L8 O. N- D$ S
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 Y% f' v. ]$ a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; v8 n& ?; s% T) O* q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# J, V) @" r4 w8 aDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* }# }2 v1 P- F  P0 n# j# c: Q" h, @
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 m( W$ {/ z: D& v$ T1 f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& Q# ], l# n) E0 PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 z' Q5 u3 g" R+ @# B) o/ f
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, E; O3 ~) L( P2 O' F* Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" h5 O( g0 }  i7 C5 t5 r2 c( o4 h" Z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ g3 G, v9 h' E5 R5 \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ G% E, J. T3 N9 B
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. |& C9 E: L) ~7 D8 bDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. Z& F; F* p$ E; t2 @$ bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* B% j9 f: d+ G7 a
: S% k3 L) R0 |0 E! B3 |
/* override diags mask for selected modules */2 H' Q/ d  c+ G; x4 ?3 [
xdc.useModule('xdc.runtime.Main');
& w3 ~1 A$ r' R. {7 P! KDiags.setMaskMeta(
- v) u# j4 D: n1 p3 Q& _    "xdc.runtime.Main"," ^/ o- F; D# M7 ?- c
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( J4 x2 i" L0 Z9 s    Diags.RUNTIME_ON+ r$ g3 v/ v* I9 a8 y2 u
);- @' A4 D$ a2 O8 N8 L9 F
1 d  e: V2 r; h) ?8 B" E1 J
var Registry = xdc.useModule('xdc.runtime.Registry');
$ L6 o! E( K. x. G1 Y+ z1 z- N) XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- I- S8 m% _. c- ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ t0 W* P' N, v2 [Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ L& N3 x2 x" H- W2 D1 g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) G3 X) `& y8 P, ^" E3 q9 Q
# f% ?+ Y8 Y! }7 a3 b. L
/* create a logger instance */4 M; H) j2 _' `2 H: R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* _. H6 Z, ]" C8 R9 m
var loggerBufP = new LoggerBuf.Params();* ~( Z! ^/ h& C0 _; `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// [# V: N+ o) P' r" |1 ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& s4 \# Y6 S, [% t4 ^
9 M! n& s$ [. }% U7 ]$ h
var appLogger = LoggerBuf.create(loggerBufP);- Q; ~9 s+ n3 ]" \/ K
appLogger.instance.name = "AppLog_Core1";5 ~6 K9 |4 U4 @- r
Defaults.common$.logger = appLogger;
3 h# j+ K4 a7 K+ @$ |4 wMemory.defaultHeapSize = 0x8192;    4 j  G3 I- I$ z6 x
Idle.idleFxns[0] = "&LEDStatus";
) Y5 S/ Y/ e/ @/ _( GCache.initSize.l2Size = Cache.L2Size_32K;
1 @) f+ O& d4 ~9 n9 F: A) v2 y0 S0 j; `, n
回复 支持 反对

使用道具 举报

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 */( X" ^  E6 c7 Z/ C" e- N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; |2 _. }- I, u2 C9 q/ J
var heapMemParams = new HeapMem.Params();5 o9 i/ x  `# J' ^& H% x
heapMemParams.size = 0x4000;
9 I5 ?4 X; \! P! X$ N* ~0 P+ r5 q2 Q
var Memory = xdc.useModule('xdc.runtime.Memory');
- [/ E) o0 y' [( L- `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- T& o9 a9 z& m: W$ }/ f5 t" L$ o4 }) |" W/ Q/ r, M1 q) ~9 w
我大约calloc  每次共计大小为5K*16bits,
! c' Y- \# z' ^$ K$ w而默认配置才0x4000、需要改大。
% ~" O, ?; s( S6 n" t2 r6 c1 K+ ?+ I/ F- b- r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: v6 a* C. U  q6 O
Program.heap = 0;( v. z2 v  ^  n. @+ B
Program.argSize = 100;  /* minimum size */
) g5 n7 F1 ]* ?+ mProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-13 20:28 , Processed in 0.042293 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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