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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 t1 t+ i; }" v$ F+ V
* M! w, \# i0 i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 r2 O2 {% J5 I9 `& j- f
& {# L- g0 n4 ~* m其他程序段。。。。。7 {6 X4 d3 l$ e5 c' k4 c

, X- m6 x  M% e   free(x_d);* I- a6 e# x& v

! O1 a. \& a; J* V# H( T( Y使用DSP侧单独调试功能,验证动态申请没有问题,* u) y) b4 Y. u4 }3 v+ D5 d7 @9 f! R

6 B$ j. l, t- O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 I' j, R& Y. R: _

* S0 }6 @+ U& s+ V
" n8 n8 R+ M1 N* c
7 Z- Q" a4 N8 \7 B
' @# z2 R$ A% t+ u9 d% [  k7 p- `- T% R- y
9 {7 c& m# Z2 X2 M+ f; d  `

5 n% A8 t7 G3 h. J" G: z$ R1 o% u' T8 ^
  g0 k6 ], P/ e4 T) j
6 v1 L" t# c& e6 \4 ?# }; w; j  A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( p: J% E1 e1 B% {. T" V
Program.heap = 0;
+ r& Y1 Z% S8 ~+ g! hProgram.argSize = 100;  /* minimum size */0 i) W8 O( i5 |6 h, N& e. S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */3 X+ Q) Q4 ], a/ g2 g" Y7 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 Z- N4 E6 F- _: Y7 g" ?8 tvar heapMemParams = new HeapMem.Params();
4 V. S7 M3 G* j1 Q  oheapMemParams.size = 0x4000;
! c" f# X, c( u( T% q' p1 w  j
  y# {9 g+ G/ j$ Evar Memory = xdc.useModule('xdc.runtime.Memory');
1 b) Y7 O" {1 a3 i, k4 \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 r, Q, p: i% d7 \6 c
# V. d. k5 F; [3 d我大约calloc  每次共计大小为5K*16bits,: I- `( j& @6 ?$ {& I
而默认配置才0x4000、需要改大。
$ I6 S% ]0 B+ w6 D, T) }7 \7 Z5 t/ x/ b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# v0 [, s. I  p1 y' N8 P6 S我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 Q2 e/ t4 d4 ?& J/ y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ G9 |- p* X. g# a! T) @
* h+ c" r# |2 H+ L
是不是需要在DSP.CFG中进行配置4 d9 I, B( C1 Q( V  `9 V
我现在的配置为8 d+ L/ n$ v8 L. T7 E$ O* L
/ p) E, J5 v- b- d; [/ |7 y, ^
/*
5 d+ U7 v- C/ a8 w: H8 { *  ======== Operating System Configuration ========. ?* t4 l2 C# P: @. ]
*/
) i$ P, y  h' l. c3 o8 D
) i/ g( v, c* [6 z2 m/ G/* no rts heap */! T% `6 o5 r3 x- I9 ]: {
Program.heap = 0;2 u6 a: ]  S. f' q- P
Program.argSize = 100;  /* minimum size */; }' D3 ~, Y: H. D
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ T6 C+ i/ {" b

6 g7 A& S9 v* U  w/* create a default heap */& h' g, o; D; [. m  @4 K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 F0 F9 n  Z- `9 @# W- m
var heapMemParams = new HeapMem.Params();
, j3 }0 k3 e5 R& eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ d, h4 J5 c* w6 _) [# m

: u5 v8 Z7 ~' J4 x5 e9 _' s
var Memory = xdc.useModule('xdc.runtime.Memory');" @( S0 J: \, g  ?9 i+ R  M1 k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 O) i: b6 D% U9 B! Q* N/ c' U* X3 ?% K2 G5 \% d
/* configure System module */
! K- f6 R% D* u1 ^2 c% ?var SysMin = xdc.useModule('xdc.runtime.SysMin');) ^, K+ S! W* \; d
SysMin.bufSize = 0x1000;
5 r3 m( U( ]1 ?: J5 _, p& b' m* A2 bSysMin.flushAtExit = false;
+ k: F+ B* k' \; c
1 A2 a2 {0 U! E" Y# yvar System = xdc.useModule('xdc.runtime.System');* N$ \- V/ Q! e% q1 V- J
System.SupportProxy = SysMin;
# t; K) V/ J  M' K0 s% f$ x  A0 M' k' R6 J! E3 m8 h, x3 d& C$ _$ I
/* configure SysBios to use the lower half of Timer 1 *// u4 R' n7 A- V9 o: ]# i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  Y, P. e4 e8 W. s! b8 Ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  V2 R1 e# Z' Y* W# E# iTimer.timerSettings[1].master = true;
6 g. }6 h8 f. C, `* p7 C) eTimer.defaultHalf = Timer.Half_LOWER;0 f, m5 e. q0 E& n/ p# i/ \
Clock.timerId = 1;/ x" g: a* i; f0 m
2 t; n2 O6 j/ A" H) c; e) j( W; t* Q
% H/ {; o+ j, O4 S
/*
- A& y) y9 ]5 v! N9 S. Z6 R *  ======== Miscellaneous Configuration ========  T4 R. ]- }: ~
*/
5 h, a  ^9 ^! O. K# m
* Z6 J2 B8 m7 P/* set default diags mask */" u4 a5 X! E4 D6 z1 D0 r8 s
var Diags = xdc.useModule('xdc.runtime.Diags');( n& ?  W" C3 W, y$ i# M
var Defaults = xdc.useModule('xdc.runtime.Defaults');* ]' W& E5 i4 `: A8 _0 \0 [! Q! f0 X
* O( X' c4 Q4 ]3 }8 \
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: C! K: P0 G8 _( L' {( H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! \. h* p2 x3 N' J4 s' d. H0 h0 fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ T1 L: U- X6 B) H0 A; B" Q% b2 j! R' Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 |' d( J1 V4 Z6 f. DDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- p' T% `, u# @# F, i* N1 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 A; s+ w: l0 D9 L4 vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 A- H5 Z0 _3 |! [: L, aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 o  `5 o3 S" d; _3 P- {6 y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" I* A# _6 m1 N$ k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# k# Q! V# ^$ u$ R. c6 ^Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: v, Z0 |) w4 I8 ^' p4 W4 d2 o
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- Z- G# M3 A; {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' P& N  ~* P" O+ u$ }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 H* Z- y% p+ G& }  G5 {1 F
- \: P6 M) K! F2 _; x7 r/* override diags mask for selected modules */
2 [% V* j2 U6 F& `, C% Jxdc.useModule('xdc.runtime.Main');/ S6 H6 U- u8 r5 @
Diags.setMaskMeta(9 P  \# v, S; o9 N# u, b
    "xdc.runtime.Main",+ Y7 \9 b4 h$ Z* d3 N* ^$ F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% }* h  ]. e# t9 w( _, Z" D5 Q    Diags.RUNTIME_ON
- E/ P# B* F9 c' E5 g4 @);
! ^0 E. G1 `/ z& K% \+ G  K5 y7 A6 V% m8 C
var Registry = xdc.useModule('xdc.runtime.Registry');) E! U. H$ W7 K
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ a. E0 @/ O5 t' r% c9 I' wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 s/ g4 d' L+ s& c  z4 S& N
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 R9 k3 I4 }8 ?: e5 fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 v# c" \2 r! _0 @* X6 B2 L5 G1 B0 M0 v- m, X
/* create a logger instance */
5 D, q; f7 W/ q5 A6 A5 t* ~var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 M" t/ s# o% Qvar loggerBufP = new LoggerBuf.Params();
; f( k: m) ]) M# U% [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- ?: N! s% z) Y8 z, G, k& ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ y3 D) [- Q9 }0 r* S: d
, D9 o& a2 _* O' Gvar appLogger = LoggerBuf.create(loggerBufP);3 n7 i8 r: p0 `! l4 R
appLogger.instance.name = "AppLog_Core1";
. h4 R( u/ B7 r" ]3 O5 QDefaults.common$.logger = appLogger;" A, U; m2 ?; p4 {' l
Memory.defaultHeapSize = 0x8192;    4 N, f' b- s: u1 _
Idle.idleFxns[0] = "&LEDStatus";
$ W8 F8 V; V2 ~$ RCache.initSize.l2Size = Cache.L2Size_32K;
* c# |9 l0 l0 l4 u. e- g+ I
; i6 L, H3 Q7 p; T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 04:37 , Processed in 0.041945 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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