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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. Q6 E& C' Q# e$ q
9 K- v1 R( G8 X- l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& _8 I) ~" X& j5 S$ p1 Z% d( @

4 {0 U" J/ j- E8 @其他程序段。。。。。4 t; Z% x- T" p# Z- \$ ?
( v$ F* l, o9 Y9 e: L( A
   free(x_d);
* }, V' v+ c* p# z  M
% g0 c; `0 u/ b5 n使用DSP侧单独调试功能,验证动态申请没有问题,
! H( M7 J6 Z1 D4 Z5 \& ^" Q* g
$ ^$ k, S8 X2 h) e3 G; H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! o2 M# F5 q% n3 `/ N

! u5 c% F# P: l" z& Y; @
5 t9 w5 S5 R. G( G" P' C( n/ I& T4 x! m2 `# O
8 B- l3 k6 o) e% Q3 _
% W& V0 X: k- H5 Z* x( Z) e

7 u8 S$ m  v4 c9 F' |# D8 H5 K) N/ D" }( q. S% P

, ~& R4 h1 J+ v5 w0 z$ a" e; x4 P. J

5 e4 y7 n3 X3 U) N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; y$ |$ w9 F) S5 i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ A+ {  ?, K" Q, A  [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ U6 h  Q% a8 v/ N

6 y. A/ }- W" h, q* @( e, `( i- r是不是需要在DSP.CFG中进行配置" f* ^+ |# y! N" w2 T! Q* Y/ r9 ]
我现在的配置为
# u1 i5 s4 m) o# b; Q2 e$ ?
( N! N5 t9 b) \: J2 v9 E/*
  v; k) b/ R9 }7 G  } *  ======== Operating System Configuration ========
) W' Q! {. j5 d' O* Y; B */' |; X8 O2 {( _. \( e7 G

5 P1 o# E( o3 s/* no rts heap */
& X( O, f* F/ W2 vProgram.heap = 0;; `6 Z3 _9 O! U8 |
Program.argSize = 100;  /* minimum size */
$ c( I3 t6 ], wProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& z8 i" Q# g8 Q) h
4 R6 y8 ^% M+ O) M7 L
/* create a default heap */
3 M$ G3 w+ S& j8 Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  e! \% X5 W* f5 f- u
var heapMemParams = new HeapMem.Params();
# w) g0 a; _5 _+ R/ ~) X- W, AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# Q7 f5 e, X0 |) F$ _5 V' H, {% P) l; K$ P" ~- v6 j' E( m% ~
var Memory = xdc.useModule('xdc.runtime.Memory');
4 E% o8 ~7 J- V5 `$ s& ^  Y# {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. c( B: @. _5 C: k0 i* X
  A( u' n8 i5 K+ k' a
/* configure System module */# D/ T5 ^0 v% c" A! K
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' d/ o7 D+ d( e0 TSysMin.bufSize = 0x1000;
$ m! d9 j6 t. [( bSysMin.flushAtExit = false;
/ X3 l4 C7 q2 v' ?, t
4 _6 q# I7 v1 x2 I2 Yvar System = xdc.useModule('xdc.runtime.System');' _; S  Y( Q7 [8 P
System.SupportProxy = SysMin;* Y, Y- ?3 z% B( D

' n' [/ e8 H# h/* configure SysBios to use the lower half of Timer 1 */) w; a& G2 ]' i6 r( @" W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: F( ]. t+ s  l' U0 ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');! G: W" P: `' v* F6 j5 |8 ~/ {
Timer.timerSettings[1].master = true;
9 T: a' g; ]0 @% c% P( rTimer.defaultHalf = Timer.Half_LOWER;
/ k; M4 ^8 t4 J: m# L( d% TClock.timerId = 1;
* ?3 [% D2 X: v+ a0 K% ]2 ]
/ F% V6 W6 Y8 Z0 }5 W. z' Q# D6 g; f
/*
) T! k# i" r' U# Z5 u *  ======== Miscellaneous Configuration ========
3 t8 B; m; v( d7 a; A3 I" R */2 L) o  P$ ~. |

# r( |+ E* F4 u/* set default diags mask */8 b1 E. s8 N- [4 h6 o) q
var Diags = xdc.useModule('xdc.runtime.Diags');, |9 Y2 L: ^" R6 ^7 y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 x, Z" O6 F5 K. O2 A' z
+ O, s) @7 I& G; Z# t$ G$ L% w; IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ |$ M* M% [7 X4 n$ l- k3 D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' t7 n; I. q; T$ R' N3 i3 s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  P+ Z1 b1 t$ q0 ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- j, z* D2 W% t$ @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 Z1 ]! K& z3 o  U+ O- i8 BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* z( [7 g! N: w  C! R) x" ~: h' pDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! d7 Q0 q5 ]. l- v  i3 B. [2 ~1 {# |2 H, qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 b1 `0 }  k8 L5 _, l. l, TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) Q2 k  V( V- R* E; f7 n2 ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' x4 I; \- J% L4 k4 m: y; O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ l" W9 `% y1 G% c% _3 q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: _' y% U+ q" g, _1 v: s4 l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% @+ I; N. M: G: o7 B7 \: PDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, i( ~6 V* F/ C
1 H$ c6 \+ M9 }) e; A+ z' s/* override diags mask for selected modules */
+ H+ s: G6 K/ m4 O: Z/ Cxdc.useModule('xdc.runtime.Main');
  Y% R- T- V7 e; F/ j3 KDiags.setMaskMeta(0 y# _  l( S1 R7 Q: T
    "xdc.runtime.Main",
! i; d' Y: y+ ^0 K# B% P    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 \& f0 B# Q& d5 H8 w1 t8 G: ^
    Diags.RUNTIME_ON
0 }1 W( z: W) g9 |& N* [" l);5 T& U+ v& ^7 c1 ?. g) }0 O) ~
" i' F# _0 S) `' c8 v  }8 r$ o
var Registry = xdc.useModule('xdc.runtime.Registry');
/ u/ q# c6 t' j/ RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% k* Q' b7 i* S& `+ U6 L8 g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  U+ e+ |9 q' P8 T5 t: u5 Q! y- s8 C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! B6 j4 Y' V5 b8 n1 I: F' e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) ]# j) w* Z# r* y% Z1 @: C, z3 i# m2 h. I
/* create a logger instance */
( D+ C2 M* ?2 k+ y4 d$ Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 K% A5 e; I: }/ W; svar loggerBufP = new LoggerBuf.Params();: S; z; z4 b! A( q: F# n( ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ z* T# X* e& t& L; P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- N# q1 S5 V- j, ]  }
; R3 _  q( C- h5 K0 I' L: G
var appLogger = LoggerBuf.create(loggerBufP);
/ E' q  R* E0 r# Z& J! p- |8 ZappLogger.instance.name = "AppLog_Core1";
, ?1 e" ~3 p5 ?' yDefaults.common$.logger = appLogger;
' ^3 ^/ Y3 r6 F" H- DMemory.defaultHeapSize = 0x8192;    : [: j: W1 L& i+ e* g7 ]
Idle.idleFxns[0] = "&LEDStatus";1 w1 }% Y8 o2 ^7 s4 P* ?
Cache.initSize.l2Size = Cache.L2Size_32K;3 j7 L3 x# ?4 q! j  \. A7 q

; k1 j5 ?9 ?6 @1 ^7 I8 A
回复 支持 反对

使用道具 举报

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 */; G2 Q$ E2 _# d7 ~' S/ [0 k7 o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 R9 `6 y# M/ _9 p+ S& A1 A' r' Qvar heapMemParams = new HeapMem.Params();6 S% }6 F+ m" k. E" e  Q5 `! c$ p; U/ f
heapMemParams.size = 0x4000;
, r& i0 z7 @5 ~6 g, k0 L8 _  }
# {0 e2 c1 s) F& L5 ]& q; T: jvar Memory = xdc.useModule('xdc.runtime.Memory');
! N# Q% ^# ^6 _7 z2 ?& iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 u2 u% R$ W2 Y# F; A
& I2 T6 j1 A) i0 O$ V2 o
我大约calloc  每次共计大小为5K*16bits,/ s) V) P; u7 ^  |6 L: N
而默认配置才0x4000、需要改大。
' b% t8 f5 ^7 D5 w, J( l0 ?
" I. a9 D+ I( b; k1 f1 n) F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. c- C* h2 m0 [Program.heap = 0;  Z$ {8 W' w) F, ]7 Q+ c
Program.argSize = 100;  /* minimum size */$ F5 z* y& C1 b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 16:09 , Processed in 0.040556 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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