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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

; |9 w7 M9 |# o: U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 R: x% i: C, _6 P0 _

  q. V3 O2 P* X其他程序段。。。。。! k+ }) }, B  X* q8 A% i/ E% S+ V- a

+ W( J$ G) u& N  u+ ]   free(x_d);6 T' Q! T7 `7 w9 x7 A, S, C

7 j0 Q' O: r" I2 W- Y使用DSP侧单独调试功能,验证动态申请没有问题,
; f( X% N  Q, `
# t7 x( |8 m( P- s* f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" ^- R, W+ v; z6 F& X1 A; f

6 p, d# x5 J4 j& d
( ]1 c  o8 |& Z/ ^$ g; j! |8 A( N; O: r: G; M0 r
# }/ P: x5 z4 G) R! x
; ^4 Z* B5 E5 k+ X2 L

6 ~  O7 Z7 \: e
) y+ n+ }' k# o3 Z8 W$ j; M) z6 s+ w: W3 c3 _+ z9 C! |  |

! p( I2 O; L4 g, l& c3 |
$ A0 X: z/ @: {! D7 N/ {4 T- A& y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 T6 y, f0 S; U% K# A' N; G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% |; s6 F! ^* a(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 j4 {8 }, |- C

& z2 _6 l, H+ D9 c% k0 C, C是不是需要在DSP.CFG中进行配置
& E. A  ?4 E: c5 f) a! ?我现在的配置为# c7 ]1 q4 V8 p+ ]& X
6 q9 a  w4 Q  P, ^' ^. x8 ^5 x+ s
/*, z" P2 @- N# E) M: t9 R. ?
*  ======== Operating System Configuration ========
+ `+ l$ o6 n: ?! `; c) q9 P% { */
3 f2 l( q! N/ t
; P% R: b* ?$ Z/* no rts heap */$ I- }7 V8 e! j8 c/ ]; H
Program.heap = 0;
/ p/ ^$ g$ G5 g3 WProgram.argSize = 100;  /* minimum size */
# \/ T/ v$ R& a- g6 N3 |Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 _6 X# S! t7 z/ ^. |; W7 o3 f& G/ ~" x/ J
/* create a default heap */
: P; c, W) m' q: k  m" Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% \% z7 L2 d0 z2 W9 @+ H
var heapMemParams = new HeapMem.Params();
) y! P1 P- b, s0 BheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 L# P6 p0 @# n& M' p7 g" K  u- A$ b
var Memory = xdc.useModule('xdc.runtime.Memory');. M4 K6 I  U3 n& n& E3 v) Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' @/ o1 I7 U. x
+ L% T) |( m7 q" d9 F# w) e# e" m/* configure System module */
  m! o: y5 Q" r0 f' P- [var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 `8 a! p6 a5 {# n5 XSysMin.bufSize = 0x1000;
6 q) `; W; R' L+ e; f/ lSysMin.flushAtExit = false;2 _4 J+ X3 T) r8 o- R' [7 @
+ f. t) {0 c0 g) S
var System = xdc.useModule('xdc.runtime.System');7 p% \/ a7 s/ V) }3 i& ^, S
System.SupportProxy = SysMin;2 x2 a& _7 W- U

7 d* z0 i) @6 `; D% P3 w/* configure SysBios to use the lower half of Timer 1 */; ?: p8 ~4 q4 W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  B5 \- f7 u5 c2 i* M' uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! ]8 F) x+ u" V+ v8 ^, t5 t% L2 RTimer.timerSettings[1].master = true;5 o- A+ W" r; d' p5 t7 P
Timer.defaultHalf = Timer.Half_LOWER;3 p1 L/ F, h) j  O; o, b5 h! m7 `: j! G
Clock.timerId = 1;; I8 Z7 f# a  i/ A: R
, H: C; x. V8 G
' J% f2 m7 O' j, v
/*- D5 u# Z+ M7 L+ j% q3 P8 K( `1 E' L
*  ======== Miscellaneous Configuration ========
9 u+ T7 _7 Z- b: \' r1 G2 Z' x */
# c5 Q8 a* _) b# p/ B, g* K# l
2 `" f& o" s0 s, {2 T/* set default diags mask */. W4 `( ]) I+ |7 a1 M9 `" W
var Diags = xdc.useModule('xdc.runtime.Diags');+ h5 f; H& d. n) o( i; d
var Defaults = xdc.useModule('xdc.runtime.Defaults');) F, p& W% a% ^5 N% j4 F' M  s! Z1 m

0 r3 L4 K# U8 y1 j3 {- lDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# m4 @% j3 r7 ~* G% v4 @# `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 t( Q( w$ x8 ?- f" W: i3 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 j) L% V# `1 D4 ^, {$ i6 G7 \Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" v: |% o$ S9 U* I; i& r, h* oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 U- Y# d( A, q) |" Q( g  [4 CDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, F; J4 _$ w5 b) [2 _Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* l1 |( M5 Q$ A: SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, b) k: V+ b; B  `, T& L2 _: H+ B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, U+ P8 E% H5 L, `+ {" gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 {2 X9 D. Q, v$ k) E; N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 u. `5 m5 D8 c$ `! V
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; E  a# r- K7 L  _. d- Q/ x& kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" B; G8 [, \2 ~1 W6 {* R" GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& U: c3 L2 ^5 ]6 `  H( [+ b

' @4 a+ Q: Z9 B. \+ B$ V, c( s. d/* override diags mask for selected modules */" n& n5 x$ R/ q
xdc.useModule('xdc.runtime.Main');
' A/ k; R( |) A; Z$ V/ pDiags.setMaskMeta(2 r+ I; i, g0 a+ _& j6 b
    "xdc.runtime.Main",
5 s! l* S6 f; {: T9 `6 R    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ ]8 D5 V$ q# |/ b# M& ?' D7 Y) h$ x
    Diags.RUNTIME_ON& T$ u% m) H  P- ]/ c$ |
);+ e4 \) k& N5 ]/ v7 v

3 f# s( ~, ^3 k: f9 x8 z+ v( svar Registry = xdc.useModule('xdc.runtime.Registry');+ @) A& b5 X+ j" |- m1 j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ h& n) c- P' }' a1 c6 b# L$ O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, [4 h0 o! }; x/ V) j& j6 P% x  b5 T) A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. U, T/ @" s: }) G) G! J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 b5 |6 J; h) D7 D
/ R2 A$ z; F" O8 s9 I+ P/* create a logger instance */
! C) S- U  E$ [& W4 m2 `* Ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( O1 [% P  n" ^- u1 B5 u3 w' \var loggerBufP = new LoggerBuf.Params();5 d& m- R0 `' j2 ?$ v. ~: u2 |
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 i$ G3 X/ ?0 b9 L7 P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" q* K4 j2 ~7 a' \
/ C2 W. q8 G% |$ P. p" [# E2 Lvar appLogger = LoggerBuf.create(loggerBufP);6 Q; z% ?9 b$ S& K; X
appLogger.instance.name = "AppLog_Core1";
9 O/ {3 L0 h/ ^Defaults.common$.logger = appLogger;
: w9 w$ ^; l; jMemory.defaultHeapSize = 0x8192;    9 H3 }) \9 u. ?
Idle.idleFxns[0] = "&LEDStatus";6 Z6 ^. a0 t9 [0 x2 W% y! ^) F
Cache.initSize.l2Size = Cache.L2Size_32K;
2 P: I% Y# e1 ]# Z5 _5 V' C8 j1 a8 a
5 R6 r  l0 ]2 H) a4 W4 F
回复 支持 反对

使用道具 举报

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 */5 d4 y7 `8 d7 o9 t. X+ e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: W! P* Y- i( u! Kvar heapMemParams = new HeapMem.Params();
: v9 p& s' O( h7 K+ D  `heapMemParams.size = 0x4000;4 B: m/ r1 w6 l) h

& P/ A8 ?" J1 n# @6 p2 Dvar Memory = xdc.useModule('xdc.runtime.Memory');
& y2 N0 D8 z' X1 C; aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ Y  D) }% T0 i5 R/ W2 C& q; b( K7 V2 D
我大约calloc  每次共计大小为5K*16bits,! F1 B1 Z3 e' d# ^* P$ h
而默认配置才0x4000、需要改大。: g( y$ ?3 r$ _3 O. b1 L1 N& M4 r6 l

- T+ l! `8 t$ s! k" O0 P. |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 T5 k& k* i/ z  G3 v
Program.heap = 0;
- m: `4 G) {- R! CProgram.argSize = 100;  /* minimum size */
8 [1 D' e3 c2 D$ b2 oProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-18 17:18 , Processed in 0.042985 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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