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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ j) G7 |0 j6 }0 g2 R( J  b$ G0 @$ Y
9 x1 ^/ r3 ?. g# A, F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( [$ N  }3 F- h* |( t5 T6 E! p" U) _2 k+ |
其他程序段。。。。。
8 x& n0 o: L. J3 J3 n ) t% R! v- T4 X- a3 A# E
   free(x_d);
, c2 K+ T3 e. A; `
5 Q4 q6 Y2 M/ o2 }  p: t使用DSP侧单独调试功能,验证动态申请没有问题,
1 k& T% u4 T6 c% Y- m) x2 ~0 L8 C# F6 R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  G& C2 N1 Q0 x- `! j4 F, L

7 V. W* F/ @" f- n4 G# t* v+ w7 {) z2 J, x, |2 V
5 i* s' u/ ^; N1 Z

2 n' g4 F2 _: B( ~: t/ H% {* r# F( E) W5 w+ k$ m7 p$ H( y7 M' \& a
4 B4 a  {$ i/ r& x( |+ g# Y

' ~8 \( h2 y+ b7 l6 _. _' z7 R
& U) f2 e/ s; w7 U! y% Q7 a* M% G' k9 Q! w) y: h! M; F$ k% F

* j1 J3 f: Z2 r6 G) ?2 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 _- ~' g% t* J( k* m1 e4 g
Program.heap = 0;
' P% h# }. N4 g1 O# fProgram.argSize = 100;  /* minimum size */
) ^6 ]% q; t* E5 K& A7 f* FProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& d4 p: i0 u8 T' z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& d* \1 v$ Q+ M7 G* L/ `( }# rvar heapMemParams = new HeapMem.Params();8 e, X1 g9 Z  a+ A
heapMemParams.size = 0x4000;* r: m+ D! D2 N; q, Y8 J. [8 S& e  }: C

2 b" J5 G8 ?, r' Y, ^/ F1 D. U, O" fvar Memory = xdc.useModule('xdc.runtime.Memory');9 L( @7 \; u' }1 x8 y% {9 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* K4 B! z- Y/ e6 c: ]

- K5 V! @: v2 i0 R* u/ k我大约calloc  每次共计大小为5K*16bits,# a" I, V, N- ?$ M
而默认配置才0x4000、需要改大。2 n1 I) v# l! Q3 f  s; G" |
  ?4 K8 b3 o0 M; g4 r/ ?6 c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" ]: \1 {4 q' c
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 L9 P5 g: [* y  x" [# U/ v! w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& V. n- D: b6 L

' i3 m5 h/ Z0 Q4 _是不是需要在DSP.CFG中进行配置
" J7 ?% W; R- B. b* G4 i我现在的配置为: ^* Y( {4 I( G2 W% [& \
" q+ y6 i5 c; C# J, j
/*( }% \; @7 O# }/ _) f
*  ======== Operating System Configuration ========6 Q, a6 f! b* `/ ~, p' m' q/ s
*/
1 Z' q1 J) ^: s- R7 |) C& G  \
4 O; \7 k. Q& Y9 l1 x6 K) p7 k& u/* no rts heap */
& L* o' d" F: @: FProgram.heap = 0;8 F3 p* Z* ~+ \9 A; x7 H; Y
Program.argSize = 100;  /* minimum size */
3 `$ X, @4 k$ c/ p; CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ G4 @- G4 D# [' x
1 ]( W7 G) S, a+ H2 _
/* create a default heap */0 t- s5 y& n4 d1 C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) Q1 g" m* y) M2 H
var heapMemParams = new HeapMem.Params();
6 l, @% U) T  F& {; O: v2 LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, q) t& Y+ V9 h, H3 r9 a% {9 H+ k+ g& |. o$ E" ?/ H( d
var Memory = xdc.useModule('xdc.runtime.Memory');, h; x& X: |4 F. S3 V: K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# I! R6 b& _1 Z! z& a# F" q- h4 u9 R" r' r
/* configure System module */# Z( ^% E/ ?5 [
var SysMin = xdc.useModule('xdc.runtime.SysMin');
% S  D% C, J( ]* D3 LSysMin.bufSize = 0x1000;
+ U# X4 t! q. W; F) C' K- }SysMin.flushAtExit = false;
2 m! x1 R( k4 s0 u3 w2 O* K3 e; l  F" W4 k
var System = xdc.useModule('xdc.runtime.System');" t5 q8 R: s9 Z0 S7 }1 V8 B
System.SupportProxy = SysMin;
' Q$ e3 e0 `9 n- ?/ [! G1 @- Z! ?: K+ t4 i* s0 y
/* configure SysBios to use the lower half of Timer 1 */
0 ?3 y! _8 i5 g1 a" Y# wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 _" y' Q, n6 y* Y2 @# {5 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  D, ?% A* s2 q; d6 J: CTimer.timerSettings[1].master = true;5 y* a9 ~  [9 w
Timer.defaultHalf = Timer.Half_LOWER;
7 \! T/ n% J' P! C) t/ M0 [Clock.timerId = 1;; s( Z9 N* y2 k9 w' u  E
( v3 `6 ^& `& D7 X8 e/ |

+ ]3 ~8 |9 K! {9 r+ K2 S* h8 }/*
9 A3 u) [9 {# C: ~+ z+ v *  ======== Miscellaneous Configuration ========
2 ~2 O) e4 g& |0 l- W */
* G, R4 h' E/ `6 c* |& g
6 y9 \8 D2 R3 X# ~0 ]5 f/* set default diags mask */
  K4 P* `. Q5 @4 U$ ]! z# B' uvar Diags = xdc.useModule('xdc.runtime.Diags');
* j/ U9 F5 @# I; Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 x7 s6 f8 z$ k$ c. h" x$ {! D* {7 @5 R
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* l1 `2 Z3 G8 M) J4 j7 B6 pDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ o. _( f: D% T' z! n( N* r
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 D/ Y) i3 {9 L; f! W: P8 p( \+ \Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  }: d, J! ]) k$ t3 MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 F2 p- Y6 n2 s& x4 X
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 I5 r; X6 s" [
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ w- ~5 L* ^/ L/ F. w; U# iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ t: C, ?6 L3 S: b6 j' n
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, H: k+ y/ x4 Z% z9 TDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) n3 Y9 L3 @! \: a( ADefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 O$ z0 K0 z( ~' iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ `7 [) M2 ~, @! T
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 ^  g6 o) m$ t
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 J% K2 z& Q/ a6 a, j/ R; i
& N; V" Y" C; M  m9 i& j& O
/* override diags mask for selected modules */
1 K  e. ^+ g2 ~xdc.useModule('xdc.runtime.Main');
. \) c# S  k9 i3 g) L  aDiags.setMaskMeta(# Y% T, ]7 e  ]2 j) T! N
    "xdc.runtime.Main",4 |, k0 M9 H4 j5 N
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 D( g2 O3 t$ n$ g    Diags.RUNTIME_ON
, w8 Q, c" U! `* ~+ J" J( T);- I1 y; h) S( E* _5 L5 C9 N
! Y; H1 s" ~% C% @( C+ i
var Registry = xdc.useModule('xdc.runtime.Registry');
6 L. k+ s2 K! ?1 x8 A6 ?) uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) O% r& a; S" o: d8 GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; w, e0 O) p. c4 U' T/ yRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 z8 [9 ~4 E, G" j' h7 Y; BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;. k7 F* s; \5 p$ h

  R( ]0 u/ G9 U( K% T  {/* create a logger instance */
& y2 s7 Y+ {6 y- Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  I' i( n7 A! ]4 q% U1 N. E
var loggerBufP = new LoggerBuf.Params();+ h) ?& `8 q* x8 A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- G/ m2 O2 t, ~/ Y0 N9 jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 P, n- @- j0 Y9 V9 I# A5 l4 {+ \" f; j9 F: F2 \
var appLogger = LoggerBuf.create(loggerBufP);
& I7 k+ G; Z  V' U$ IappLogger.instance.name = "AppLog_Core1";- P2 s7 j' T6 X' b
Defaults.common$.logger = appLogger;$ b8 i5 T7 h+ m5 |" w, f2 f2 a  O
Memory.defaultHeapSize = 0x8192;    0 l; W# [- ?% o6 F
Idle.idleFxns[0] = "&LEDStatus";" M, t' P! C& P) Y# P6 b$ K
Cache.initSize.l2Size = Cache.L2Size_32K;# H& g% r2 _; {6 Z9 C

! q' Y. j8 i  B4 w
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 03:12 , Processed in 0.045038 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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