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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 M: d7 X. W2 Q( G: \7 O# ?0 c" E' @
; j, s# z7 A3 M
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. Z) I" c5 f9 p

; \# c, ^! u7 p0 T! ^2 O% e0 P其他程序段。。。。。
- E: Y. P  Z1 M% ]! {) T8 O ' h( N6 G- D* f
   free(x_d);
! z7 C: R) \8 @& K% f
5 v: s1 X5 m4 l( ?& k* M5 F使用DSP侧单独调试功能,验证动态申请没有问题,
3 a6 h, B) f5 F
$ H4 ~4 u$ i# g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: j6 O( T1 E4 [2 ]: f9 I

4 [2 ]8 x6 |! }+ L% h! n* r+ J) A# r. Q8 B/ l

& p3 B: z: ]* g4 r  n; N
  n& i3 [* C. d. N, `/ y* Q" a; Q( Y# B/ F0 M7 d  k, o1 I

: R( f+ z% }; `: g- U. s- G$ A. G- A$ A. ~& @5 O. y# ]* h

7 `  G9 Z* F3 K- Q9 [/ h/ V
6 S# c& @+ X( I6 a8 R4 W
% ]4 S0 |% a# d. W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 Q# G. O' \# n/ s2 N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ H+ D) p+ q2 F! f, O. F1 c(不过疑惑的是,为何单独DSP仿真就没有问题呢?): D/ Z/ N5 o! g  R

* h% w: y; E0 x- y% P5 y7 X是不是需要在DSP.CFG中进行配置% h) ~8 y' ^: F( M
我现在的配置为
" R' c' g  i1 @7 ?6 @/ w- i# e, x+ i: P1 S1 v) Z9 s6 ?
/*
  D% {: h( H- [5 I% m" X/ R *  ======== Operating System Configuration ========
, K+ H/ R! ~/ A( i */
, w/ ^( [* f& J9 B7 k: ^) }8 {
' Y/ p& L4 D3 X9 ]9 y) R) H$ {/* no rts heap */+ T) G3 f9 R. P8 h3 h
Program.heap = 0;& Y: |% `2 `  Y3 l& @# y: s, \
Program.argSize = 100;  /* minimum size */, Q7 M0 l/ K* M( {7 U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 v/ k; C  S! J$ a4 b! U

& S8 F6 S8 n- B3 C/* create a default heap */
+ F  I( q0 L1 _' V) ^% x7 jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 s8 i5 }/ }# R7 I0 z; x
var heapMemParams = new HeapMem.Params();
! h9 m& K4 v2 b% z% bheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& }# o  W* G0 Q- |+ A

/ e2 D( M$ A8 Z* b% C; n! N% b
var Memory = xdc.useModule('xdc.runtime.Memory');
4 W+ d) ?# V  B3 \- g! L. z2 TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 {3 o' d8 B% G* ]$ r% f4 W, V
- |2 o' o' T" w0 v) `4 ]
/* configure System module */) l3 p8 c& h! @6 v% b. S! q+ H9 `
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ _& Z$ N; }) M% h1 M% W/ y) YSysMin.bufSize = 0x1000;
- r5 q8 i% J1 U3 nSysMin.flushAtExit = false;8 {2 k6 a& [6 b5 @4 v$ m1 B6 M, H
5 E: l6 i- l  d% V$ M
var System = xdc.useModule('xdc.runtime.System');8 q  {6 ]8 {$ p  F
System.SupportProxy = SysMin;' ~. B9 _' l3 a" u; i

$ i- d2 I; H' P- ^4 @2 Y/* configure SysBios to use the lower half of Timer 1 */& B. ^& `- i+ P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& N' }, y( m5 H! Z. F/ M1 {var Clock = xdc.useModule('ti.sysbios.knl.Clock');  V( C8 r( M! Z/ }4 E  [: A
Timer.timerSettings[1].master = true;
$ s1 c  u" w5 f# x$ HTimer.defaultHalf = Timer.Half_LOWER;$ c/ z2 i9 W2 D: O; p7 X1 Y9 j+ i
Clock.timerId = 1;
) J  C4 H5 f% W+ ]/ A0 K  }8 [- K- T. J' r) p  Y- L6 z, g
' m7 L: r" S9 u6 x" [* n
/*8 c* A( }+ H. D0 \! G/ N- M0 x. y
*  ======== Miscellaneous Configuration ========2 o7 C' v8 h' |' b0 g
*/
0 y) n" f: h  U+ {1 B2 P! d9 ]1 d  z" N1 Z& i
/* set default diags mask */3 d4 B) \; Q' z  h5 ^  l$ a
var Diags = xdc.useModule('xdc.runtime.Diags');) d5 i( u. E. D6 q1 l% A- q! ^) s
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 ^% I1 ~# A1 l. K/ q+ z

% u0 @" P( v4 `6 M6 ^+ G; nDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 V: L/ v+ P" y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  `4 }6 ^& @; L9 h1 X
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 `: Y7 D1 D& e" O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 |5 [  v$ o4 D  @
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* R7 H; u% N* B* W* f1 `
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% G' S+ J  h7 R1 L& l2 i# @Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 J* `; y. r8 j4 w/ Y  D$ j5 _& PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: c( ^6 Y, ~: ODefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 I5 P* g4 A# C) Y" p) m! xDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 A3 h  e+ T/ [+ ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; O3 @* z4 y7 {Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 C) e3 V  D6 ]! Y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. T1 H1 f7 @: m3 K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 M9 \0 B1 X  u  B$ v# A/ B
% f! v" B7 Y& Q, ^& S. |5 S4 z1 E/* override diags mask for selected modules */
2 J4 L; @# x8 Y/ f3 C9 jxdc.useModule('xdc.runtime.Main');6 q6 ~$ }8 P4 x0 I3 }9 a) h+ N
Diags.setMaskMeta(
$ y3 G  N8 d% y; d9 l    "xdc.runtime.Main",' e: h5 g8 j2 U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: q; J& e. a: @. `! w
    Diags.RUNTIME_ON
" j! l" H! j% a5 w; r6 O);2 o  n1 W( M  I' o, d+ O& y
! y9 J) J( E/ }6 F3 S: b
var Registry = xdc.useModule('xdc.runtime.Registry');
" L% ~8 Y- l8 X# aRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, S' q1 G+ n$ M, f5 G' r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 A- F9 U* W! b* j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- n9 K8 S/ ^" F; Y* x
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- ~  N& ]! m  P( E: S3 T

, a6 t. P& m* J; b& m/* create a logger instance */
5 d4 R+ z6 ~9 b6 O1 vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 h$ ?9 n* P' h4 x( Z( \1 O- x/ Bvar loggerBufP = new LoggerBuf.Params();1 F" e8 R5 @2 r5 c2 F, K; X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! U( ^4 i2 r) b2 x* g7 i3 I6 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 d: {/ l8 o8 J& M1 h7 S4 q1 [$ I7 H$ @$ J; ^. ^4 `! G% `
var appLogger = LoggerBuf.create(loggerBufP);3 A0 u, T3 W- z8 s, d
appLogger.instance.name = "AppLog_Core1";% L; ]: i( {1 I
Defaults.common$.logger = appLogger;: k+ h7 [3 X' f
Memory.defaultHeapSize = 0x8192;    ! c% I2 q* L* y, S* p
Idle.idleFxns[0] = "&LEDStatus";
/ X# |. q* F, H  o% f3 dCache.initSize.l2Size = Cache.L2Size_32K;6 r6 E( b/ G5 {; R) Y
7 L3 p3 B7 l' V3 G: e
回复 支持 反对

使用道具 举报

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 */
6 w4 k* Z  d* t" R+ R% Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 y/ [; T; l+ w; ]$ e- V
var heapMemParams = new HeapMem.Params();
& }4 n# |8 V/ F0 E( Y% ]( ]$ rheapMemParams.size = 0x4000;
  W5 ?& H( `' E. A& {* M" n/ I+ J& @: u. ^5 @" }7 }" e7 \# I' l* z) R
var Memory = xdc.useModule('xdc.runtime.Memory');8 N) ^3 Y$ @, R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 O/ G' K( G( i) _6 [5 ^
: i* `& U9 Q3 G4 q4 k+ E1 S我大约calloc  每次共计大小为5K*16bits,
0 c  ^+ w. P8 U& o3 K% S/ b: T而默认配置才0x4000、需要改大。/ x1 U' x7 }# r* l

" M' m/ L  A( o# `! N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% b' V5 |7 \% ^, Z
Program.heap = 0;6 f$ h/ T% Z0 K! D& ~: t; f) k
Program.argSize = 100;  /* minimum size */- q  z8 u2 I4 B$ c' t$ f
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-15 23:39 , Processed in 0.046070 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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