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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ X- S! F8 h: K; @1 y( u; _$ y2 L9 {
( y$ H3 y3 e6 c6 l. K+ g) H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ y8 y) P, A$ \+ v& k( \: D2 n
* y2 |$ k" a, p; w5 R6 g* S其他程序段。。。。。  v/ }! h+ }: {4 t4 Y# v. G

+ Y2 v, p# e9 g* a/ R8 o   free(x_d);! p0 D+ v! ~% l# _
8 [9 m4 r9 a: \! w+ ^6 Z. i4 x9 U+ ?$ f
使用DSP侧单独调试功能,验证动态申请没有问题,
$ L, _6 g' s' g: H5 S* a9 x& W  J/ C  h8 A7 x/ p* U9 l$ ^$ q; w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, K# N$ O. q& P6 g/ [
: c1 O. c+ T+ Q+ a- q
; z+ c4 [5 d$ l7 w4 |# a0 S

2 x4 r) N6 ?. T: F' }( q; K# s; A3 j/ n6 |& R2 S
$ F  \$ t: `/ L+ ^/ U% n' U
5 L* N( K: h+ p$ }$ G$ |, A

' h$ m. {. s) M) T  `4 P: ]; j( r0 Z
; K1 a/ I, }* T7 k
+ W) N1 y7 _! v3 E) L' g2 I+ B. y' d3 }8 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! x) N1 g. H: m* Q5 p
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: z+ R6 k3 ?. N( f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 Y# T1 W+ E0 A" H8 p8 h( M

/ E: Y+ K8 ~5 C9 p, H! M8 k是不是需要在DSP.CFG中进行配置
7 M/ x7 }, i& `+ d  R我现在的配置为
. X8 n7 ?2 E& Q( j8 a  o# v4 y2 r- M$ h, j* z& z, k
/*
8 k6 {" Q: h1 l6 j! D: s, M1 B *  ======== Operating System Configuration ========
! D; F; ?" R  j3 u& |) n: Z */
$ b/ F5 d) t- B8 C, N: I% f
; N' H/ l) Q. q# z/* no rts heap */
4 U3 E+ }, X$ W. ^4 rProgram.heap = 0;
% f$ w0 i' Z# [: o( [Program.argSize = 100;  /* minimum size */
% k; R4 O$ s+ w, s5 m" p* G9 rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# N- Z9 I; ~" `2 p2 @) k
) H: O4 z& f1 W/* create a default heap */
# |4 x/ t6 R- p. n$ `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 ^: }; D% P' M( v% g
var heapMemParams = new HeapMem.Params();1 D8 s3 L5 f& E8 x* }
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, z. Y  U' ^% d: t% x7 U

- |6 a6 b9 t! o8 ~5 ?, E6 q
var Memory = xdc.useModule('xdc.runtime.Memory');
. k, {( o0 u: NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 I5 ~; Y# I7 Y" y# d1 _8 \

' R  f4 [9 [2 J9 `: l  P/ [/* configure System module */2 @* d( o* D' O' q
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  ?& ^4 c" x: t/ e* \5 Q* y8 T% LSysMin.bufSize = 0x1000;
" q! ]& ?1 ]( D8 d* ]SysMin.flushAtExit = false;
1 a7 o/ _! Y2 W  }$ R* @# y3 j/ Z4 H/ b# f* G) y) e8 R
var System = xdc.useModule('xdc.runtime.System');! X, l# y" m7 t  {5 e
System.SupportProxy = SysMin;
+ y$ q# x  T4 r7 g3 d* }. f2 ]4 M! r
/* configure SysBios to use the lower half of Timer 1 */. U) C$ U/ O3 G$ L/ O1 \4 {; w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% R8 e2 y% r3 d- W& z3 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');4 \% s1 V6 n! u
Timer.timerSettings[1].master = true;! M# P# @+ B, `& |  C
Timer.defaultHalf = Timer.Half_LOWER;9 T& [7 A+ F8 z# l8 \1 n* ^$ |- \1 h
Clock.timerId = 1;
5 _- s& Z8 E8 ~2 {+ x9 T- A
; ^6 u' Q; [  q) ?
* J  I& v( Z5 O4 |/*/ X4 T6 j+ j9 O, i& L+ S" ]
*  ======== Miscellaneous Configuration ========( a  I! F) n3 b) W
*/6 ^( w* D6 y% z# s, T& b( L8 }! A

+ B+ i5 K/ d; ~' o/* set default diags mask */
% O/ U9 |8 x, [var Diags = xdc.useModule('xdc.runtime.Diags');' W3 J. [7 E- C* D$ Z4 j
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' q: I& U- N! }" D' V* `3 }  y3 Z0 p' V+ k& G7 g3 t, e* l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 K' k5 X( S% j$ e) }9 ~! YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# a6 ^! [' ]: k2 [! F6 h
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 ]7 l+ P: ^$ H$ r9 BDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& U! k6 h. V* h& I- p# U% eDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 r+ k, o' |) ^7 Q* j, a' sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 _$ f- @( {% d0 [' ^) TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ z+ Q# P6 }, T$ }$ W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. f% ]! \8 z4 y: v2 I6 t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 x* J* ~# v, z1 lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 H( |9 r. r$ _% N* q8 S6 [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* ~. B; s3 K" m4 y) ]* ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) o# l4 V  m) EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' n: G8 J% b( ^8 b, Z- g" SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 [% Q. `0 Y* W  W. v5 F# S4 m7 Z. k, {; C* @# \
/* override diags mask for selected modules */
1 a" V2 b  `" w. [% e" d+ D5 Lxdc.useModule('xdc.runtime.Main');
  Z4 c% P9 K6 k7 p0 g7 SDiags.setMaskMeta(
% g; k- n; o5 O: Y    "xdc.runtime.Main",- t1 F* U$ Q8 `+ j6 z! ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ L8 y$ T  T5 C4 v) e    Diags.RUNTIME_ON
( u( B8 J; l+ B# H' l) h);
) [" j1 e) t# V7 |6 Y$ @+ e+ J0 `! f5 Y1 f
var Registry = xdc.useModule('xdc.runtime.Registry');
0 x3 t/ l3 W/ l2 o5 D. z/ NRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  Q, {; k' M* jRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" b4 i4 i" u  eRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, @4 j4 Y* @& y" y* O7 v2 ~  FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;. q3 E0 d0 d/ v+ I" S
- d. U# S* ~' T2 I6 X
/* create a logger instance */
( L3 o: ]% d* I$ |/ P$ {# Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 B, Y9 p+ d( u( p' @var loggerBufP = new LoggerBuf.Params();
8 t( a# y7 d) A9 mloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 D  G3 `. U" d( O0 Z  j2 floggerBufP.bufType = LoggerBuf.BufType_FIXED;1 R/ X3 h5 }+ N; f
3 A+ I. Z5 J* y
var appLogger = LoggerBuf.create(loggerBufP);5 ]9 R5 b! M9 u
appLogger.instance.name = "AppLog_Core1";" k1 l0 L, u9 r4 c  A
Defaults.common$.logger = appLogger;
5 ]) }1 E5 h! M1 Y; m. yMemory.defaultHeapSize = 0x8192;   
% h* b7 h( x$ ?6 B4 kIdle.idleFxns[0] = "&LEDStatus";
7 d* d0 ?: q- q: @' j* eCache.initSize.l2Size = Cache.L2Size_32K;
% F; {  P- _) T& a/ o
6 b: y" ~7 X9 ]  M5 `+ G0 O
回复 支持 反对

使用道具 举报

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 */
4 C" S3 p+ e9 s" _* r5 C2 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) i0 w3 \, g% }: F- W
var heapMemParams = new HeapMem.Params();
& B' _  B7 j& Z) O' PheapMemParams.size = 0x4000;& S) d9 {2 E; V7 X: a

( c2 E8 B( U+ H( m7 p( S* bvar Memory = xdc.useModule('xdc.runtime.Memory');
) t6 a  U/ {4 X9 z' f# s. a5 PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, S/ m! m! q- i/ \
& u9 _$ s/ r7 Z7 |& \! L4 Y我大约calloc  每次共计大小为5K*16bits,
  d; R' N* F% S* B2 a2 C5 E1 Q而默认配置才0x4000、需要改大。
4 d0 z6 M$ @% {$ W" ^9 G$ a- v) B2 t' `: O. b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# r7 T2 H1 p# ?, ?! m1 E8 y
Program.heap = 0;
6 }/ k0 Q- Z/ \: o# t& u% ]0 HProgram.argSize = 100;  /* minimum size */3 N. T2 ]0 {0 F  |* r8 W+ r
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-25 04:05 , Processed in 0.040582 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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