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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- G/ B2 U4 ^; n+ P: a5 m, ~1 r* M- [" m
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: e6 f: l4 |- F# U. B- ^) D; L4 x' R9 |( V: I; }
其他程序段。。。。。& I0 c# }7 s" Y6 y
. w8 i" P' q$ g5 s( A
   free(x_d);" X' o$ L6 w/ V

3 M' ^+ M, G! H4 r使用DSP侧单独调试功能,验证动态申请没有问题,
9 s6 R9 D# B* {2 H% I/ d" n" T- ^0 o- C- Q6 \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# O' v$ \  p3 G5 j

  ?" Y: b( J$ M) ?( y* J4 O" x5 y! S/ }

4 Y" p. ~0 T$ J. x& n  T# V7 V) \0 H

0 a* Z0 S, C1 }6 r8 C) `6 x; e& ~/ i# n; B! V) o; _

* `! q; t3 t8 v" {. x3 n! {4 f/ R, ~" Y
* J1 Q& Q2 Z# N; o& e* H
" [; _) ~( G0 p& F- `$ ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% \  D9 g( p$ Y. f' u( u: N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 f. `$ c. h: _0 {- R(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 P8 j2 z( K# z' G( G: F4 s! A

+ _; {% ]6 n* O) ~- n& E! M是不是需要在DSP.CFG中进行配置
# R" H' [$ y- r  r/ ^& p( t我现在的配置为. c' [- o1 h" x% ~6 j
& ?: K9 {2 F$ k0 p! p
/*
. r: _/ {. {2 G9 i, q2 i3 X *  ======== Operating System Configuration ========
$ [+ I! D9 I: d* z8 m- L. m0 H" D */
  U% C* O2 d& z. s: _' Z: V- ]) U
  q, M( ^( ^6 C' C$ i/* no rts heap */& O& ~$ D. j6 k& E5 [, m% ]% D
Program.heap = 0;: M' y- v, O4 M1 F) u1 W6 \4 e
Program.argSize = 100;  /* minimum size */7 ^$ Q9 I* c" Y4 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 u9 M; d9 e% |" Y: o

5 M. D  ~6 t3 U, V/ h+ ^# ?/* create a default heap */  L9 q; Q7 d; w2 a+ p7 [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 p% r" L; {  I' s8 fvar heapMemParams = new HeapMem.Params();
' r# ~/ M. ^: r3 K& g% @# NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. Z; g# v3 l* s. W$ |5 u$ S" P* }5 I
var Memory = xdc.useModule('xdc.runtime.Memory');# f. ~$ Q& ~4 K( n% c* R! e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# v$ z; p; }6 a' f5 c
# b$ Z3 C( @+ Y6 ^" {' n# O* v) t/* configure System module */
6 X+ b) K# C9 Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');! U' U% Y, ^5 t- a
SysMin.bufSize = 0x1000;- _3 e$ n3 S6 v
SysMin.flushAtExit = false;
  R2 N5 g0 v4 P) f, @8 n+ m9 t) p
var System = xdc.useModule('xdc.runtime.System');
7 f: ~8 C0 G. nSystem.SupportProxy = SysMin;) ?) y9 N( O0 {4 T- t& v9 ]' s
6 `7 e( K& P% L. ?; O: v
/* configure SysBios to use the lower half of Timer 1 */' l- c0 T- v/ W! n2 j, ]3 \. e
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* s" X8 i8 _' s5 m8 K& K! F6 n" S" n( evar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* Y/ |( Q) {% R3 @% rTimer.timerSettings[1].master = true;5 a/ Y# Y2 B: _- n+ x9 b
Timer.defaultHalf = Timer.Half_LOWER;
+ q0 {+ B) ]) K' x( Q/ f7 ?+ E( p, BClock.timerId = 1;" Q' C' @! z: l! R4 q, s

! f% i, N$ w# N+ t' Z6 W& {4 _
6 R1 m  K) C3 V" h$ r/*
8 h! [- |, |' x *  ======== Miscellaneous Configuration ========  C, t, E5 I, u2 X; n' g
*/8 l3 P% R" O, f( _

- ^5 J: q& Y: L# z# B/* set default diags mask */
$ T% I- s/ D) R% kvar Diags = xdc.useModule('xdc.runtime.Diags');9 D5 B6 H3 \& p5 X4 t+ h
var Defaults = xdc.useModule('xdc.runtime.Defaults');* z5 V, a0 X6 j3 ?

) z. }; A5 `1 Z; H3 pDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 d9 t: D3 N) {% G8 V4 Y, S. O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. |& \$ x0 Q0 P# Q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% N2 u& G! I3 C, H/ A5 H' YDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. [4 k" z6 @/ R9 i% r: E1 D
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ d7 b  p8 O8 g. `' r+ a8 ^; E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: A3 ~% G: E0 ^$ [& QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  ^5 Z( Q- Y5 U& F. U' E; T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( m  E7 r. G$ ^7 v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ n0 a" d9 M7 {# J3 M% c* c9 MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  b! y6 D' Z8 ]. p
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 @6 w6 [. P8 ?$ I, [5 g- g" K
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 A7 R1 j  }' Z/ W0 c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 Z3 z! v2 E* G) f
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! u$ O0 B7 w( o( A5 Q* x

$ e( i& N! w! e! L/* override diags mask for selected modules */
" A+ U1 C0 n. ^; {6 O, |/ X8 Axdc.useModule('xdc.runtime.Main');; d) r/ D8 K3 F* n, F
Diags.setMaskMeta(7 |* U' a0 p' n! d& S
    "xdc.runtime.Main",3 l* V/ I) s6 {7 U% k2 X8 X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 F8 {& h6 x; A; j6 v& |9 j
    Diags.RUNTIME_ON( a* v8 q1 J* @7 I6 I  |0 o
);
% V3 Q4 o( d/ e2 e1 m
4 H3 ^9 u5 G) l8 G0 Q) vvar Registry = xdc.useModule('xdc.runtime.Registry');( H1 o' m* s  N5 r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ _5 V' M  B# ]# dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 e9 Y/ s; a' C7 q4 M- Y, B
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! _0 d1 W! R% a$ T. m6 u% Z/ t3 Q+ DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& ^9 U2 ]% K" x+ w, j% b) G+ t3 C. s! Q
/* create a logger instance */
; g4 K$ ]& y8 X4 }9 o! evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 b* W9 Y9 @4 I: h% F
var loggerBufP = new LoggerBuf.Params();
3 u" }8 _- M9 V; x) N( o, GloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" G- \' U8 l2 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' Y9 f' `' V* P  v% {0 R8 o+ W; O/ |  |: @8 a
var appLogger = LoggerBuf.create(loggerBufP);
6 J! W6 J4 {3 Q' y8 ~8 aappLogger.instance.name = "AppLog_Core1";
  E) _# y4 P" @5 q, RDefaults.common$.logger = appLogger;
& {) K# l, k! w7 V) J" mMemory.defaultHeapSize = 0x8192;   
4 r; R9 @" ?% M8 C$ jIdle.idleFxns[0] = "&LEDStatus";8 @& \7 z9 W* ?+ h
Cache.initSize.l2Size = Cache.L2Size_32K;* `- A% t. f% s

$ C( @, V6 G' T# |1 L% L' M
回复 支持 反对

使用道具 举报

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 */
8 t! \6 f1 q. d) b' t4 F8 a3 o. jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! J# A% j* G4 U
var heapMemParams = new HeapMem.Params();( G3 o) f$ O0 ?% a) B$ x
heapMemParams.size = 0x4000;1 z: Z% M7 L( m

# }5 ]4 B: S& d7 G, Jvar Memory = xdc.useModule('xdc.runtime.Memory');
4 {0 _" u% {, G9 yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 n- j# p) k7 H1 ~0 x3 E
  v- ?3 i- u" f+ l  a- {我大约calloc  每次共计大小为5K*16bits,
" M5 S$ R% ~$ S! o% Y6 d$ o3 C而默认配置才0x4000、需要改大。
1 ]" [+ u* c9 [
' V# \' X2 G5 g; V8 l. K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 A* }( J% p; I  Q) z
Program.heap = 0;7 c4 g- k0 S0 }% Q' [6 f  Q$ U
Program.argSize = 100;  /* minimum size */
" Q! \# \% w0 z- s/ A6 fProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-24 19:46 , Processed in 0.042093 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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