关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, a1 j2 z3 R* K: p, m" ~% c$ v# g& d2 u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 O+ T6 ^; I2 m7 y- C! e7 c3 C! q; |
其他程序段。。。。。
7 i6 `  _- t% r0 y5 d! C% P
8 D: H3 b$ D  @) `   free(x_d);5 x' k' r) _9 B
/ k! e9 E1 J5 z
使用DSP侧单独调试功能,验证动态申请没有问题,
' w! J2 Y" ^; v/ K$ l  L' q) J5 c+ Q: K0 Z( `
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# }6 I" v6 Q$ M7 ]1 W

1 L/ M% G# s+ I- B- ~* e( C, G& l' }3 K

6 H- I1 D* @2 _6 E3 J$ ?9 P
7 z6 B' ?8 Z8 C" p
3 I2 d2 E7 W% D4 N# A) O5 {  S% \  @; c$ S2 n8 n
/ B8 Y/ z( }$ z  `* Z: i2 b

' o& o4 X; N" s* I3 X8 I$ Z" }, l

: ]7 a  J2 E/ T: W" A5 y* S5 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* N% J9 x  I7 T1 F! L4 ^, {' r" a我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ b. ~1 |# e; X  G: O; H; H# G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! s' v7 `6 O9 w  v8 e7 r- {; @' \% d

1 O  a( V  Z0 J3 c" w! [是不是需要在DSP.CFG中进行配置( C9 E$ b5 G# U, r8 V" q
我现在的配置为) h# P. \0 S7 P) [, B* Q
. @$ m6 v* R5 O6 |0 y* M5 h4 J! V: o
/*; f1 ]% Q: s2 v# k& K  C8 F
*  ======== Operating System Configuration ========% {( B% n' C1 s/ I: t- x" Y) W! ]
*/4 P. b+ ~( z. }/ f8 N. A7 `7 [2 X% {2 G. v
& Q% ^5 F/ F- \& M6 C  M9 ?- r
/* no rts heap */5 `8 {) i/ Q) |& Y- @
Program.heap = 0;
: I! I  o* ?4 n- K/ [3 H4 c# d7 |Program.argSize = 100;  /* minimum size */3 S# n- \( h. E  q' o
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 g; U, P3 U- u5 c; B* V- h
& n; M) N# l1 e# s5 I0 C/ ^+ m
/* create a default heap */, Z" p$ c1 c5 u5 I: h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 y2 S$ }$ Y$ O5 Y. evar heapMemParams = new HeapMem.Params();3 `4 o9 r2 M8 H6 g" Y1 u4 c5 _
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: s5 b' s: c% _1 x
6 Z* D4 d0 E) _- }; l( r1 f
var Memory = xdc.useModule('xdc.runtime.Memory');
$ H/ u$ ^1 L  n1 M9 Y5 i( ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 c1 c% o, w9 {. d7 b9 d
9 k/ l3 v1 J, ?4 E8 M# W3 E/* configure System module */
; S0 e3 W: ^+ x' K" M* _6 k2 J5 [5 ~var SysMin = xdc.useModule('xdc.runtime.SysMin');) Y0 N& M+ u0 a- ~
SysMin.bufSize = 0x1000;2 ^. ~/ x' u, I
SysMin.flushAtExit = false;
  S* e) h1 {, P5 G, V6 P, O; s  O, s) K
var System = xdc.useModule('xdc.runtime.System');
9 Z# m" R& j+ ~1 S. A' zSystem.SupportProxy = SysMin;
5 t) s# U" @  J6 \1 [- K* U8 c# V+ ~1 J: Q9 B
/* configure SysBios to use the lower half of Timer 1 */; {! a9 ~2 L; `7 t. v8 i$ [2 l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 N$ y7 }) g" e' Z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 E# s4 s# U0 N& ], r$ [$ `9 q
Timer.timerSettings[1].master = true;4 b& {6 w" E+ N. U1 ]
Timer.defaultHalf = Timer.Half_LOWER;5 n' i& l8 N4 c& ]9 ?
Clock.timerId = 1;9 O9 Y# T$ v; c) M0 ], {9 x( l! u

5 h/ g% o$ z  O, @
+ C4 N, j  W& R  w/*
# L8 H- ]( l. @- M: w4 s *  ======== Miscellaneous Configuration ========5 y* u' w2 Y2 n% Y+ K. L9 K
*/
' f+ c; ~$ I9 t0 ^
( N' m; W  m* n/* set default diags mask */
$ N) X  V/ p, F" zvar Diags = xdc.useModule('xdc.runtime.Diags');! s& b- p) e# P
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 m$ ~% |- s# m# N$ [2 a; ^& P" E
. `; L$ l$ ~; r, a/ x% n
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 N  o% n7 d, h7 O( g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 V$ z; Q& F  w# O8 ^/ qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! Z$ H: J+ d" z1 gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! Y) d1 O4 C5 ~! ]2 V- Z: u* EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! p( \, t& b; H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& q8 l9 G" `4 p+ B& B' ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ B* T, {( H% D+ e2 NDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 C9 M" C% Y$ ^4 K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& |5 \. v9 s$ b; x2 d4 J9 q0 C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 Q5 P% j: J0 o) ^6 Z/ v% iDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( I1 G) i) [2 i; b% [
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 ^$ N% n$ x" k2 S9 O( }8 DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; |8 r8 Y! u  V. XDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% P5 h4 T. C. v
' z7 }5 }6 H/ Q& I. p
/* override diags mask for selected modules */
5 r* X! C# S1 b: T1 ~7 ^5 M4 xxdc.useModule('xdc.runtime.Main');
5 z( T$ v  h4 P6 m' |Diags.setMaskMeta(
6 \" n4 y4 A$ P" b& t0 S9 j9 h    "xdc.runtime.Main",
9 j( H. i% x' ]4 d    Diags.ENTRY | Diags.EXIT | Diags.INFO,- T& B  b/ M! N. ]2 G
    Diags.RUNTIME_ON
: `: v# ~! @9 f' N; l);1 M4 r( g+ d; e6 e$ O+ L4 I! S
; n1 M5 }+ A; `) G
var Registry = xdc.useModule('xdc.runtime.Registry');
; Y' V/ I& `# W: B  |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 y& Q! C" H5 k6 ]; s7 w7 g. |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: P' P( y" ]  L) X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 N/ r! g3 g1 K
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! u# _5 _$ P6 h" `" L# P

4 [% z# {! s" {; k/* create a logger instance */
" Y! b5 N9 Q# Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! N3 [6 r9 L: f8 h4 q8 b( Wvar loggerBufP = new LoggerBuf.Params();
/ P4 W8 L9 C; ?- X: l3 N7 c- BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) `% E& m8 ?1 X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% S- d+ G; |( _( Z
7 z5 J+ G9 v  g- u4 [9 g1 l# {- Q
var appLogger = LoggerBuf.create(loggerBufP);# S4 v- \/ h  D: v/ z
appLogger.instance.name = "AppLog_Core1";2 @, B$ ^1 J$ P+ w: f8 m
Defaults.common$.logger = appLogger;
' i5 s& K7 S" c( kMemory.defaultHeapSize = 0x8192;   
$ t2 {3 @! ~6 Y" k* n- V! oIdle.idleFxns[0] = "&LEDStatus";/ K3 p5 Q5 B, L
Cache.initSize.l2Size = Cache.L2Size_32K;
' q* Z# @( C7 _# h- e0 f! [; n7 T2 v3 @$ 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 */
$ D$ u* d5 o0 avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* x; u: h7 J3 ~8 [
var heapMemParams = new HeapMem.Params();
5 _7 `% |3 D( e, w: ~7 EheapMemParams.size = 0x4000;
# D+ N- E* @) Y) o  ?, p; {2 J0 ~0 ~% z1 U
var Memory = xdc.useModule('xdc.runtime.Memory');
& t* V5 P: X: a1 i  z2 A2 j1 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& p; D( y* @( a. @
. S7 T' t/ a0 ?3 f
我大约calloc  每次共计大小为5K*16bits,
$ X/ B$ [2 w8 b3 @$ s4 m而默认配置才0x4000、需要改大。
* d  Q4 x& Q$ P5 x/ j
3 F1 \% d2 V7 s: E( l) f# n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' G" s: P' b7 L; T; @Program.heap = 0;- V$ x. A1 C! ?# `# I0 T
Program.argSize = 100;  /* minimum size */
7 W% f; {5 m( y' u9 TProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 05:19 , Processed in 0.040940 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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