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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) u$ U1 U& z* Z% b1 p) i$ g+ V4 |1 v6 v& b) X8 j
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* R9 ?6 l- T# g# ]( m) M
2 c4 L& l& E# v8 s/ H$ Z7 E8 d
其他程序段。。。。。
5 _4 O' V7 e/ m) A& r + j8 p7 m; |. m1 a+ t( W4 I
   free(x_d);
. k, a$ M, s+ P9 w- B' P/ Y9 \6 f
2 y  {$ {+ |+ T: ^8 I* ?使用DSP侧单独调试功能,验证动态申请没有问题,& n/ h$ Y' @1 ~. M4 e. I, U/ _
- d7 s' ]' ?8 ~+ T, K% T: q/ }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 p: ^5 g! q, e4 W2 V9 V
3 R0 X6 A$ f, Y( v( O

! D3 ?% E6 y6 A
2 O+ u! Y' ]: x+ g' @8 v9 N: E
# t; g8 `- Z$ ?( {" G( H
- z( Y5 h' S, s+ _0 _  Z' F) V" e8 {
$ ]4 ]' Q) A2 B. T) u8 b5 A8 j
! R& F8 U7 k/ `  P3 B6 r
) y* A1 a, A* E. {8 [$ v7 T" W$ P3 ~5 J$ D& b

$ \2 F" X9 R; o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 _" E9 a, J# `' H, L, ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 l9 a4 z/ b' U) U, V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ O; ]/ o4 j- x! ^) _2 g
4 B6 M& v4 I6 q) }. T5 Z6 E3 s
是不是需要在DSP.CFG中进行配置1 t% t& Z. ]- i  q
我现在的配置为
: Z! j, b9 h9 ~/ N- q8 E+ C/ a0 h) O, q, H8 h* u) Y' l0 H
/*% R: s6 V' j$ Z) H
*  ======== Operating System Configuration ========: f. x/ d4 C# a( n
*/) D! {5 }+ @- H' T/ M
* a" S# `2 A% g5 _  t
/* no rts heap */
; c6 @4 r6 ?; n+ d4 [Program.heap = 0;
& K/ Z- X) c! v# e  Z3 {Program.argSize = 100;  /* minimum size */* i7 [; o$ s( R: _5 x0 [+ D$ v5 F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; M# Q) o: Y3 p" }2 j1 `" w* G! ^$ p) v+ I$ [
/* create a default heap */0 Q( Q1 g4 u3 v, n7 W2 f0 N; H9 E. T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 t- n% ^2 X. C! }, V, q! P' E
var heapMemParams = new HeapMem.Params();
  M- P: A- P* q' sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) O# w  d) _5 V( q8 B1 K& \

: d/ U/ r  b2 Q& t% c5 n6 H
var Memory = xdc.useModule('xdc.runtime.Memory');
4 F2 g6 T- o' C% G# I+ P  {2 ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: a# F, }: m; z: q
) ^! c; d' F1 ~1 U9 a9 L  a0 F/* configure System module */
( M- ]$ G8 a6 |/ f& @) H9 B- _1 svar SysMin = xdc.useModule('xdc.runtime.SysMin');( w; q) _6 j5 C4 p
SysMin.bufSize = 0x1000;
0 F. ^% _! r+ USysMin.flushAtExit = false;9 _+ Q0 f: L) h- v" T
5 [" c" }( `0 e9 {, C6 T
var System = xdc.useModule('xdc.runtime.System');2 {0 `! e  }. s. R# ~- H- g) r
System.SupportProxy = SysMin;
: A/ H2 Q/ @* u  _6 s* E  x, U- W+ d9 s/ N5 e3 P2 M& F( I& P& [
/* configure SysBios to use the lower half of Timer 1 */* ^2 I  @4 \, Y5 m
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 F: A# G8 A! \2 D1 W; L1 {var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* u# e. ^7 Z) V1 p- y, _Timer.timerSettings[1].master = true;
; C9 Z+ \9 o* X. i# Q$ HTimer.defaultHalf = Timer.Half_LOWER;. w4 A. G2 I/ R# E  {. t0 I
Clock.timerId = 1;
2 P6 \/ P9 C7 Z* T# x$ a, Z3 g/ I0 B, ]# |6 @+ p# N( G

7 T. r* ]9 x. r; x) V/ V7 h/*
. @" T. t# u4 M% N" h* U# x% H  c *  ======== Miscellaneous Configuration ========
& o. `9 s' I  g# ]" J( \ */
/ k2 b' n* q; Y+ w' p4 O* V9 F
+ T2 y# b4 P9 c- L2 f1 X2 o  R/* set default diags mask */
- ^. b3 h# w3 b; e: dvar Diags = xdc.useModule('xdc.runtime.Diags');
' G) K) c: c' A# }/ T9 o5 k2 |* F1 cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 W. D5 l2 G- \5 ^2 u3 {- b0 g# E8 F4 i' U5 A" @9 N6 j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: ~1 a6 F  v1 |5 ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% T" C( O! T9 p9 p  j4 O. c" zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 j( N# F1 q0 [8 X3 J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& _' ~" |" ~/ x5 G5 I1 I/ i! ADefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 W& {% @& d% O) @$ o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: _5 R, s( E& k1 H% e. y4 V2 T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 j% t* ~0 H- h: l6 X4 [, T# J
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  ~& B* P4 ?. }6 k  a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: f+ {) A& }8 }& @Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 t+ G7 Q$ v' G7 W( [- t- Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: r; L# |+ X# C% P1 \. i" NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 d8 o# f0 y$ p, M5 g4 [Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- r& L" U0 R7 y+ v' _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' N( n( w5 ^+ l8 [- V  B6 R( y

2 @, m7 v& @* w& ]/ F6 q/* override diags mask for selected modules */
  |: ], {; v; q- x/ o5 W; Wxdc.useModule('xdc.runtime.Main');
$ Q5 b# K9 U" ?Diags.setMaskMeta(/ Y2 g! ]% I; _" b9 p  z+ K+ i
    "xdc.runtime.Main",
4 }  c' b1 a; d- ~9 K. i    Diags.ENTRY | Diags.EXIT | Diags.INFO,
# J6 Q5 _$ i3 Z6 U4 L1 k9 j, l    Diags.RUNTIME_ON
# H0 x# e( J4 U8 C$ a+ f: C- W7 @8 ~);
- e9 D/ R6 Y7 ?: s; P' U- `8 w" p" o( J3 l( x1 `% @
var Registry = xdc.useModule('xdc.runtime.Registry');
/ q# B2 s: R: \# z  ^- e( w  PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 C9 X  i# a( Z4 m+ u# o' TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. i, n" y: u2 n* l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 y% ?7 D6 Q& r, \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, a, r2 w. [) d

+ O2 ?" ^/ c( @2 O3 V2 Y: n6 D/* create a logger instance */
' ?$ _6 A* @2 I  l6 p3 `$ qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ I( j' b9 s' P
var loggerBufP = new LoggerBuf.Params();
' e7 N7 `) Y1 `$ P$ eloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// y2 j0 F5 ~7 x7 s, w/ n
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 Z( p' N4 u8 K

8 Y1 O& J. a9 u% o1 Fvar appLogger = LoggerBuf.create(loggerBufP);
0 Y6 R, e  m; m8 u# y" H1 j+ B, ~appLogger.instance.name = "AppLog_Core1";
' P  M+ y8 a! n8 g5 C: lDefaults.common$.logger = appLogger;; k$ q1 A- e& h* m: ~4 V
Memory.defaultHeapSize = 0x8192;    4 S3 d$ D! r1 R, C- Q" ?- ^
Idle.idleFxns[0] = "&LEDStatus";$ P" j- N" G& z( u! _( X% H9 l
Cache.initSize.l2Size = Cache.L2Size_32K;. P2 ?2 n% W9 O1 v& N* y
$ ^) n6 c$ x4 y: {
回复 支持 反对

使用道具 举报

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 R; f- S9 r$ R$ N% h# m" B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ v7 n% ~+ v5 X4 s/ U; r  H$ P
var heapMemParams = new HeapMem.Params();# W: I$ P+ @7 X; L# Y1 }
heapMemParams.size = 0x4000;
# ]8 o7 X. j5 R8 X
& q$ N& k4 R& g6 L$ z. fvar Memory = xdc.useModule('xdc.runtime.Memory');
% p% R; A+ F) f, H8 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 m  d6 D7 H. t, q) e4 [! V
+ m7 S( U6 t, Y- z我大约calloc  每次共计大小为5K*16bits,
5 b6 C" j9 v) k5 ]. o而默认配置才0x4000、需要改大。3 k6 q& u$ a! k( _4 }

4 c8 B" K+ D) W% \) F( E$ m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  I1 a7 k% G( R
Program.heap = 0;
9 k0 T' D( A, b8 g+ @; W1 `Program.argSize = 100;  /* minimum size */
: @8 o5 w. u. C3 o$ m9 P; q7 k+ vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 11:14 , Processed in 0.040504 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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