关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: D9 \! {2 T9 c3 J; H+ |
5 a0 D2 G2 _4 k; _% T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- H( N( Y) ]* f" j
- j8 o; p% s3 c; U) }其他程序段。。。。。
  p6 `# M& K. _0 p$ L6 X! \ - l. T, O' T. d: h. s
   free(x_d);
0 d* f- t# Y; Q! l! }! }
* N+ ^/ I1 l$ A8 }8 i8 Z; ]使用DSP侧单独调试功能,验证动态申请没有问题,5 B, h6 ?- J' L  l- ^# s

2 u; K4 \; |( Q7 c6 {; P% B但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; R. z; e  L4 N; ^2 T: H/ y

: g0 {, [- B$ U3 q) n1 I! }1 R( D% d6 i- Q& U
2 C& Q/ e2 K- V* \! H
; P& i) Y2 m7 I/ O  g- u
, z9 q* ~6 `% r4 S+ I. d9 b0 d7 D

! V+ n0 ~: t/ H4 x$ Y3 o# M
( e/ U# ^* J$ @( J5 \* y- U- x7 F3 ?1 S9 l) R( Z/ c( s" B. v

+ B6 y9 R8 V' s, U: ]0 W( {& F* b4 L6 g
' C- q+ w8 B% W5 L+ F$ h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: M" Y) u+ b/ o: _* CProgram.heap = 0;  o0 C% W/ A! D
Program.argSize = 100;  /* minimum size */6 _. f8 d9 w3 u
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
5 Z$ c( H5 Y4 Q% |, \7 Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, G: n& a9 ~. `! `2 K7 S" a( \
var heapMemParams = new HeapMem.Params();( w8 T) z0 J) D; ]( @
heapMemParams.size = 0x4000;6 Z, E& N5 y8 [7 r: L/ p, R  n6 K
: |- v4 L: O7 n9 O- e6 \# D6 e
var Memory = xdc.useModule('xdc.runtime.Memory');+ a: L0 n4 @5 V: z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! ~8 n" _# M) }1 L+ M, U' s4 O
0 {  @/ |2 z: o4 i5 H6 d. f我大约calloc  每次共计大小为5K*16bits,9 Q) ]. j; F) C: c8 K( C
而默认配置才0x4000、需要改大。3 h8 ]% B. \; P: p' R- a% Z4 h( y* J
/ |! a2 _# b1 B, F: Z' U9 G  N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: i9 {9 Z! S. W/ j: W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 ], w* ~! S9 G8 s1 i1 n
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 A& Q( b8 n& m( }! o  d( }6 B
5 r) Y" t( P( k  L7 V% l: e1 }% [8 o
是不是需要在DSP.CFG中进行配置, e: G1 {1 n/ W) ~% {
我现在的配置为
; i* |4 |- p9 i& v# D  z+ a: D2 i# n5 K6 h. L* r6 g
/*
0 a/ C1 Z; N6 ]/ S+ c *  ======== Operating System Configuration ========) J7 u8 V- a4 X+ ~' z# P* K
*/
! W5 d! K3 U0 @" E' G, D/ m
3 ^2 \2 t' F! k/* no rts heap */
4 N& C! I  z  h# hProgram.heap = 0;% I3 z  o8 r. n* B/ `" r8 d& v
Program.argSize = 100;  /* minimum size */
5 Y# E% o! r/ d# j& l/ P( PProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 `3 w4 M2 i; h1 k& F; ~
* B% _. r' ?3 u2 c, i0 G( _
/* create a default heap */
" W. k) @) C% A7 R+ Q2 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( \$ O% @; E# M8 q* Q3 l
var heapMemParams = new HeapMem.Params();
/ ^& b& {4 h- CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' n7 U# O: r0 {
, y2 p5 U7 }5 c2 T% ]* S. J9 b1 J% A
var Memory = xdc.useModule('xdc.runtime.Memory');
! d( [$ k0 Y  z; ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, x; Q1 N8 h3 \+ S6 Z
- ?1 Q5 O( U% h; V8 j$ ?/* configure System module */
* M+ l& V" o& f# a: p2 zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- g% D- x4 ^1 n4 YSysMin.bufSize = 0x1000;1 L" S' t8 a! c4 [' v
SysMin.flushAtExit = false;
- n& ]- l9 M7 k3 C: ^9 ?/ W1 y0 j. B# I' _  H
var System = xdc.useModule('xdc.runtime.System');: B: t" P: E) e+ n* O' o6 v
System.SupportProxy = SysMin;
6 s+ D/ J) H. ~1 y  T8 f' F  E6 C7 u8 ?2 u0 ]1 b! }. `
/* configure SysBios to use the lower half of Timer 1 */" l# p3 [0 o" F9 o5 I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& w' R. _9 E9 d! m4 kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ t+ K% H0 S/ GTimer.timerSettings[1].master = true;
3 I4 ~5 Z7 E9 L5 }% {/ ~/ KTimer.defaultHalf = Timer.Half_LOWER;
; S" n3 }; D5 c# yClock.timerId = 1;
5 h' h2 W7 t7 [2 K3 [* W0 v6 }- x. }6 _/ N  \: }

5 _3 ^1 d4 h0 g- J3 {" q  F/*3 M- k) H% B2 i# t$ b/ X
*  ======== Miscellaneous Configuration ========2 @- n1 d$ j( i5 a9 t, n" q
*/) }! k4 K) F7 Y" n' M+ a2 |

# E1 x0 T* q/ P& D9 u+ X, M/* set default diags mask */3 B) [  `) _, P, z) `4 B7 U
var Diags = xdc.useModule('xdc.runtime.Diags');) q! H3 Y% [0 K/ G
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 u4 e6 e6 w0 q- ~
+ S9 J% u( p3 [+ uDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 _0 _3 |/ \* l3 |% gDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& B8 ~  f# S4 D9 o8 T: [
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 ?: o$ H0 i  k; @* \) X( |( i( h  SDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 X, h( i4 w3 X' v( i7 R5 s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 C1 W6 S* w, H5 N; YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 b7 n% r5 ]0 K6 ?7 lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- S8 h% x. ]! M  Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 {; G* |& @3 c& b5 w* U6 l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* q  `1 `) N/ \4 Y% R$ YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 N, B0 r0 d9 ^' {1 ]Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ H$ B: M  G) N( x! \$ I6 EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% w8 F" K  f% k, _  ]( i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- p# ^+ }( `8 h7 q9 m
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ U/ Y: c+ C* x+ j
9 e; T$ f, I% p. ~/* override diags mask for selected modules */
4 k) y* V" G% U8 Txdc.useModule('xdc.runtime.Main');
  K; }% V) g5 i6 e$ YDiags.setMaskMeta(
& Y8 m/ C& [5 J2 \% ^$ c    "xdc.runtime.Main",7 N. M- r/ C/ w
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 ?' L' k4 [; [0 K6 ]) d& q
    Diags.RUNTIME_ON$ a9 u" B& F- o: i. D
);' o" V4 N5 k# B

1 a1 A* @, X* Q- s6 N2 J2 A, Gvar Registry = xdc.useModule('xdc.runtime.Registry');
; V7 N; O1 W; o5 vRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. r& g. y" y, vRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, @2 H7 M3 R, ^7 DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;) D. M! s; I. N8 z. w! Y% p
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, n" N- W5 r: E3 w+ p: @  _- h, L: [0 U: P, J" B
/* create a logger instance */9 V( s" a/ D6 i8 O$ p
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; G% |; _6 t$ V: h! O, `3 V1 l! j( X
var loggerBufP = new LoggerBuf.Params();
, z" {. k1 k& G, s' hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% q- V3 s' |6 |/ w( Q4 }6 h: t7 TloggerBufP.bufType = LoggerBuf.BufType_FIXED;1 J3 H7 k: y/ o# J( [- {

7 Z- X6 f- w; Uvar appLogger = LoggerBuf.create(loggerBufP);
- W% N4 c5 Q* G& RappLogger.instance.name = "AppLog_Core1";
7 w+ ~3 U5 v8 c* X5 c) T' ?Defaults.common$.logger = appLogger;; J6 g/ o, R; s  l6 F& Y$ z8 w
Memory.defaultHeapSize = 0x8192;   
4 M. m+ V' i: l4 @# ]+ c, EIdle.idleFxns[0] = "&LEDStatus";( e6 q  ]' u( V7 _+ g. V  x
Cache.initSize.l2Size = Cache.L2Size_32K;3 W0 x; P+ j9 X4 Z7 ^* t

6 v) N" Z# J: n, _7 @
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-14 09:47 , Processed in 0.042592 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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