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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; }$ k( M! t# g+ [

5 k; p4 f) |" T! y) b, ~    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! j1 p9 k: N5 y) c6 \' c6 E- w

% B' ]( g% l$ s% W其他程序段。。。。。
" d5 b( e7 T- A
) E, n! r* W  C- r$ h   free(x_d);
/ t2 d2 K) o; }* i1 f5 {
% n: k, |% Z; P使用DSP侧单独调试功能,验证动态申请没有问题,- B$ S7 W4 S9 ~5 x3 S
2 _) [% X) C' L4 f  y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, N. ~/ ]. f8 Z2 j- d

  Y$ [) e* m5 h. v! r+ ^1 l5 b/ ]. u
% F3 J2 z0 r. A
6 R, A7 E/ w# N8 J9 p- z) X" k& D' Q: {: D9 r2 W/ m
+ U6 T) m, _! V7 d

' I( J5 I' L# q, e6 ]$ Y, |
9 ]  i0 W8 [2 K
5 H2 D+ d* d3 `- c* K4 d# \4 ?' f
+ ]$ Y$ J/ X0 H. @( u5 D0 W7 n2 O4 m+ V3 o) o3 A
分享到:  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 */1 v5 l( O( h8 D7 `- l; N; M3 `
Program.heap = 0;! M. r; g% [' A1 N  W$ \( e
Program.argSize = 100;  /* minimum size */( e2 X) ~& a* a/ E4 ~) r
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' J5 s: c3 P5 `4 S& ]
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 P1 N4 Q* _; l9 b4 g4 R, K
var heapMemParams = new HeapMem.Params();$ B! P' F" t) w4 Y
heapMemParams.size = 0x4000;! D; P+ ^  s/ P3 P  e, \
) `8 \1 i: d) @6 v0 x5 h, E
var Memory = xdc.useModule('xdc.runtime.Memory');
- b, s- l* u, uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% i9 i1 r' m2 g7 K8 }

0 U! _: i) Q% D( x- m我大约calloc  每次共计大小为5K*16bits,
3 ^9 r4 m3 C, b3 e而默认配置才0x4000、需要改大。
# s- p3 X3 f4 k7 F  A. n8 H- B  V; U  T' f% w- ?9 _. L
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
$ k' ~, w  A5 @; g/ E" _我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& X: v7 {4 V7 f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 Q; |$ Y9 x! f

1 K* g, F; _! D$ o是不是需要在DSP.CFG中进行配置- h* _8 @2 L  F
我现在的配置为" ?: _7 B" z/ f7 |+ H1 X

- {- R  J. \) f; C. [- l/ a1 E/*
4 Z/ Z' S: Q; |1 K *  ======== Operating System Configuration ========
5 K# J6 b$ n- h2 D% c! U */6 x% ?4 z) |, m2 I' i% e$ q" V  W! G

+ o( ^( D; ]4 I3 c+ F; p/ \1 m/* no rts heap */: _$ X7 J* U$ D/ @' j1 O+ m
Program.heap = 0;5 H' w) O" l: L- V2 ~5 o) A4 [% W
Program.argSize = 100;  /* minimum size */# R" B+ i0 t  _- D" T: ^
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" M# k$ h4 o% ~1 o$ X
& g) _9 i0 c8 ?& _3 F
/* create a default heap */  B  I# o1 `; L. L; A& Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- p. k0 z7 _9 E% H) |" e( k8 e
var heapMemParams = new HeapMem.Params();
* _' Q& h) W5 I( h) u3 Y8 ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) n0 y) N. L5 U' z# q" j1 }9 O% J) o: S7 h0 {! [8 p  t. D% w. S
var Memory = xdc.useModule('xdc.runtime.Memory');! p3 i! O% l, [0 f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ i9 d( _8 e4 a( l( F
( w. X4 N  v% y' u) ~
/* configure System module */7 k, K: U+ {7 a. Q/ h% R* o
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" C7 _, y+ ?2 g' ~. ISysMin.bufSize = 0x1000;7 j9 v8 U1 V+ x& C; j% z
SysMin.flushAtExit = false;" {( @: _4 G8 k' K

+ D  i6 r3 ]9 e7 J& T  [9 G' z/ Gvar System = xdc.useModule('xdc.runtime.System');
8 I; w, m9 K% E6 o7 RSystem.SupportProxy = SysMin;
5 V+ u- F% ^. I$ v( s" V. m) Q8 h# A% P; [0 m: Q
/* configure SysBios to use the lower half of Timer 1 */
' B- u8 q! Y* \5 K4 gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 `) s6 Y: M' h0 T! F9 C7 Q6 M' _var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 r) ^7 V% D1 e8 e4 z" F8 t- ?: q& M
Timer.timerSettings[1].master = true;
5 O1 x, S# B" Q' Z- ]* P& hTimer.defaultHalf = Timer.Half_LOWER;( V. J/ P: V, M
Clock.timerId = 1;
9 U# @6 m' I+ u, [! Z- H6 S9 ~
0 P7 m# C3 L1 _$ g7 g8 \) L0 Q6 z, N7 n: L. r( P8 M; M9 F  z. J
/*! l) o1 q, G5 ?: m" n  ?1 U
*  ======== Miscellaneous Configuration ========" j4 d! V% a0 Q- P5 a
*/
2 }' k' }: l, e8 T3 W* b' t7 d: Y: C0 w" t: C) c5 M0 C' e* D
/* set default diags mask */
: e, `8 A' E) Dvar Diags = xdc.useModule('xdc.runtime.Diags');
# `! t$ E; {- B- qvar Defaults = xdc.useModule('xdc.runtime.Defaults');
# D! H8 G1 T% b& g4 B5 _9 C
) U; I) |9 N0 q# b6 g- {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' ^7 O3 p3 m) RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. `: X* D( d5 z; s7 o% r- `, HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) M1 s& x( W% a  k2 J) b% c. I+ {Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 s+ R# f5 l3 Z4 F* f, e) F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  I+ J/ L0 Q% P- z; ZDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 i% m1 N$ T& j8 q1 P$ h& L; q. YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( Z/ F  k* ^4 z3 oDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* |. }' w5 e) f' f% O& D1 f, o# O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ |7 a1 K) l& C5 A: ?4 _# H3 D
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( h( L* s5 X3 G) s& t7 n' \0 zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! L2 @  q% @3 ^3 x4 w" uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 B  K+ q/ X2 v0 q/ M( v5 v6 Q  `7 t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. P! |) v2 ^& `) @3 w
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" P* n8 ?4 L7 e) D
$ @4 g' _3 v- B/* override diags mask for selected modules */
- O* X# y& L) T9 J0 [. lxdc.useModule('xdc.runtime.Main');$ x' ?; P! C* ^. R
Diags.setMaskMeta(
1 t- {" h3 D/ H9 K6 ~0 A    "xdc.runtime.Main",  S; b% G0 W4 {; V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 j/ p% {, F  z
    Diags.RUNTIME_ON
4 B, g  T" e/ q# V% T9 n);
5 h3 E% ~' p5 ?, A0 t5 P# c0 ~/ ?' K9 F6 g6 |+ h: j, ]
var Registry = xdc.useModule('xdc.runtime.Registry');
/ _% [5 u. y' B. D) m/ QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" t, \$ J3 }* _: cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' e5 @7 _2 d/ Q$ c9 `% _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 }1 Z/ D7 V& R: c% K# R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& D3 w2 Z9 ~' |9 ]" N

, _, x& V$ S4 v) Q/* create a logger instance */
+ D" ^; J8 j% @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 l1 U8 M/ _+ B7 c: w8 L$ H
var loggerBufP = new LoggerBuf.Params();# T9 @) V  A: r" j" P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 d7 t/ o. ?  H' r
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 a4 |- k" X: B; S% w  q( F  O! V$ o, d8 K  q# e& Z6 B# w2 V
var appLogger = LoggerBuf.create(loggerBufP);
  S, ~! d  ^! f4 P6 U" ZappLogger.instance.name = "AppLog_Core1";  ~* k7 y4 D' ?
Defaults.common$.logger = appLogger;7 u' x9 J& S+ l- F' E* O
Memory.defaultHeapSize = 0x8192;   
9 W2 P3 y% p( ~- F! G3 OIdle.idleFxns[0] = "&LEDStatus";
( \. j9 b: P: i! x7 qCache.initSize.l2Size = Cache.L2Size_32K;3 t3 n# K. A3 U2 E8 H* z

( M+ }* e! J% |: N) g/ g( q2 T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 19:47 , Processed in 0.041386 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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