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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; X9 r; ?  R( j1 ?4 W) u) h
: C" q. a. Z8 H- D( q7 i7 q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% e# E4 `: M, J* G3 d) O

4 }- j( r2 D9 V' c5 @其他程序段。。。。。
, J$ z2 t: Z1 q4 b8 a  A4 Z   D% a6 `: N; Y. _5 }
   free(x_d);
% \3 x& P7 `, c" Z0 l1 A, t+ Y0 w2 c  @5 X. K7 M
使用DSP侧单独调试功能,验证动态申请没有问题,  o/ t$ R  b' u, v0 a. c
9 A; }% w- X: f5 m! [$ P9 S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% S9 q; a% t. U1 W) C' ^8 B( ?
: N: D3 C2 Q) g" Z  D% p
- A4 _, C9 L9 C: g1 g. w$ }# n+ [

) O$ h/ i8 k* g$ }, o' t' Z/ P) g) j/ g& e9 F2 o( x' U! b8 V

6 |! ^( i: W. n* h$ F, y
* a/ \8 Q5 [* U# h1 O) R( }1 g$ b* c7 z2 j7 d$ @

( e3 N, K$ o% L/ R1 G0 T4 ^5 G2 u" ^, f' }( O+ U4 i' M

. _- D1 |, ?3 ?' E; Y' @) @" H5 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 D6 x: K/ P! n" r$ R" a/ b! z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 u! |3 r2 ]$ X$ a% J5 _+ i3 t- a  w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- J% B  D' P# `+ F/ l: O9 X
- z1 V# W1 R1 W5 x. g+ D
是不是需要在DSP.CFG中进行配置+ P, x$ w( C' ^* x/ Y/ Q* c
我现在的配置为! K1 ^! s. f, Z) |& }+ C

, A. R. a# ?2 ^( w- W7 R/*
# C6 H+ U2 I1 _: s# O+ } *  ======== Operating System Configuration ========6 \0 z, k" D5 a  `
*/
6 k9 }, L4 [* C
9 I  z) M3 D) K' T/* no rts heap */2 H0 i8 ~( d' k. _8 N2 R3 T/ f
Program.heap = 0;5 S! D7 o  d/ Y& I
Program.argSize = 100;  /* minimum size */
& w2 l; m5 }* ^0 e' j; x* JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; I6 W6 K0 y& M  ~- h! K: s

7 Y+ D5 j+ M( k. L3 v# d/* create a default heap */
. _4 B5 P( N# j. X! ~$ l( Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  T, j  ~9 G! t7 U5 z
var heapMemParams = new HeapMem.Params();5 }( k8 G$ S2 ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 r: X  W, f6 z, v9 i# {/ [- Q* j4 ^; d/ X
var Memory = xdc.useModule('xdc.runtime.Memory');
3 s) y. d, p3 _) O, WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ i" K/ t' b- {6 `- D

! r. x. m7 \! o4 u5 D9 B/* configure System module */
# z2 k0 v6 q) n6 s9 n/ Avar SysMin = xdc.useModule('xdc.runtime.SysMin');: ?; c- e! U. ?4 A; s* M
SysMin.bufSize = 0x1000;
# C. V' g# `  X* O7 w, ], J! xSysMin.flushAtExit = false;
9 j/ J, \4 _; W  e7 r" N& g
2 F& S; P0 X! f7 t/ w; Yvar System = xdc.useModule('xdc.runtime.System');% F/ O4 `! S; e( {3 V
System.SupportProxy = SysMin;
  m' n( k0 f4 r# |# x+ i1 E. o9 o. J+ V% h2 H
/* configure SysBios to use the lower half of Timer 1 */3 ?% Q, M& u$ N" E4 |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ @4 s: n9 z7 }; f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- y+ t! Q; o' t4 N* oTimer.timerSettings[1].master = true;: u8 D' \. r" l
Timer.defaultHalf = Timer.Half_LOWER;% \: |& Q5 y) ]+ S- P
Clock.timerId = 1;
" C1 O7 w" i- d8 N. t5 O, z- l
  r4 L0 F* a' U8 e0 v4 n4 m3 W
: v1 W  {& [; r: ]  F/*; u9 t1 V& l9 q. e, T
*  ======== Miscellaneous Configuration ========
7 }2 j: ?% }( S0 l */3 U  x% |+ a. o6 r+ W1 ~

( k2 ~0 E! J0 D/ F" O7 }/* set default diags mask */
7 A4 o/ Z# U& O/ {) Evar Diags = xdc.useModule('xdc.runtime.Diags');
* H7 T* N/ ^# _; p/ xvar Defaults = xdc.useModule('xdc.runtime.Defaults');, G' l  E9 b2 c  v

: l/ H& [; J# I9 V/ V0 {0 u9 b% rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* _; U  f) ?: ~+ r% t7 b
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! i0 v+ d- _9 dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ C& f* ]8 i2 W8 h& {0 J- UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& D* }2 e1 t2 z  P6 \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# w# |! k& Y, ]4 H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" j0 P7 ?9 I4 M; o" L- \/ uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. w4 H: n! S5 j2 ]( m5 P2 a* }Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: _- O  m& |" P9 a! M$ a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! v& F4 s8 g* ?/ B! P5 a! E
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( a; y1 h0 q, v) _/ XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- n" G' @6 A( H% T/ c8 \" b
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* p6 z+ C( r6 f" P, s9 ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 d( i( J$ {  E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; t+ D, {5 S5 c9 }6 O5 J$ P

3 H1 l/ o. N0 a) M' e/* override diags mask for selected modules */* a- t4 e) t" q; W/ o
xdc.useModule('xdc.runtime.Main');8 R5 b& m( d; P! ]% h' A
Diags.setMaskMeta(1 B2 f( _- |( `* x
    "xdc.runtime.Main",
9 d4 e- F- V6 h    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ ?' F; v; j. w    Diags.RUNTIME_ON) {- U. A$ H4 @& V* F4 `2 b
);8 @$ n7 l& R& D7 q4 s+ R% W  s& J5 |

, m2 v" R! f. b+ I( ^  `var Registry = xdc.useModule('xdc.runtime.Registry');3 ~! P7 @0 U( b1 [& |3 y/ v! O3 c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ k, C& |' V/ p9 j7 ?' |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( A4 c% k/ v6 Q+ XRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* q- o% I% _( D- v( T/ ]  O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, y( @: m* b: f) \2 X
! H+ G5 m0 Q" w( w0 c$ V3 S/ f3 }4 ]+ A
/* create a logger instance */
  ?' M8 ]; _9 Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 k! A' S, @' s5 @  W7 Z
var loggerBufP = new LoggerBuf.Params();1 I( c/ F" H4 ^/ D3 p9 P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 U8 Z: L, p6 v+ Q1 l# wloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 b) |% {8 F; g- B( u" s: A
/ F  D( W3 `, [% x! s5 Q" v( [
var appLogger = LoggerBuf.create(loggerBufP);
2 @, p6 v7 N; N7 s, tappLogger.instance.name = "AppLog_Core1";2 X+ E1 Z4 Y0 J7 J
Defaults.common$.logger = appLogger;2 y# v+ d: J. M! l; w
Memory.defaultHeapSize = 0x8192;   
5 B  z$ O8 P" O7 g: W' S4 Q: V  W9 jIdle.idleFxns[0] = "&LEDStatus";+ U/ s9 O1 k1 H  s( H/ ^
Cache.initSize.l2Size = Cache.L2Size_32K;
* ?+ I% ?$ i. q5 j6 {  t3 b* K& b" _8 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 */
+ J8 X* W2 v$ f" fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! Y# X- `, U, y9 r; Hvar heapMemParams = new HeapMem.Params();
7 w7 O) ^! E& K* D& H# V+ P/ v6 wheapMemParams.size = 0x4000;+ \9 ^% {5 d' w$ E/ p: J
$ I9 o& H2 H) t; s# y  }
var Memory = xdc.useModule('xdc.runtime.Memory');
5 w' U. M" [1 v6 b$ X! _4 `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, @) F6 F6 Y8 k" ~. _0 `
( \/ ^4 o: I" R! c
我大约calloc  每次共计大小为5K*16bits,9 D7 t1 H$ k3 ~
而默认配置才0x4000、需要改大。
9 X; \  {  _" c7 Y
/ F8 \! f/ E( f  m; ]! T, O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 \% O; f1 D! A' x$ d: C. E
Program.heap = 0;
0 h* c7 u( M% |% ^( [# iProgram.argSize = 100;  /* minimum size */9 D$ ?3 G, E! V  s* o* Q5 t4 D1 Y8 A6 j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-6 05:55 , Processed in 0.040881 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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