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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& Z9 L1 r2 l/ a+ W( h) z& o* f" ~: |6 ~5 ~4 n" ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: N. ~4 u& W  u" z0 H
: w* U. I1 T2 I% b* B
其他程序段。。。。。; v: J' [0 c/ [" L
: S3 s2 l' X1 S4 x/ d7 n1 d2 v* i
   free(x_d);
- W9 ?: b3 G9 x: h- z) k/ N3 M4 V, t4 f5 l
使用DSP侧单独调试功能,验证动态申请没有问题,
! T5 o- F! W# _* a* w8 d# p6 r$ k, ?! V& [/ \, L
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, Y% X3 e/ ~' Z8 c5 O  k" V/ i( @
0 }5 }4 P! F( u2 P8 n( [4 `
+ z- Q% G- s3 J) y# E: A" w
& v$ }- Y9 U+ S  n
! A6 P6 V9 x0 J; B  E
# A& T9 y/ Y& u7 F" P

+ t% ^& `" e; M  G1 Y* w6 S1 g# P3 v) K0 V/ F0 F; y- s1 f

+ V0 B. R' C5 _
$ l6 o7 H2 e: |" A- c
2 i8 E" X4 X8 y6 F- ^1 T% ]  S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ V: t; P, d. V  l+ e3 M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 l! z5 y9 K1 u2 l7 q2 {* u- [( c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" Q; D: O8 ^' {
/ C: y4 E' k8 B% g1 u
是不是需要在DSP.CFG中进行配置: E- G2 X% O  |8 m3 f
我现在的配置为6 t3 A( `9 [! O0 f

1 w3 O! _9 S; R2 ^% I. o# {/*" W' F3 i& b0 K$ ^& i6 |" |
*  ======== Operating System Configuration ========- E" }0 j& W5 |3 i; k" j
*/
# ^, S5 i4 h6 N" B+ ?5 U
' _. p0 S9 R! D' B4 T- x/* no rts heap */9 W7 P4 b! s; p5 z1 H0 O
Program.heap = 0;
# y; Y% i1 l2 q2 I% w8 WProgram.argSize = 100;  /* minimum size */% g' Q( ?' f4 m6 F( r% \( E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 g" u! p; T) n! [$ g9 a. B4 ]% ?: Z% y4 ?% `
/* create a default heap */% [1 I1 J: l' {  i# Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; A  k0 F% ?' Z! Y1 t5 y( a" B* R  {
var heapMemParams = new HeapMem.Params();
3 b; u8 M% G: d' jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) _5 G: ^- o- H; }+ t& E/ @
+ N5 N2 o8 d& d* C) B- ^6 M" k
var Memory = xdc.useModule('xdc.runtime.Memory');% ]/ K. `0 A. w0 J/ S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: Y  D4 K. V) c4 G
# B1 O. J) D/ ^/* configure System module */
! O' N. o5 [4 d+ K3 O  Gvar SysMin = xdc.useModule('xdc.runtime.SysMin');8 n5 j7 @; ]6 j) B4 M  g8 i
SysMin.bufSize = 0x1000;- a+ w0 H" k- ?. \. x& a( J' h. `2 E
SysMin.flushAtExit = false;4 i$ B; ~; G1 J
  g& Q: e1 w6 r( i% V  K$ i
var System = xdc.useModule('xdc.runtime.System');
# V, O  Z: J& E9 l& h7 ~2 ]7 zSystem.SupportProxy = SysMin;% J8 R3 B: A4 i6 O' P

! G# u4 w% ~( \) F/* configure SysBios to use the lower half of Timer 1 */! @+ j& e/ x3 F' {! f
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; N' o( a) W$ Z; i6 f# }; T3 W% Y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');  U* W6 g3 i  J( w
Timer.timerSettings[1].master = true;
  V# D0 L0 k& y" t0 nTimer.defaultHalf = Timer.Half_LOWER;6 A0 H: _3 S- D3 M+ m: c
Clock.timerId = 1;
% [1 W0 j! i. N  |8 k9 x& ^2 @# W8 O2 y+ B, U& c0 ]1 I7 B: h1 H

3 n$ i1 x6 S, y- [9 P7 Q/*6 c4 U: l8 c- [6 Z
*  ======== Miscellaneous Configuration ========
1 s! o5 ~' c5 o: h */
  B2 ?8 W( {# J. x2 q4 a( P# k8 n1 J" g. u% D- q- r
/* set default diags mask */  i8 E$ Y! s9 S- }, L9 ?. @8 z
var Diags = xdc.useModule('xdc.runtime.Diags');
4 n- H9 }' d) S" s+ R9 m' `4 Uvar Defaults = xdc.useModule('xdc.runtime.Defaults');
: k% u% i, e; }/ m* k
& X+ a0 B$ q  W) l( _. xDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* S' k2 d9 |- z9 f) A3 wDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. O9 U; t6 ?9 Q1 R5 T/ x
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! z8 L) B4 O5 l4 ?0 fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! V6 w6 n% G' M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% J; z7 l; z0 Y+ T- _) O6 W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: R) Z7 i7 p% w4 TDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 c2 y  [5 _" \: A* fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% ?" U$ N% _8 i8 M. }3 a$ uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 Q# s) [9 `; yDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 W. Z: k% w% ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! P) ?; S% j' XDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" V4 Z6 v$ b+ @5 _: h/ C1 _" `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% _4 s5 X, C$ D8 Y- i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 H. s1 {4 n& s$ p" W# G, N9 [9 F* h
/* override diags mask for selected modules */
' j1 R7 k/ a( ?" z/ T" m: jxdc.useModule('xdc.runtime.Main');6 l$ e6 K! z8 B  H+ d8 \& k
Diags.setMaskMeta(1 d2 N. G& f$ _% {
    "xdc.runtime.Main",% q# N' ], R2 |% |9 v
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- S( M" B9 \, E2 I! }! V, V
    Diags.RUNTIME_ON& O: W% k. s' _1 r& @6 e9 i
);& T2 J6 m! E8 T( ?- t: [1 K

3 C8 h( u6 L8 {0 V3 h# A* R( nvar Registry = xdc.useModule('xdc.runtime.Registry');9 U1 n( ^) K; w  n$ i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% E& s2 ^+ C1 Y1 Z; {2 B* k4 p$ `
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 u+ F7 p( h, E' H2 wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 H5 f; X: p1 O7 I, e  k5 T4 o6 ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" E' p6 O* j. Q0 `% ]
6 M# K7 @) L+ D- X# Y3 P. w; t* F/* create a logger instance */
* W4 K- ]6 s& j3 d" k0 b8 \var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) n& y. h* t. j, cvar loggerBufP = new LoggerBuf.Params();
+ Z/ y8 N% B  v* dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 d2 N! H5 E3 s4 O2 D6 f+ p
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# i! p" B+ D; j; K

; \- E' A5 r) Z  w: _. avar appLogger = LoggerBuf.create(loggerBufP);
6 V+ J2 J; ~4 X7 F8 aappLogger.instance.name = "AppLog_Core1";
. h% @& s+ ^5 b6 C1 o3 b% w7 zDefaults.common$.logger = appLogger;1 y3 d% t: N# N- t9 R
Memory.defaultHeapSize = 0x8192;   
6 F6 T- l: F' m  m8 M/ R5 RIdle.idleFxns[0] = "&LEDStatus";- F# w1 K7 d0 ^- M( m9 x
Cache.initSize.l2Size = Cache.L2Size_32K;
, J+ o; S0 ~6 d! ]* g: w, s8 t) d& ?7 x
回复 支持 反对

使用道具 举报

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 */* D4 a- t9 a% n) j9 s  j5 t. r/ x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 O9 E  A) {/ I8 Z/ Z$ |var heapMemParams = new HeapMem.Params();
% `& C* M$ ?% K5 C+ c6 rheapMemParams.size = 0x4000;# c) C( u5 l6 V5 u
; c  G3 N1 j0 T% N8 h' F, b
var Memory = xdc.useModule('xdc.runtime.Memory');( G3 C1 E- |6 G' P3 K8 h( ~$ ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 l0 y8 H% D# N4 g9 p3 ]3 j! O" m& g3 v* h- E- S. q
我大约calloc  每次共计大小为5K*16bits,
! k# L6 e0 L; G  L( |8 K而默认配置才0x4000、需要改大。
, j% h" n& H9 E- z& v. _  g
0 ^8 H1 Q& C1 x* \5 H# a* i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ S- |2 f$ O: z2 N- KProgram.heap = 0;% E" C- R0 s2 ?2 S4 D7 l( w$ I
Program.argSize = 100;  /* minimum size */, ~" X0 H$ ^4 P5 A0 Z% {8 p1 q
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-4 09:28 , Processed in 0.076353 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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