关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( e6 W7 \$ Z) z( B) d6 f) i
3 R  g1 f8 W( S9 w+ I4 x8 c5 P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
% \' ^' N2 }. N- _5 y3 ?
; H7 n3 N4 E. {+ d8 K( Q/ W其他程序段。。。。。. x/ k3 c/ ~2 O: y2 [1 s

! n, T0 x0 `: ^: ^6 E1 d   free(x_d);8 J7 C: A) O3 `* m" D

4 Y% \& A/ z# _' z" L使用DSP侧单独调试功能,验证动态申请没有问题,
) o$ u* S$ ]( p* m" v
# D& H7 a* w. x* s4 q, ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: F; A$ L! f- g% J' Q" p9 M! A# a

: l7 U4 X( l6 N: F- A* K; d8 b$ N# r+ z2 x% r# M9 j* p' i
( }0 ]8 _0 E- H) t7 Y9 R& v9 t" g

; A* ]) A! Z  C/ @- ]: v; w" {
% w' `  _/ e7 w& \: x, t# Z
, w1 S+ A  N' k6 _7 B* a# U( J
2 K! s+ R0 o& |) V2 P. x( x; _" \% \" Q+ @
( S; q. g" I1 Y8 D
" b, V- _$ w3 X4 h5 F  e& c+ ~3 V/ |9 d0 H  M
分享到:  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 */
- w7 X$ d8 a9 t6 jProgram.heap = 0;, U6 {' x" V  N
Program.argSize = 100;  /* minimum size */8 d" N7 d& [+ c$ p6 X( d1 ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
  y& K# b: f+ J' P) Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" c0 V. k  o- X! L9 Q& q& o2 S7 H
var heapMemParams = new HeapMem.Params();
+ y5 w, d! ~: k. uheapMemParams.size = 0x4000;; s8 E, H" _7 L. d7 b

; U5 l* w/ y) |- W& ~8 _var Memory = xdc.useModule('xdc.runtime.Memory');. b* S7 J2 a& I$ d' o2 _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 c1 Z, ^  u$ I1 U8 _- X; m

3 b6 m" q% f' l. P9 U我大约calloc  每次共计大小为5K*16bits,! m+ O  B; W$ T& N& y
而默认配置才0x4000、需要改大。% A0 Y' A) D8 J6 t9 f$ V6 f

8 u  n. ~1 P7 a/ t' ?( S
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
5 ]- r3 T. y+ L我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) ]2 V9 @2 Q+ M$ z+ h% Y) f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 P8 w: c* w3 A5 [' [

( y$ e$ W. F1 G8 }, Z4 f5 a; G是不是需要在DSP.CFG中进行配置
3 ~4 C. |, ?1 ^) c6 C/ j3 k我现在的配置为
- A9 U3 T! S' j+ w- _/ t- g
( B3 A* {& e, \- s& S) F$ L/*
! V& h- C' G  B* g" n1 x  K *  ======== Operating System Configuration ========
( b& t( U7 _2 M+ A1 _ */
6 U4 p$ }: ^8 U
' U( {7 d0 s' w: q/* no rts heap */9 J8 b/ l1 n" E1 B7 P
Program.heap = 0;
  @7 c2 u- A$ hProgram.argSize = 100;  /* minimum size */
: \5 }' Y* F: P' }$ X7 HProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ ]% D9 j7 t0 s& A# p1 z& ]

( u0 i! }( p0 E/* create a default heap */
* ]* i3 J! m( ]9 W/ e1 E0 e$ @; vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- i& V" n$ m2 Dvar heapMemParams = new HeapMem.Params();
2 B8 i5 O" S7 X2 V$ T/ D% j9 CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. _2 f+ P+ d5 j6 i7 k5 Y1 p

1 Q& S, M3 c" j0 v, |/ d
var Memory = xdc.useModule('xdc.runtime.Memory');3 ^# B* w6 o' O  J5 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% P- W% X3 A) M
' U( Z3 J- ^1 v. U( h/* configure System module */
- E: a4 U; d; Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');
5 C0 P& R; A& hSysMin.bufSize = 0x1000;
9 ?( ?. H( |" x: y( [# p8 a) P, wSysMin.flushAtExit = false;* P4 {! B8 H8 ?/ [# f' d0 L/ u
9 q% d% ~, G9 l  _% M: P. s1 F  i
var System = xdc.useModule('xdc.runtime.System');& F4 s* Y. I0 g+ h2 w( X
System.SupportProxy = SysMin;
0 F6 ]5 f8 v' O( ]+ z1 f& ]7 |( r0 X5 g) ]. r
/* configure SysBios to use the lower half of Timer 1 */, j8 W  T4 {$ V- ]% \3 |. K' N7 [
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# ~4 s3 |6 M+ I" Y3 |! pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 p( r" U" g% {( ]
Timer.timerSettings[1].master = true;
9 J" k. [% V. `9 q  jTimer.defaultHalf = Timer.Half_LOWER;
* w" V8 a9 k2 @, g$ i+ PClock.timerId = 1;
$ A- l2 a6 r6 n8 R3 t  J- t2 R0 W' t6 t4 D& d$ N4 V$ |& L# Z$ s+ Y
/ |" ]1 ^1 U2 K; ?
/*  Z" U/ l$ `6 @3 p4 b
*  ======== Miscellaneous Configuration ========
0 E; f) b1 M, G8 L  a. w1 _# q */6 x2 `1 o6 I7 x9 i; c
! [5 F; }8 q* r9 w. V, j; X; o$ `
/* set default diags mask */
$ L  F9 M; G% k7 ?0 F2 C5 \7 jvar Diags = xdc.useModule('xdc.runtime.Diags');
- ^7 k7 q# b. P" Z, `9 l2 l+ Rvar Defaults = xdc.useModule('xdc.runtime.Defaults');, \/ F# \+ u* z( |  O; f4 j0 v4 I  p% a
& w- R( B5 |( G* Q9 ]" ~: G0 C8 V
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# k. n1 G8 X$ c" s) b
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 O  s& ^2 W) Y+ a" b9 F$ S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 R5 `2 Q. u- k8 }. j' Y! oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 ?1 J( C5 w  I) N( k+ s$ i$ P& zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) P( l# @* K6 N9 w; [! T; c$ M$ FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: _8 P4 X9 i+ W4 e
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" z8 R% g& c$ TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( c. v7 P5 h& U' s5 R3 b
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; ~$ _8 N" ^3 m+ \) Z7 fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 N: i: O2 r' J) z& E0 ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 n2 {' f8 W, m  jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ M4 N! Q$ ~2 ]6 ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: j( l2 |7 S0 {! MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 Q7 a' D: F; p7 |: Z
* ?0 m( [  ?! [4 {  l0 D/* override diags mask for selected modules */
( D; J9 \) _& z0 l$ {xdc.useModule('xdc.runtime.Main');( z5 K8 ?8 d5 e* T7 [
Diags.setMaskMeta(% d2 I# P: P- x
    "xdc.runtime.Main",
+ p, r1 m2 T6 c    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" v- d4 J4 U- e: D' |# C0 q/ G    Diags.RUNTIME_ON
1 v, t  @7 x  d# t6 n2 U; ?: g9 });! W0 f$ p! ]8 G# g% }% z& E- X
, m6 c2 j  ~0 {' s( @/ y
var Registry = xdc.useModule('xdc.runtime.Registry');
! U# m! }6 y1 {; B1 Z: o# _$ @; G9 w: fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: v! }9 k$ Z# J) u
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. Z# m) D* K0 l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 R9 F- D8 \6 W% J4 nRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 a9 g" Q$ w" p
8 X( j8 g$ Y" m# A8 m/* create a logger instance */
" p- F) D- s% \) s' c1 c8 @8 \var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: O3 ~! C. }! evar loggerBufP = new LoggerBuf.Params();
0 |7 N" V8 @' W+ Y4 Q$ E" JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 Q+ q# A! n1 t$ C' Y1 j+ ploggerBufP.bufType = LoggerBuf.BufType_FIXED;
* ]7 x+ n0 T3 f8 d- t# v
5 D4 ]! f  L, p- D" qvar appLogger = LoggerBuf.create(loggerBufP);8 `+ M& d' j; L; Y. L" e1 n- x) M3 q
appLogger.instance.name = "AppLog_Core1";
; D1 }: l& [; m  VDefaults.common$.logger = appLogger;
* {7 U% C5 _9 a/ g' g% B- z# Z3 \Memory.defaultHeapSize = 0x8192;    + z) A0 w) e2 o
Idle.idleFxns[0] = "&LEDStatus";
6 i3 t& Q. \9 L! rCache.initSize.l2Size = Cache.L2Size_32K;
# O: U# V: c: o+ k' O8 S& y+ P4 K/ I( l
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-21 15:49 , Processed in 0.042063 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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