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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 q5 J/ r7 W8 g6 M: P

$ R3 v* @2 t: Y) ~# ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ r' \* X7 z3 t) \/ c6 P
+ V2 i. e7 ~6 M* _) q: T8 k  H其他程序段。。。。。" [$ b0 [! ^+ A6 P/ t% g3 O* @

3 H* R6 {" t3 r8 n5 l& R! G: f, s6 P   free(x_d);
. u% Q8 a+ g7 n# W3 Z( J
& Z) T* C2 D: u: b- d7 J使用DSP侧单独调试功能,验证动态申请没有问题,
9 _- V# f" ~7 {: P& @/ V( K) P& P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! _! v) ?5 U( L+ q
+ j/ H/ }/ m! Y

! @3 t2 Y6 o* t0 v+ F' a' J" e- h7 Y6 l/ x  d5 M

" H) X7 d7 V* f& B. }5 d
3 o8 H% ^7 |! ~. ?* l7 ~0 j6 `+ X- }6 i% l5 ]- n4 X: S  }

0 f; u# S# N# b8 t. W$ ?. s" _  E  s4 h. Q& ^, g: J0 m

4 ?# `/ R8 B/ j& U
5 h" S* G) s: e: S% E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" j( M# m8 ~  a3 R: h3 I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' u/ _, f+ r3 [5 h2 f$ w* ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& L+ ]6 Q8 z1 |+ Y+ y/ r5 R
3 q7 b0 v3 J/ C. ?$ N3 J& B
是不是需要在DSP.CFG中进行配置
0 R) y5 h1 J/ i) S+ i我现在的配置为# \7 s& D( L  t( K- _

3 x) U& r6 v" d/*) C3 A4 f  v1 u
*  ======== Operating System Configuration ========
5 D7 I' X; s' x7 o */' ~1 o( v! i# ^
" f& _* T  L5 F( O
/* no rts heap */9 ]$ j8 `& e6 D0 @- W
Program.heap = 0;& Z! ?: e' a* j6 g  z% S5 ?
Program.argSize = 100;  /* minimum size */
! h& e0 p2 q7 \! yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 x! n4 O$ d, H0 j
, C3 s2 P4 k" @. z" o/ v
/* create a default heap */$ W1 c9 z- Y5 ^% \' C5 A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 t% X8 T, o* O8 _
var heapMemParams = new HeapMem.Params();
! |! A+ H% E# k- l0 ]+ d; B+ aheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# {) Z4 d$ s3 E6 g- b
  T4 n0 G# k6 E+ d0 t
var Memory = xdc.useModule('xdc.runtime.Memory');
; G# B, }! W2 F7 @& F/ DMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 n, O3 C8 I# Y9 U- K2 ~$ S+ ^0 q) l! N- E+ D4 K; f
/* configure System module */3 w" N; f6 x  J- R: a% m: o
var SysMin = xdc.useModule('xdc.runtime.SysMin');1 T1 ^- x6 P( ^  @- w6 Q- F: r
SysMin.bufSize = 0x1000;
* L8 P, v1 \( r6 J: hSysMin.flushAtExit = false;( l0 q: M, `& q7 D% c0 J$ `4 Z( F

) `, J' n; ]2 a6 [9 X. @' nvar System = xdc.useModule('xdc.runtime.System');
8 O2 D) g1 Q3 D; x% u# ^System.SupportProxy = SysMin;: Z  Q% X) t1 S0 W  A+ X& e

3 K( m0 g/ C$ H4 Z/ R6 ^" ]/* configure SysBios to use the lower half of Timer 1 */
# }/ p* i% Q8 D' Z( Y) U( x0 \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 S4 W  S: p: D+ Q* V6 `7 t! [
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 D$ K5 D: d7 `3 {* GTimer.timerSettings[1].master = true;
* B0 c- E/ i4 V1 G, X. kTimer.defaultHalf = Timer.Half_LOWER;
3 W9 V# y/ p5 A4 P" [0 L9 _; V5 lClock.timerId = 1;
8 G  i+ M$ w! R1 s
. M" W- R$ ?8 e: q+ u
# L5 y( d2 L; `& ?$ a; ]1 @& T. D/*
& V5 w  B1 H! y  r" p( P! r *  ======== Miscellaneous Configuration ========. V  Q' ?" s/ |/ w# M
*/0 X' x1 k5 o5 l( j
" O8 `) _  l5 K1 P; S4 k& |
/* set default diags mask */
; c; }+ x5 b  I6 Z2 w& Mvar Diags = xdc.useModule('xdc.runtime.Diags');
& a; Z" _. a8 l; Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 T0 d' c# t; R& _2 d; S) \5 I$ k, [: [, S' V5 ]; v. {9 ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 ^4 t' G+ j: `+ n/ o& iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 s/ U8 k% ?* F; KDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: v: f1 H  l. K2 M4 i# @6 R3 H# o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  h2 O% s# l! E9 m! z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# K9 p0 m2 J- R8 I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; p4 U1 i+ ]# W8 Q, {0 NDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 s, Q4 y/ T) Q# jDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, _. |9 a: q3 k6 _; C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; U  m. b) {7 t( L) y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' Q- c* ]8 \# P0 G+ z) rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- G7 s: P# I; k
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: J' `& `( L) t' w& o! ?' x$ Q* r
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ [3 M0 l7 _& o* i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. c& ?1 X$ a, N! o. w& K& V' B( u4 @

$ t( S5 ^, u7 b, [/* override diags mask for selected modules */: l5 q& H" u/ f. m; j' D$ {
xdc.useModule('xdc.runtime.Main');
3 [  S2 m! x% L7 }4 ADiags.setMaskMeta(" p+ m1 t! k' m" N
    "xdc.runtime.Main",
+ s7 `7 H# k" c* N; @3 m  k/ h    Diags.ENTRY | Diags.EXIT | Diags.INFO,. Y1 O3 ~/ q8 {5 j! b
    Diags.RUNTIME_ON
. C, ]' G& C; F6 M8 g+ P  a);$ _2 d. P" r  Q* ]7 K

" N& F# h1 J6 P% uvar Registry = xdc.useModule('xdc.runtime.Registry');0 w3 _) Z9 b3 G0 W4 g; Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. J6 ~" [+ T- k$ C7 ^+ M$ dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- z( v; b0 L5 Z  p0 J: f' K
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 j8 u& L. J& ~; d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ H% I' |. S' Y4 {: Q1 r! f3 W  e4 U. z, |' }0 c5 L) j
/* create a logger instance */
  y- P4 V( k$ F8 g  H) ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 P. f5 h; n3 `6 q: z
var loggerBufP = new LoggerBuf.Params();0 |/ i1 z5 A! v9 w0 a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 K5 ~$ H' e, I4 Q) v. I5 u$ aloggerBufP.bufType = LoggerBuf.BufType_FIXED;
# W0 \# a& [% @3 o1 q" u5 ?: C4 m4 G- H+ l7 j
var appLogger = LoggerBuf.create(loggerBufP);
& b- N: e0 r: UappLogger.instance.name = "AppLog_Core1";" R' I) e% ^3 X) l% f. \1 v" m0 _
Defaults.common$.logger = appLogger;
& E7 E7 L, A: s9 E6 kMemory.defaultHeapSize = 0x8192;    2 m9 B3 q: u. g  \
Idle.idleFxns[0] = "&LEDStatus";
8 o' ]+ Y% ]. g3 f3 P0 {( L: zCache.initSize.l2Size = Cache.L2Size_32K;
7 _* A4 p3 y" ~, ?
( c/ F9 G. ^# I1 C; B
回复 支持 反对

使用道具 举报

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 */
! }: s, `: V9 H' P2 Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! @) N  P- R0 M4 N
var heapMemParams = new HeapMem.Params();+ t: B) l) s% B) [4 ]+ |! o
heapMemParams.size = 0x4000;
( _# K. x1 T# |7 T" W+ p% E/ w  d' L) s0 ?
var Memory = xdc.useModule('xdc.runtime.Memory');: h, E3 ?4 [+ s, S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" R$ @8 e, X4 y
* V3 y/ w6 j, p0 ?+ Y我大约calloc  每次共计大小为5K*16bits,
( e2 i& A( x# r6 V" u+ a: ~而默认配置才0x4000、需要改大。, `9 Z, ?4 w* G1 L& c. M7 I8 {

8 ~7 O8 S) W- _# _/ S) n* q8 t. H& s- T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; D6 e6 ^: v- ]/ z/ LProgram.heap = 0;
5 S, M# e6 U3 l* y4 D$ K0 A  mProgram.argSize = 100;  /* minimum size */
/ L! y" s0 L% L- Q# @0 n: y& qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-25 16:46 , Processed in 0.041311 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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