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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# Q" F% {5 Q$ s% t9 c/ v& b
. _! \% w8 f: s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 N4 u' g; V1 P
2 a9 A* s3 i1 t' ~/ `其他程序段。。。。。
! `; s" A" F# W& Q' v$ ]. ^
; V2 c; z+ o3 O1 W! j   free(x_d);1 j, q; v) W' Z2 R) g& H* l  ^8 R
% V3 F% w2 b* O8 ~, \$ [' r
使用DSP侧单独调试功能,验证动态申请没有问题,
5 x8 \5 W* D5 L  A8 D: K
- n1 d/ S+ ^* u) Y2 X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 ]8 M8 d3 v1 ~& ?' y6 @1 G. {
4 P3 ^7 n* T0 W( B0 w
5 n" I; O/ }6 M" D! k8 o3 m
: t! e/ a  g2 g5 E
1 U5 s, u! Z9 J7 p2 ^) |6 O1 }; ?( J/ E

5 c5 _1 {1 @) J  [; j, |$ a. L) \8 T2 {* X/ n
  l- j! b7 |: e
3 R/ B& ?/ }0 o1 T  L: H

' {7 `4 d2 n9 ^) S4 j) v1 R. w8 P
" o5 `' j# G% N. l  n/ C3 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' Y! o  h. Q2 I1 y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* ?2 \* T" T+ D# D(不过疑惑的是,为何单独DSP仿真就没有问题呢?); s# Q; a( P" i1 b8 p

" A2 V9 x) F6 C+ E8 f5 T! h& w( L是不是需要在DSP.CFG中进行配置
+ J  A7 x, w* N* u! j# p# H我现在的配置为4 m( E8 u- e; s( a; B/ @
" E0 Z, I% Z0 ^4 D! u& u3 t3 T! u
/*& g" H% J# m9 _- V  S' r* K
*  ======== Operating System Configuration ========2 e/ X3 e/ q" L3 F6 X6 X
*/7 o3 Q7 {  @) ~4 G% |

5 J3 d# w2 s) q% y4 c0 d& a/* no rts heap */, Y4 j; g! v% n$ U: r
Program.heap = 0;5 M/ ~: H' X; P6 O: S6 Q
Program.argSize = 100;  /* minimum size */( u- E$ ]$ g% d. J$ A) Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 x; c1 M3 G. D
  l2 T1 Y% Z4 d" b5 ~* C
/* create a default heap */, B1 I) E) v( h6 b" U/ f6 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 ?$ s9 @0 O, j5 n+ `! F. W# kvar heapMemParams = new HeapMem.Params();
% c& {6 r4 ^) Z+ I/ ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# A8 X: ?- Y) \+ i  o* E; x+ ~: w7 b( g' E0 k% P, z5 {0 F
var Memory = xdc.useModule('xdc.runtime.Memory');$ g  p' c" [3 _8 |1 k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" u: a' [% w6 E0 T2 _9 t) K2 G

' u8 d1 o4 a  y$ e8 C# z/ y/* configure System module */& P7 ^; W% a( F, v8 c/ p1 {2 R
var SysMin = xdc.useModule('xdc.runtime.SysMin');  Z! H, l  H& d5 Q
SysMin.bufSize = 0x1000;! w9 d  j$ ]+ f& k$ }
SysMin.flushAtExit = false;9 h& m" m( q7 i$ X& \
# ^2 i2 V# c5 y
var System = xdc.useModule('xdc.runtime.System');
. E" O( w! R; C* n8 L: ESystem.SupportProxy = SysMin;
3 m. O& w; S7 ~
. R. h. h5 i& _3 V7 i3 V/* configure SysBios to use the lower half of Timer 1 */
8 N5 s2 ?0 N. h2 Y: c( y6 t' l( mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* U* m5 K8 K, J9 L2 n  U9 b" J$ Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');: ]5 v; D& I9 R0 I  t
Timer.timerSettings[1].master = true;& X' y1 t, a, R
Timer.defaultHalf = Timer.Half_LOWER;+ W6 A/ E8 W  p  G  C- ?+ W$ x
Clock.timerId = 1;
* o7 a6 k) j0 e/ d/ U( t: h- L/ M/ J

8 d0 l5 H6 z$ U; C0 I: [/*9 w. `* z8 H5 m6 F4 S3 Q3 m
*  ======== Miscellaneous Configuration ========
8 g) F0 N; q$ W */
- I+ R+ U9 ?6 s9 u  u, k( a; L' @) |& i0 X! G
/* set default diags mask */
1 m% D$ g$ q; N: Ivar Diags = xdc.useModule('xdc.runtime.Diags');, b$ z4 j4 f/ [4 |6 R' y: Y% a! t
var Defaults = xdc.useModule('xdc.runtime.Defaults');- X) h5 ]: c7 S3 k: L5 z
# Z# X! g, C0 A: @3 M, M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: H& t7 J% s( ^; E+ aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 m- A5 r' ]4 L. x
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- g4 v- z8 H9 C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: A# ]& i* I. D9 o! F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 m4 j, r% k$ Z3 h5 cDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. I; q" U6 Q: R5 E( \1 LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 z0 |7 t: j+ R7 UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 d' a8 [" C7 z5 {2 j% I8 S2 e( w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- `/ ^$ e/ w* C/ ]9 {& a- x# t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! h; j& F1 M* x  s4 I
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* M) d' G0 z+ W7 ~2 w0 eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& o: j# I! |1 ~* L" P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 t+ \8 H. W' X2 {5 h; r
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ s  c& o7 Y( w5 j

* L  u' H9 N$ _- D/* override diags mask for selected modules */
& W# `! H9 E& d# k. D- K$ ^9 Jxdc.useModule('xdc.runtime.Main');
/ H# _2 s1 Y2 M, A: l% dDiags.setMaskMeta(
: U7 L1 ~7 v" \3 m    "xdc.runtime.Main",
! D9 f- ]5 f# w' J    Diags.ENTRY | Diags.EXIT | Diags.INFO," ^* M' S0 v5 T" k# l/ m  D
    Diags.RUNTIME_ON
0 G) P2 w, I# g2 Q, Q2 |0 p);+ n( z( e4 @& r/ g' k! Z: X
! h3 ^0 Z' H: L. i% m: }" G
var Registry = xdc.useModule('xdc.runtime.Registry');# J: M3 K, |" Q  K5 h# F# R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* P4 Q0 D. R2 W, cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: g0 H, m; p& n3 gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;) c( j3 j2 `: ]+ ]3 |6 R. D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 x2 b, t# R3 n) t* z( k+ e
/ P, w9 Z8 M9 U6 s) T$ c& A3 m/* create a logger instance */4 x" y8 S& ^* V' y$ b* G$ U% |. O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ @, Q6 G5 h( }) Lvar loggerBufP = new LoggerBuf.Params();
. y0 v0 m! `3 W; g/ _loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) ]) W- [- a( J* h4 M2 I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* C9 P/ k" M: x' p
$ R0 C; w3 ]+ c9 Evar appLogger = LoggerBuf.create(loggerBufP);
4 I- W2 z1 e/ i* y6 u0 fappLogger.instance.name = "AppLog_Core1";
' `6 H0 U- {0 S7 @2 Z) P4 k$ m' QDefaults.common$.logger = appLogger;. t4 d7 Z, n" `. _/ j6 V* S# ~
Memory.defaultHeapSize = 0x8192;   
% |& I" h9 A! a6 k5 xIdle.idleFxns[0] = "&LEDStatus";7 X8 Q. e+ ]% v& d& M. U4 x
Cache.initSize.l2Size = Cache.L2Size_32K;
& C1 C- c# R/ p( F5 G8 F" @% U: T/ z" O
回复 支持 反对

使用道具 举报

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 */( e; ]# z% w5 y8 x4 b) P% x- g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 O, _1 w9 K* e6 S- g' v* C; {3 Yvar heapMemParams = new HeapMem.Params();
! c! P) q- w, y; T( theapMemParams.size = 0x4000;/ u4 d, y2 m- s

8 |/ c" T1 Z' B3 k* u2 N/ @var Memory = xdc.useModule('xdc.runtime.Memory');+ i3 T. L  Q6 b; t7 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* D  W" S7 W: z3 U( U  |7 H% V" J# A$ y4 b# N8 p: u5 M
我大约calloc  每次共计大小为5K*16bits,0 r0 I* P3 \/ A0 _/ n
而默认配置才0x4000、需要改大。( E+ y3 g( m# L) L4 m
3 b  D! P% |; Z4 }3 y& g8 J% c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& R) P8 M3 n& B7 FProgram.heap = 0;' [9 a, X1 M; U
Program.argSize = 100;  /* minimum size */. A  A+ Z! q/ \& J1 \( P. ~& B
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-10 19:07 , Processed in 0.073506 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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