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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 |6 u2 p3 z; L/ r
% |  W* G4 W# x% Y3 `% f
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# [  @5 W8 a# V8 ?$ Q
0 B$ V/ @1 \1 K( e4 X! X% E0 a
其他程序段。。。。。
* T; e* y7 z& J2 I
0 `0 d+ R1 X3 f! m. V   free(x_d);  U# d# E" ?9 j& n8 V/ E
! f2 g! E- s0 S: W% q0 L
使用DSP侧单独调试功能,验证动态申请没有问题,
6 q8 s+ \9 Z5 l( Y, E( G
% p3 m. R0 W# W3 ~# ]6 s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, M6 U! _9 S: H
  m8 o* u) M' e% W- s7 l# U

  _- u2 U& J% |* _+ A' Y5 _
# U7 S5 z' G! g! f# k# e& Q3 Q, R: N( y

, D7 }% {  I7 z4 x2 e
6 ~& u0 m+ w4 X6 D, B
5 I; J4 b7 }( g; Z/ R
7 \+ I8 s& l* ~4 @6 X: F6 I, a; D

  s6 g2 r% `% U! V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% K% ^2 E; u" F5 @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! u/ @. p7 |" `' P
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  M: }" Q" Y: E$ B( ]0 _$ B% r

$ a) z* h1 a: L8 ]是不是需要在DSP.CFG中进行配置; @: O/ I6 Q' w$ z6 [- N3 s
我现在的配置为
' B7 }8 B( p+ _' Z7 @4 b8 ~" Y1 X2 a4 A0 }) R) k
/*" @4 q$ T. q# u, H# _
*  ======== Operating System Configuration ========- Q* ]' E4 f' P# x
*/
- D$ o; M7 g# v$ f
. d) I& Q! T6 K5 v  \& j: O/* no rts heap */4 M- O) i2 m- e- {0 b
Program.heap = 0;" Y( d9 e& i* ~+ X
Program.argSize = 100;  /* minimum size */& z! y7 [5 K4 C# W+ Y1 W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ ^' ^( @3 S  p
) [  `/ m$ X$ B5 ^, Z8 G8 q; L
/* create a default heap */& f) z: {' ]' r( |* G/ Q# Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 O; x; P+ g, c5 hvar heapMemParams = new HeapMem.Params();* v  f0 C, ~% A5 ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* c& R# h0 P. `3 ?) E' q8 e: l& e- b3 B8 {
var Memory = xdc.useModule('xdc.runtime.Memory');
1 P0 K9 H- q! A1 i( EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' x1 _% E6 h* e  H' t2 x8 d4 E* u( E. }1 M$ k+ j- V# f
/* configure System module */
: x) ^/ k9 B* Q2 G! m- yvar SysMin = xdc.useModule('xdc.runtime.SysMin');  R  a( h. Y8 E( G
SysMin.bufSize = 0x1000;* f5 G; \- T+ k, J+ }: ^
SysMin.flushAtExit = false;
! ^! H+ L9 G! t6 u5 o% Z0 S+ Q3 _0 h' l
var System = xdc.useModule('xdc.runtime.System');; F7 n1 Q( i" Y( {! `3 D9 p9 O
System.SupportProxy = SysMin;
3 ^0 {) Z# r% w% X0 e% v
4 g3 M) I4 ^" i& x# b/ {/* configure SysBios to use the lower half of Timer 1 */: k, p$ D3 R  K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 v4 M: [# m! b! M/ i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' _) _4 E) }# I
Timer.timerSettings[1].master = true;
, K2 x* R) e( L+ R: n+ wTimer.defaultHalf = Timer.Half_LOWER;
( h& N( f! s" C" uClock.timerId = 1;8 \7 ?. H( n  z* o1 B$ z% ]

" M7 ?& |2 R; |( P) K* N& R
4 }* ^) F/ ]2 @; x* t# a; G1 O; Q/*
! H" r6 l" @$ ]( x" S, _8 ] *  ======== Miscellaneous Configuration ========% n! M7 ]5 F* `6 L$ k) X: u
*/! V' q1 }5 e" C: ~4 ?
3 [. a5 R0 B$ A, l6 n
/* set default diags mask */
8 t& u- I" ]8 j6 ]var Diags = xdc.useModule('xdc.runtime.Diags');0 n- P. }3 l  Y8 Q2 j
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 L3 w1 C5 d' p& t2 {
2 s1 X2 F& k) h! S& WDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ ~4 t, W+ H$ J  `Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 c0 `3 _& F* O3 j$ u+ Q/ T
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 e3 |' n  w2 E9 U  A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 e/ ]3 d4 Y: U  o; \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& I. d( H. ^6 dDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) H$ u8 \5 }" q# ~7 B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ |+ m8 _. ^% @$ ^, SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 v4 V1 v' Z4 d) q. h# C) f# {
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- p4 ^2 Q; m& b9 ?, x2 d6 h% Y5 n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 A" X  Y1 T+ @% R# A3 a2 F9 b" \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# o1 Z' i5 y- {+ CDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, _. W5 Z" h1 f, H% A9 y& QDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' z) O* E  N5 _/ _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' N: ^- X, \( D2 j4 z
1 {% ~" ~6 t$ C0 r( V! M
/* override diags mask for selected modules */
" ?) a( T: r, f' ^) U" E* k3 o! xxdc.useModule('xdc.runtime.Main');
9 F- |3 {! b4 K2 e6 N9 }Diags.setMaskMeta(& ^" z" z- o1 x6 o; `% M
    "xdc.runtime.Main",7 {; E$ y# G5 g( F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 Q* z9 x. b" @! {1 @8 W    Diags.RUNTIME_ON
  f; ^$ j3 `5 \7 ^' |);
& p+ m/ u4 C" e; X7 Q- f# g- c# O7 E3 g4 ^2 h1 {; |" y
var Registry = xdc.useModule('xdc.runtime.Registry');' M: k8 O2 N& \- D; H) m3 C9 j, B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) D' @- s9 j6 G6 H- t0 z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; e+ ?. A7 P0 f- C$ g! D2 vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. n+ L  w2 C5 y& ?: e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 \4 `2 y) y3 ]' [- }

! R( @! m7 f6 V" B/* create a logger instance */  M9 Z5 P2 i0 I' N: h" n! r% Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) r' @7 k5 S: j: w- r1 lvar loggerBufP = new LoggerBuf.Params();
" ?# i) d- b. X2 {" d9 }loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) T, s, b: X' i' A1 W% o) Q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;: }: \' T* v6 d  a+ N5 t

9 S$ Q: o# T3 f( wvar appLogger = LoggerBuf.create(loggerBufP);# x8 Y1 }; h4 `3 Q  E3 p  D# b
appLogger.instance.name = "AppLog_Core1";
9 e/ k8 \/ L7 X/ m' iDefaults.common$.logger = appLogger;" Q  _$ f+ `& p. U8 _- F1 X! s
Memory.defaultHeapSize = 0x8192;    3 K0 d1 [$ }. {9 |+ S& u) P0 ^6 v
Idle.idleFxns[0] = "&LEDStatus";
; \2 v# k6 y- i2 _" p+ O& hCache.initSize.l2Size = Cache.L2Size_32K;! B  h' a3 k' j8 h5 B2 N
% k) R/ L% k$ g& D. N4 p4 n
回复 支持 反对

使用道具 举报

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 */
0 P# \8 M5 I0 V$ ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% K$ k: O, @$ |7 ovar heapMemParams = new HeapMem.Params();: u( O7 e; N1 z; M# |
heapMemParams.size = 0x4000;! ~! N. h0 l! M9 r4 ~' `

- ~; g0 }/ S+ d" E* M/ qvar Memory = xdc.useModule('xdc.runtime.Memory');4 G9 \& T( n2 V* a" H! f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 C, `& m# g  u: X  ^9 t; A
3 q+ ?  r" H8 j- a: [# o
我大约calloc  每次共计大小为5K*16bits,/ i$ \, ~. [. n) U# Y: s) M" K
而默认配置才0x4000、需要改大。
. |/ t2 a7 y- \8 W5 N
! A* x2 E; j9 v$ w1 t! s- O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 m% Q2 G1 X6 r9 X$ t3 W  ]Program.heap = 0;0 i& r3 B8 Y+ V
Program.argSize = 100;  /* minimum size */
  n+ d6 O: d- T% ?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-7 17:29 , Processed in 0.045842 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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