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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) `% S$ u* z4 m# f0 N& Y  s! T1 |. ~( t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- o; m) g0 E- P  ?+ w& E1 G' ~/ }9 Z, _* @: q8 W" ]2 I$ K5 z8 A
其他程序段。。。。。
* v8 z! `0 H0 T1 ?) m1 ?7 ]
4 h9 e# f, w, f2 y! P  {   free(x_d);
5 m# R! y8 P6 y8 w" A% B+ M
! H4 l3 A' M+ X+ s: [$ N使用DSP侧单独调试功能,验证动态申请没有问题,
5 h1 _% `7 a/ j  x7 K' J
. h5 i0 B- H, l/ O& e. ]" s) I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 R: W" D( ?7 J, ?7 t- |

& z% T- w5 ^& ~2 j( Y
6 ?5 K3 V6 C% g( y5 W5 d0 I1 R
3 }) O0 @/ J' a4 |: W" {
: Y' c4 L+ u0 U. k
7 n  b! a% |& ^$ r6 _; e
, o4 e' k0 O5 q1 D3 E: W+ S# g
1 N# h% v+ ^8 {" m% }# c: W+ H4 Q2 I0 g4 @; B

$ h. D# R# e) g
* C/ P1 w/ p3 [$ }" y) _; r. B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& ~% d5 c  y6 D  @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; I- A9 f9 V% A  G! Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" E' F& e8 z! S, K4 H3 P' {

! M! `% Q2 I# ~: R3 @! b3 O. w是不是需要在DSP.CFG中进行配置
: o# d1 |" N: H* x我现在的配置为& O; ~! e8 O4 u! \
! p, z9 Y- ~  Z- i
/*8 Q1 {6 u9 U# B
*  ======== Operating System Configuration ========4 M6 u& `/ L3 `& d. M( S2 g
*/1 `+ y# L, d: b7 B5 u9 f

% u4 H" s5 Q6 p- W/ x; q/* no rts heap */
. T  C# d( t2 m7 \Program.heap = 0;9 W6 A5 m- Q1 H) O3 `9 N
Program.argSize = 100;  /* minimum size */3 R3 n2 k, ~  _: I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% B$ H: v6 w$ ~; ?: g
) e  v- [+ ^  N  }& Z
/* create a default heap */$ |% ]# r* e1 f& C$ y! z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- K: k8 i" Q" v* Z- |" Z9 yvar heapMemParams = new HeapMem.Params();
* E2 d# _/ G- Q6 ~& ?' I; MheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  ~! D" q( E3 G  F) B
2 d! M# \  ]: l
var Memory = xdc.useModule('xdc.runtime.Memory');- J% i4 p; W" W! O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# p1 o' s+ x3 |! d- S3 j; {: B. R* W* L5 s+ i/ ?  [
/* configure System module */, U5 l1 N, w( z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 }: i- s! l3 }: d& [  T, nSysMin.bufSize = 0x1000;; M$ \, ]2 `8 i. W8 \2 I5 V! s) B
SysMin.flushAtExit = false;/ n! j  X4 r, X! s3 s& _1 F* ?

/ z2 ~0 Q: P$ K& w7 Gvar System = xdc.useModule('xdc.runtime.System');
4 |" B& r) y- tSystem.SupportProxy = SysMin;! k0 {* n' u4 b3 |7 S' h* J6 r
5 _; B( H" L% V, A# [2 S5 B* j$ w
/* configure SysBios to use the lower half of Timer 1 */7 A0 i! \7 M& V) y6 Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# n# Y; ^1 c4 A' F) F* E
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; F" u& ~( E4 L4 m1 x8 _9 _Timer.timerSettings[1].master = true;! d( K) K" R2 b8 }- n/ E5 s
Timer.defaultHalf = Timer.Half_LOWER;
8 Y# W8 w, i" PClock.timerId = 1;
! y# U: v/ _% [  M* @, [
2 P% N' a+ y8 I' l, f
- [2 D- i( U; K+ ~/*" J5 l$ D' ^; f, E9 i: i: ~
*  ======== Miscellaneous Configuration ========6 v( r6 ^+ ?2 n3 n
*/
. z+ F& d1 X  T2 z7 e; [5 x" e% ]
+ d# p: ^4 q2 `% e' n  P. a2 h/* set default diags mask */6 L5 q1 Z! ]9 e! E" I9 R
var Diags = xdc.useModule('xdc.runtime.Diags');
% W. u* x, f3 n- Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');
. |4 j" ?+ v) j4 Y8 i- U
/ ~2 S' [( t  ]* A! _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 b4 q5 c: Q4 i- c9 x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 K7 \7 A1 E+ H2 `0 N+ ~  V
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 R$ @$ i1 L: m7 D( }6 b& j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. L. p! @3 C8 x/ ^( r; u& \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- h* t, H+ t1 T2 ]' e, d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 F- T3 W$ k* C( D; QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, _5 R# w$ w9 l7 p, F8 q9 e8 h/ N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' X7 ]; L" W9 f2 H4 V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 e, _- G3 U2 v* j! \* o& S+ s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- T% X8 S* P6 Y- L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, Z" X1 q$ j4 y/ \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 L& _. e$ F2 A$ F2 q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 N  r- ]# ~% k1 v4 x6 P
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ J0 e6 E3 T8 B2 u" s# p# |
$ t5 Y8 y- E0 n0 m9 A  v
/* override diags mask for selected modules */( m9 M' r/ ]" Y0 s
xdc.useModule('xdc.runtime.Main');0 f6 B' v, g' K, J4 J- Y2 @' P
Diags.setMaskMeta(
( T% j+ @& d0 r6 x8 b    "xdc.runtime.Main",: w! H; X1 [0 N4 g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 ?6 I$ s3 G! C, A' x2 `    Diags.RUNTIME_ON/ P; d! j, D% a4 P; C
);
% \) E! n" g  Z9 m  T1 _1 B7 w5 W2 B
" x% x7 j+ L0 M) ovar Registry = xdc.useModule('xdc.runtime.Registry');6 l2 a6 i* p1 ~: Z% B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. @9 Y$ e! u! N0 L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, N! h+ g8 N3 b$ M/ T( X" E
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& w) h4 v/ v/ k$ uRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& e$ ^. k. a* J/ ?9 D2 j$ J; @+ Y/ g" I3 W" X
/* create a logger instance */& e3 T' h  g# ?. V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; Q0 x3 N5 _  e- j
var loggerBufP = new LoggerBuf.Params();
9 A5 w" z9 ?! V! Y6 Y4 E/ ~7 `2 gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ k1 H# x: o  ?- x' K9 f9 v" a. S( f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ U6 u$ \3 Y3 D- n: |+ \7 f2 K, \1 ~( {+ ?+ u7 i
var appLogger = LoggerBuf.create(loggerBufP);( ], i7 W' O8 i
appLogger.instance.name = "AppLog_Core1";- @5 }3 W/ S: L; |
Defaults.common$.logger = appLogger;  d: y) ^) Q! y9 N9 E
Memory.defaultHeapSize = 0x8192;   
. z3 }  h9 G+ \0 V# s- zIdle.idleFxns[0] = "&LEDStatus";
  r5 U# X6 e. VCache.initSize.l2Size = Cache.L2Size_32K;& P, ^6 |' g- y5 U' V
- |7 k( R5 N& ^+ 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 *// l: [- V. p* C  ~! M/ x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 X+ y3 i% [: F$ }' S" qvar heapMemParams = new HeapMem.Params();3 Y7 J- H7 Y& b; Y. q' Z- D. d
heapMemParams.size = 0x4000;
& K4 v- ]" K! v# K5 x& N8 ^0 L6 ]. ^8 N9 b: P6 X1 [
var Memory = xdc.useModule('xdc.runtime.Memory');2 {7 \) m: V1 x0 p) w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 I- V9 T7 L" l0 P4 N/ g
0 R1 }- B7 S% R; {我大约calloc  每次共计大小为5K*16bits,
' e% O# D5 r, }8 p0 b7 D而默认配置才0x4000、需要改大。
$ I( m: H; Z0 s$ l% w/ D8 L- V
8 K! N' b9 S8 y7 Z+ D' C) z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% V8 d3 G& D; m9 eProgram.heap = 0;
' {: x/ y5 g; L; {Program.argSize = 100;  /* minimum size */% M! D# y# ~. y( V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-10 09:13 , Processed in 0.039877 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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