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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 V+ W( a& v% C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; d" Y* c! i' }4 N; H- b8 e; T
; f9 Q+ m& J" @! r
其他程序段。。。。。
5 E0 d! h" @7 D2 `' F2 ^8 d" G" J7 e # }7 b1 E) M8 H! R$ G- L: n
   free(x_d);
1 H$ t0 C6 w9 U
1 h3 z# `" Z, f  Y$ J+ L使用DSP侧单独调试功能,验证动态申请没有问题,/ w4 T7 l3 _) W  T/ X9 M

! T) A$ J3 [/ G. }4 j' S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 [' C/ k: {7 Q9 I4 I0 s

$ C  E3 Z7 v1 P. x& t- I& P$ G2 @8 b7 L3 I# S* _4 C

6 f: F/ n1 s5 D: m8 a* t
) ?6 _+ w- r  H7 ]+ P% U4 H9 B& J! x. a2 x' l8 w! x( a

6 `. s# i4 y3 L3 t& t" a% j
- |. w3 k- \& ~  \
. @$ F' ]6 M8 H9 T3 `" m& I2 v! d" j% C5 I

2 P$ `! ]4 }; c7 D0 w* z# m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- ?, x' \$ k9 g4 H) y) h: n8 G0 w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 |& v. e" C) y, S- G9 E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- I9 ]8 m9 [5 a8 S2 I1 g7 Z- F

. a, r5 @& O, r8 F6 q; W是不是需要在DSP.CFG中进行配置& j: c; Q7 A( r- g$ y
我现在的配置为2 i& U+ M7 I( I$ _& l* F

. z3 ?3 X# [1 Y- V/*( ?( ]' R" D( i; _* n
*  ======== Operating System Configuration ========& B) [+ L, `6 l# A
*/
) O: I/ K, V! U, s8 j- d4 J
8 a& l* E- A+ k0 O# R6 ~( |9 Z4 L/* no rts heap */* J, v. N) k8 m, y
Program.heap = 0;+ ?/ Z# F; |9 J' Q6 J( I) |8 h8 M
Program.argSize = 100;  /* minimum size */) {- I" W8 }) [4 q$ L, @2 h% v9 I) M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" J: U2 d" W# a0 n) v. T( u
, p2 J. e) {5 R! `+ d. ~
/* create a default heap */
: d" F' @1 x4 R  }; W1 t. z# Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 t' k9 ~2 o4 |6 g9 \
var heapMemParams = new HeapMem.Params();
4 s2 K+ Z4 Z+ L, r; u2 {. ]) @# }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ {1 i) d$ C$ ]# l/ Q
& m' i' k2 F; L) ]8 T0 H9 x
var Memory = xdc.useModule('xdc.runtime.Memory');" n6 b0 ?! G0 k, o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 \: ]) {6 V6 J
& v9 _$ m5 q9 j  S
/* configure System module */1 ]2 w" r+ s3 H% R" w# i& Q
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 z% j" c- n/ z7 @SysMin.bufSize = 0x1000;
4 C( n' X6 L$ H% l! n0 p2 e: mSysMin.flushAtExit = false;# O' v! c2 r: z, ~* L
5 n5 f' K7 `8 \# W1 r/ I
var System = xdc.useModule('xdc.runtime.System');
4 g) r8 t8 ]* y6 M5 q$ T" rSystem.SupportProxy = SysMin;
9 t1 K5 i3 K4 l; E  u$ @0 S
& `  q% d! C: ~! p- j# J- \+ x/* configure SysBios to use the lower half of Timer 1 */
0 `# R  d5 S2 {$ tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 d) n8 H, C; D7 N! Z- Y, `9 B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 ^* g- t# i4 u, U0 k& z2 B' }
Timer.timerSettings[1].master = true;
  p' ~9 U; |- Q5 UTimer.defaultHalf = Timer.Half_LOWER;/ N% T0 s9 ]5 E- ^" t) x3 s
Clock.timerId = 1;& v  Y4 S3 w/ g) o5 |( `& d

  N; O9 S! q% d3 m- ?# j* f
3 v: T  H6 c% T" Z. I! e/*
/ r) L0 l% _3 R% p *  ======== Miscellaneous Configuration ========/ y0 e* d) T3 n' ~) G
*/" y6 ~; y" C  R- ?% i

8 b+ b, Z- M& m/* set default diags mask */
. w4 Q1 g2 I3 h4 nvar Diags = xdc.useModule('xdc.runtime.Diags');+ T7 e  w6 i' Z( `( b- o
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 y4 L! r0 Q% K& U8 @1 v' w) {( a2 Y4 o8 n, ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 ~# g& i8 B) {3 a- c) ?: ?; f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ x9 O  U$ z4 C0 X" WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 z6 [9 W+ A' e. PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 m: D' D0 V' U4 _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- y" F5 c* Q% K( x( m0 @( FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 z& {3 P+ e) Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ q: B4 d! p; w% O3 I9 F& qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; a+ j& z7 R% v' i% a% SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) x6 i% y7 M! z) z" t' G- xDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 C& N' Y  b- t" {0 I* mDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! i+ z. L. b/ \( tDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ l3 s- D) M/ A6 N$ j- y+ X/ \$ H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 P. l  H# A- ^% L' o) SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 b- r; L& L" M( z: b1 x; G7 ?
. y3 f7 ]  e! d* |6 _& y4 ~$ m: Z7 }
/* override diags mask for selected modules */
' V2 Z- k1 p! \" M1 g" J& S3 pxdc.useModule('xdc.runtime.Main');& {0 N. y( [9 c3 |
Diags.setMaskMeta(( {/ e  `+ U( Z5 D
    "xdc.runtime.Main",
" ]* a1 `3 S' J& q: H    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 Y2 L6 E  P) g0 {! i
    Diags.RUNTIME_ON4 T% k4 V, `9 v, s
);) f1 X- G2 A" }; l; |
& b  G( r7 b1 K# p5 X/ h: Y  g
var Registry = xdc.useModule('xdc.runtime.Registry');4 J1 }7 |% A! p; ^8 M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 z+ ]: _6 A. d# ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% l( K, n* o9 z1 K) @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 s7 ^0 Q( ~. d' \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* l3 ]: Y7 r% x4 T1 [; k/ J& v  N( i/ G; @7 C
/* create a logger instance */
) w% A' ^! M0 n5 ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ S' J" I$ _2 B! Q4 }! v1 ?1 Pvar loggerBufP = new LoggerBuf.Params();
0 l) M$ I# s8 M9 Z! {. DloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 k0 Q+ o8 ^# floggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ U  B& [! W& V( Z) G' l5 k- I& J
var appLogger = LoggerBuf.create(loggerBufP);$ ?( Z/ J7 h2 L
appLogger.instance.name = "AppLog_Core1";
) y/ Z/ ]) ~9 e; ~% v0 u. b; |Defaults.common$.logger = appLogger;
# A' W% ?. l6 ]7 V3 h1 ^Memory.defaultHeapSize = 0x8192;   
$ \$ d! x" v' ?Idle.idleFxns[0] = "&LEDStatus";
+ S& Q; ]7 W# R" w4 HCache.initSize.l2Size = Cache.L2Size_32K;) r- C  r) a9 A) P4 q9 w$ ^
* a  I' |9 k2 j$ E7 v" d+ z' Q
回复 支持 反对

使用道具 举报

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 */
; }9 D6 y; ^: J' O$ h- b9 @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ g- N; a6 y; P* w& m6 rvar heapMemParams = new HeapMem.Params();, N0 K) o  N/ K8 G# \6 m* }& ^; B
heapMemParams.size = 0x4000;
, B* _& L8 h6 ?$ \3 e4 c  T; i% ]& W5 |
var Memory = xdc.useModule('xdc.runtime.Memory');
- y1 |- F/ q4 a& ~" {3 R. N( m* bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 W; d: e$ c! B; G0 a1 y* r  K" H

  J3 e! c" s" X3 Z- {我大约calloc  每次共计大小为5K*16bits,
6 B) ]8 V% N+ Z而默认配置才0x4000、需要改大。
% M6 f# a/ m! U3 N' k$ ?/ V! X" `: ]# r& `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( L: c' C6 X' X0 d: k! EProgram.heap = 0;- w1 A. M  Y' \( X. d
Program.argSize = 100;  /* minimum size */
- s: W4 F- b+ m  W  ^" i- BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 09:47 , Processed in 0.042389 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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