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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& S$ X  p7 `: i  {% f

, ]1 o) i! u3 E) F9 {4 ]  M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% l) l9 q; D% H5 s1 n5 I  j

# B5 |' c5 m; m2 n% `6 E其他程序段。。。。。* c5 [' [- x. ~

, e# G5 }8 s8 y) ^   free(x_d);9 E7 X% r$ D% L; E6 F% t# m
3 ]" _: @! ]' B9 S
使用DSP侧单独调试功能,验证动态申请没有问题,$ W; l& e; }' `3 l  U  \1 s8 y

: Q$ \+ ]2 _* z) m, N3 ]# M2 e但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% @/ O8 u4 x, {+ h6 b8 I. E

* w! N/ i7 M3 c4 Q9 c1 N# i
0 d5 Y1 L/ k# |& K
/ M7 o: g3 M( T) v% u$ Q* \6 z
- x: e/ w3 ]" y' f5 i
. K% ~, r- ^" b) a- c* j9 e6 B% q+ h9 |8 U
& W( t# I4 T. r& ~

! E7 e/ k3 P; l1 {2 w' S' T$ n1 ]
. X/ I1 Z4 g, B8 ^' I6 U: D
: a8 [& x6 \/ Y; A' u9 h1 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ d; o2 C% {+ O; o+ J* K4 r我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  Y4 B/ H$ u; D6 `7 D+ S
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- z* Y# ]4 Z2 D4 a
, N+ w6 X' H/ f( x
是不是需要在DSP.CFG中进行配置: M3 B  i* u0 @: P& p" q
我现在的配置为
* g1 h0 {& C) i6 S+ z  F+ Y- z) z! C2 N; r6 F0 d7 G6 v
/*
* G( W' E9 s* p4 F5 R' ^- P( X/ \' A *  ======== Operating System Configuration ========6 o) `1 W- W; a4 J/ Q8 d' A
*/
1 |8 n* S" Q: U- W$ n! f3 ~3 }: z% }5 t2 F# z8 h7 P& R" @$ ~+ F) Q
/* no rts heap */
4 j) [: C5 G% p8 P- ~9 mProgram.heap = 0;7 Z; j% Y3 m. T1 s5 d* X3 K
Program.argSize = 100;  /* minimum size */
5 \; g# @' j# ~. b- ~; hProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 q: m' Y4 c3 Z6 L! Y7 |  ^

% S/ L- Z2 N+ T" r: ~9 g/* create a default heap *// q6 s! u, M' t0 s, s& q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 ^4 j4 ^/ d: b9 k- V8 Y' c
var heapMemParams = new HeapMem.Params();
' w1 j) m  e) ^) m' u5 F4 ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* c# a9 W* [8 }' U2 n% v2 t' ]4 l

; D) A, `) E/ g' B' b
var Memory = xdc.useModule('xdc.runtime.Memory');
7 |+ @' L5 `0 O& G4 [3 K6 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  q( ?. v8 `7 ?) D4 l8 q! y
3 J# Z3 c& q$ O4 d/* configure System module */
6 g; c; k/ D1 {5 ]" P' M& J  [var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 z( {0 T4 d4 X4 e* g4 [- o& gSysMin.bufSize = 0x1000;
% r" h* E7 `7 B: }! K- H$ D; [, [SysMin.flushAtExit = false;
$ E* N3 {; d$ N; v& \! g- [$ K( F4 h8 C) Z. q0 D# u
var System = xdc.useModule('xdc.runtime.System');
9 n. f7 t# M" {" ~+ `, _, ISystem.SupportProxy = SysMin;
5 P( q/ }: @" H& {6 t, ]- D0 U% {; ?8 d% I: o% r" b+ z
/* configure SysBios to use the lower half of Timer 1 */
& P9 \  n1 Y- s: y- X6 lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 m/ w% O! S* g$ V! W* F2 jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% Y$ Z3 i: d% r' o& u. K2 T4 qTimer.timerSettings[1].master = true;
# {6 D$ p7 R; h- `$ Z, G, RTimer.defaultHalf = Timer.Half_LOWER;
  {; C6 f: V6 n- G0 R. zClock.timerId = 1;
, B3 s/ w1 X7 h  T% c1 y/ k) ~
% c( u" k3 X" O/ z( W+ m* O1 W" n: k$ p$ a) F
/*# x: i: O# K& k; v6 n" Z$ f
*  ======== Miscellaneous Configuration ========3 \  I! K" Q4 L, y/ V% V/ W1 C
*/
' k# I% z& l% @% p' Q8 b
/ H( H' k1 t. t5 R& ?* P/* set default diags mask */0 C0 N+ v+ d: o: N, l: K6 }
var Diags = xdc.useModule('xdc.runtime.Diags');
5 Y: I- X* A1 svar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 a9 G$ B2 |3 N. E! d1 H. |" D, \. N* H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 L! f4 f0 r" _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" |3 j; d" x/ b+ d5 IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; Q) g/ S3 o9 ?' f
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, V1 y8 _2 K2 |% V6 `
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( ^: [8 @  I6 V$ b3 U  jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 i5 ~$ }0 c  z) }6 J3 G
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 l# S& D  j4 r7 ]( e! X
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ M7 w5 `; K2 o0 Y' o# j4 L6 ~Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  V  o2 v1 u6 ?6 l$ I; u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, i( @; `0 `) `& j
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! J6 [( j. h% l$ y8 J3 i6 L" mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* U3 \& Q3 N+ x/ L" i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( ]" g# A4 i' g6 \! HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ i! `4 l( Z6 b* t- C- w( `* X- ]' t8 i4 j
/* override diags mask for selected modules */8 b1 x1 p( a7 G6 @
xdc.useModule('xdc.runtime.Main');4 ^& Q+ f( M4 j: Y5 R
Diags.setMaskMeta(
0 M! x4 s# Y/ a  S% C6 I% B    "xdc.runtime.Main",
4 o3 f" C/ l5 r/ a/ D9 [7 v' a    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 E: `: X. g. V1 x$ k) B    Diags.RUNTIME_ON5 U4 W% f" R5 Y& F$ u% [$ }) h
);. {3 L& F8 P$ \5 d0 r

9 {4 W& h% W: a( n6 Zvar Registry = xdc.useModule('xdc.runtime.Registry');
3 O- a, S! i- E' \1 C: b, r, oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" k$ U$ ^2 R& Q( f9 _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ g' j% I- e6 i8 U- @+ a$ I. b0 x0 S
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! x- W, B2 w5 {* G, F$ L9 H
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ X  e5 o0 V( z+ I
- g1 n- K: C" j4 b) H/* create a logger instance */
' Q6 W, W& R3 i) Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; E  q; S* B" E
var loggerBufP = new LoggerBuf.Params();1 Y2 S' x0 A$ p. g: N5 T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// O; F) z7 l6 O9 P  T
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ M* D6 _; M4 J' Y* ?
. ]4 G  ~: L6 i
var appLogger = LoggerBuf.create(loggerBufP);) j/ q/ B8 @" ]2 d
appLogger.instance.name = "AppLog_Core1";, u$ Y- C4 d7 @* S9 h' @/ N
Defaults.common$.logger = appLogger;
+ T1 Z- {0 p6 T9 o+ A2 h0 q0 MMemory.defaultHeapSize = 0x8192;    " }+ n+ j# Y+ w9 q# ^5 s
Idle.idleFxns[0] = "&LEDStatus";
. D6 H* D1 f# R2 x  `4 XCache.initSize.l2Size = Cache.L2Size_32K;$ @) Y5 }, c, `- K$ P* l+ W
0 J/ b- q* q4 G3 B8 f4 M) I
回复 支持 反对

使用道具 举报

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 */  r8 }; S! z3 X, Q8 O& x  }7 H4 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 j% I+ r8 x' ~1 j$ _( K0 avar heapMemParams = new HeapMem.Params();
! L4 ]' i! F# ?$ S0 ~' u# o* a' |heapMemParams.size = 0x4000;
% {+ B( X/ u+ D' G+ a6 f/ d# z9 i" V( v1 y5 x( b# z
var Memory = xdc.useModule('xdc.runtime.Memory');* ^% x  C/ @3 U. T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) K3 m$ Y, f* o0 R& ~% ]7 r
0 W: n: z7 [  Z" a0 O5 A
我大约calloc  每次共计大小为5K*16bits,! t& z* _' M4 `5 U3 L# c
而默认配置才0x4000、需要改大。. O& w* T+ r) \! W, p9 ?1 Y$ `
- P  \0 H+ r! S3 N( R& I6 B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  h# O9 v3 g+ y- p0 ~
Program.heap = 0;
# G! K- H/ P: U$ E$ {Program.argSize = 100;  /* minimum size */# f. _- ]& Z) L5 @: G* E
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 17:12 , Processed in 0.042566 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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