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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( S* V) m9 [6 R; a% N/ x
4 E& e; V  }4 [7 [- j, u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" d5 ?8 M4 f6 W" C, E/ W1 [7 H% N4 k: V8 W
其他程序段。。。。。
2 E# l. U4 o; f! k- V
# u, E- V) l" Z' Q# Q" T" h- w   free(x_d);
; W9 b' c+ P) R3 m' v4 S. p9 A8 R8 s$ ?/ \8 Y$ u# e! |
使用DSP侧单独调试功能,验证动态申请没有问题,
7 s: g# x7 |9 ]! d& h: I2 K$ ~( n
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 t0 Y( I( `; [
' H! `8 C' k: w' G
5 ?4 _  ^. J0 l" j! l. |

5 ^4 L# l+ _9 m& f* x" ]  b' k$ L4 V4 E
; |0 m& u4 P) g  v4 T# d; m: a
5 b& ^" g9 G1 f( v
" O2 i$ R* N- ~+ E
0 W# }, u; c$ i  Q  V
1 c2 d8 `1 {% W6 F1 |# A, i1 a% K1 N2 c6 {9 w/ F4 B

2 X/ t% U9 y. E/ m, }& G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( c+ e8 y& [9 R  ]我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# I# p6 T5 n% e9 @' d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ R. e, U% @) [
( `1 Y$ _: Z7 y/ N! l0 T) d! G6 F1 E; G
是不是需要在DSP.CFG中进行配置
, _7 V% {) a6 K! Z/ Y: G我现在的配置为
: V7 ]1 c' [2 U: D7 n
+ V8 y( V+ e/ w% z/*
7 r! L: c' w5 O( \* { *  ======== Operating System Configuration ========- k9 q  P* a. {3 {& }; B
*/) {9 v2 k# Z$ `' K! j

- W7 h% C. j! ?" ?9 K8 a, s8 b2 B/* no rts heap */$ h. i4 ?( h( Y8 X2 l2 M
Program.heap = 0;; \) F! Q# F/ W7 T& U1 t7 a& d9 B
Program.argSize = 100;  /* minimum size */3 b2 O# I# u- p9 H: p7 ^
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) K# N  H3 J9 T$ N+ {$ h/ B+ E" K+ a
/* create a default heap */( W, f$ X) I' a3 h1 \: _! @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- O4 N' ]* t4 L* q
var heapMemParams = new HeapMem.Params();4 D$ q- n0 S3 h% c. b( w6 {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, H# @2 b: M3 h5 P) N$ ]3 F6 r, a2 [' g
var Memory = xdc.useModule('xdc.runtime.Memory');8 a- }, f& A& W( _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  h! T) n/ D8 H5 v' ^  f

2 t8 g) J& T& A  X  L/* configure System module */! g% _1 O+ @- C  c7 f
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 X! V: {9 g  A) T, I( c+ CSysMin.bufSize = 0x1000;
/ \+ _& ?/ g9 f2 k) A3 ZSysMin.flushAtExit = false;) `) S8 v2 r. m3 j9 O$ ~+ z4 h% e
$ m  a% m. v* e* g' |6 V' J
var System = xdc.useModule('xdc.runtime.System');/ x+ o# `% ^1 N; ?
System.SupportProxy = SysMin;; E5 k* r# s. I3 E4 Z% ~9 z5 s, @
  N9 o8 m9 u4 {! ?6 G* E; G
/* configure SysBios to use the lower half of Timer 1 */, S4 ^- H4 r. H7 L' l, [
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* m4 {7 w9 p  gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
) [, m7 ^; Q# J7 bTimer.timerSettings[1].master = true;
, j6 F% l% K4 dTimer.defaultHalf = Timer.Half_LOWER;
/ D$ S, x( x7 B: |Clock.timerId = 1;
, `4 B4 H: d* ~& X
: s9 e$ m: x7 c: R' x! h2 E9 U0 ?" t
/*
4 A. ]+ q& y! @. r$ O. ^ *  ======== Miscellaneous Configuration ========
# n: c) t- O0 [8 l */) i3 j% ^  _/ K* H  w+ _
2 }, D: k/ d+ [% a" E( ^$ L
/* set default diags mask */
- _0 Z4 l. n9 a3 j4 ]1 L5 c) Dvar Diags = xdc.useModule('xdc.runtime.Diags');
: G" g( M% M* y, L% `9 pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ F/ B, }3 m8 U5 _$ ]* B4 j" _* p3 U8 i$ X3 q5 \+ c, f9 D' q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& x, W6 X* `  H' DDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 L& }: C% r8 ]% S) L9 E
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 r! h0 ^  r8 {8 p
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, L5 w, i# z* zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ T. |, o7 w7 |, GDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- D' T6 f9 }6 }2 r# X. \6 O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 k& Q8 ]7 k  r" k- `% mDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: F( W- H' m! p3 K: V! eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ }# c5 J* n2 _% S7 V
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ U+ t8 J" W+ S7 D$ Y+ _# ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 g& U$ K' b/ b1 h4 v' e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 N) u* w2 s* `' p* _4 v
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* \; b1 Q+ \2 f- C( z# F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, H. Z( m- f$ q- ]2 \

: D$ G! {' {/ Y3 M/* override diags mask for selected modules */" ]( x- B& U8 b% C
xdc.useModule('xdc.runtime.Main');/ m- [4 _' }  b! P  @3 j. B
Diags.setMaskMeta(
+ B* x' H% A9 o( i    "xdc.runtime.Main",
: U( T3 E8 b8 P- k    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 N3 K- @# j: S9 a% Q
    Diags.RUNTIME_ON
) z2 `( e! T: G/ C2 C! `6 J$ ^);( B( I9 [0 E& o, |! R' \7 N
. \& v; l3 b1 p' q
var Registry = xdc.useModule('xdc.runtime.Registry');5 p" O( k' Q* t
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 x% B5 W7 Y/ N2 kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( v2 i( e. M% {( R3 lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ x3 |& G0 K9 z' ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 i( b  h5 s9 C
6 E( R9 @& O' g* `; P" N5 c
/* create a logger instance */
5 a2 b7 G- f- v4 {: m: j# V: Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ [* Z, h# M. Y) Q
var loggerBufP = new LoggerBuf.Params();6 S, X- R  C/ w) z" d5 |+ H. @
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 C$ k* l) Z4 sloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 z0 F4 [8 {' l* M4 R0 V% d; H1 V& X& H6 X3 j0 P/ m
var appLogger = LoggerBuf.create(loggerBufP);- ]0 N+ i% C& l$ c2 C2 S
appLogger.instance.name = "AppLog_Core1";. K# J) U* d: q; D1 o( ?
Defaults.common$.logger = appLogger;
- ?! n% M5 Z2 }0 NMemory.defaultHeapSize = 0x8192;   
# r* S6 Y# ~5 @! ]$ eIdle.idleFxns[0] = "&LEDStatus";$ v2 O9 ~$ |/ F! }7 p. b
Cache.initSize.l2Size = Cache.L2Size_32K;
2 g2 u& a$ a+ L
* h: f3 k; f/ ~* ]1 I- c* b2 d+ t
回复 支持 反对

使用道具 举报

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 */
* _" G' z3 H. Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& g5 V- P4 u4 L/ m" Rvar heapMemParams = new HeapMem.Params();
  B) R* l! x: zheapMemParams.size = 0x4000;
' B0 R; i( _1 b" |6 g6 u9 ]# b  M4 [4 T5 j: A/ L$ ?+ K
var Memory = xdc.useModule('xdc.runtime.Memory');
0 v+ Q- T( c, ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 m1 R: R& Z+ ?+ Q: l0 Y. }: N
! h& u. P: }& z  A9 a: E0 c. U% [1 \
我大约calloc  每次共计大小为5K*16bits,
+ i; ~5 f+ n$ e! ^2 H而默认配置才0x4000、需要改大。9 t+ h- w* C: p' _$ H5 ^8 d2 R( g. U  C
& M. a1 ]2 P- H% j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 x5 Z1 l' x% g* ^
Program.heap = 0;- a) T. n& K: z( }: ~- @$ |
Program.argSize = 100;  /* minimum size */
; B: Y( O2 O2 _8 A5 lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-20 03:30 , Processed in 0.045808 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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