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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 s% p! x3 d5 y5 b
: d/ s  J" C( L0 r9 b' g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( G& L7 F/ Q3 Q6 j5 o" F( ]1 }
- o' s) M8 s3 n6 H1 V: X其他程序段。。。。。
3 [' P& `$ b0 F* n ) f$ A; H* [; ~3 D0 R1 i
   free(x_d);9 X5 Z+ E) _5 Z* I0 `  {8 p
$ d9 t) o) D" Q. k
使用DSP侧单独调试功能,验证动态申请没有问题,
& A, `  v. @; O( p9 W6 z3 C# r7 v1 G$ t5 I- ~0 b5 c# r' F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. y1 J# t& E5 C: I+ Z0 e  D3 S

* S/ C# P  m6 F* J# s; U; \
, I4 {  Z' X! k3 V# a( r
) N+ T- \4 [: ]; p9 r+ N- M$ s% ^" z  t3 {8 c
& b& g" S: e/ g2 @, S
9 F) x, \/ L9 x9 ?" a/ t
3 b! m2 k# J/ G# O
3 |/ z& x3 F& g! N& A4 j

* u7 A% S& K& D* r, k
/ m0 D" g+ C) w6 ?* q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( B$ ~' m8 S( `$ w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' U$ v2 r( a8 L& U8 [, x% d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 E8 D4 m, o" O, E7 u/ ^! f

9 n. c+ a! r* |) [& h5 Z是不是需要在DSP.CFG中进行配置
4 @8 N8 o- p9 g+ a! a* C3 T我现在的配置为
0 y  Q( [4 L! a: V' c% `: o7 D
8 c9 h  [; b1 Q* F! Q/*
; @% K/ w. P0 C5 C. A* r7 P9 G% g *  ======== Operating System Configuration ========
# A6 P0 C( `+ E0 V* k */
6 l0 c$ @# S2 K/ D. K  l
9 L3 ?6 U5 X+ Q% x4 _/* no rts heap */
0 a& n' I% H, ?' ]4 P% [+ h3 RProgram.heap = 0;' u/ \% z! B0 i4 {9 R) {9 \0 K
Program.argSize = 100;  /* minimum size */) I+ ^( B! P7 Y9 K/ r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% s# u8 j) g; ]6 ^& s
$ G; Z. w2 |6 p2 h( n: N/ ?" m" n4 B. h
/* create a default heap */$ F+ \! s4 a: Y: M9 e1 C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: w; o! I6 Y1 x3 P* g
var heapMemParams = new HeapMem.Params();% p& y* Y( z+ U6 h
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) w' o! ^. i& ]! P9 n6 k1 Z5 Q- M2 q/ d
var Memory = xdc.useModule('xdc.runtime.Memory');
* N% {$ h% C: m/ J1 O; FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 q4 r5 Q( S2 D: K. o; L
8 s% r- R* d+ v3 r' E! `  l( d/* configure System module */
+ E; B9 Z4 S3 Kvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; ~: q; Y' V1 Y: q6 @SysMin.bufSize = 0x1000;
, O$ d- S5 @% E9 FSysMin.flushAtExit = false;) k: s6 T1 i; z- s
6 b* Z, L9 X4 I' S1 I
var System = xdc.useModule('xdc.runtime.System');1 c% u: @0 l8 Y3 y. Y
System.SupportProxy = SysMin;
! Z" w* h* @) d7 Z6 \, n9 x" E! U
, ?' N; R2 x# F( G& g$ \/* configure SysBios to use the lower half of Timer 1 */
- _  b/ k( P! h6 w& qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& P$ x4 r5 Q" P0 b! V" gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
, p! P) h( U4 [/ pTimer.timerSettings[1].master = true;
, _4 o& t. ^' B. JTimer.defaultHalf = Timer.Half_LOWER;
5 V/ ]  G" b$ Y. f1 u/ a8 JClock.timerId = 1;# H  f6 {0 F3 K' ^& K9 X3 N
; e- T6 P/ P' n: M) {" i2 h7 q4 B

9 N- p1 _5 i7 v8 Y1 J/*2 X: a$ ^' b; H5 `/ D3 S
*  ======== Miscellaneous Configuration ========
3 L: _4 z1 ]0 b8 D */! p2 a+ i' d, B7 i: m2 Q* s
+ B3 p0 O) L0 @( z
/* set default diags mask */1 j1 H$ r8 {0 \1 S/ o# g
var Diags = xdc.useModule('xdc.runtime.Diags');
+ P0 t, C( _3 Y8 I  l1 T: i; u  gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
9 p7 S) p; V0 Z1 A& P
7 _/ o) H$ ^( {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& P1 X9 n# N- L
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: Z$ b) Z! T1 q; ^# T9 w2 fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; s+ p- k8 @" M) O. H; h& p6 S& SDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* A& }9 y% X* |: ]Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. Q) K7 T/ Z# T7 q9 |Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' S" y/ B! _9 }! E* E7 lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 S- K; x/ R! r$ F# T  Z$ Z' HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 ?- i& V$ m) ~- P. k' xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 {2 q4 _! i9 q4 `* Y* y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 L6 @/ v  V$ u" jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 q2 g! o; f* r$ vDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 g: n+ i' m0 B; hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 c5 j5 \9 j- a" O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: a2 x; y6 {: }' g' g2 [7 r8 T4 r: G+ Z* A0 v; u3 X/ K+ Y0 M0 E
/* override diags mask for selected modules */
8 x9 a1 h+ k0 Z( K# ^xdc.useModule('xdc.runtime.Main');
/ m5 [1 C! r8 o+ m$ k( c$ [Diags.setMaskMeta(5 e' Q3 f6 Q' T" g8 p( X
    "xdc.runtime.Main",9 i1 w1 P- I0 C) u$ l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ \) i: U$ V6 P9 f6 X/ f3 r8 Q    Diags.RUNTIME_ON7 n/ W8 t+ q" ^  x" I
);
: Z3 x" l, U) U( `% j: [
) }7 e: J/ v1 a* ~var Registry = xdc.useModule('xdc.runtime.Registry');# a; M1 S8 A9 [1 v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& Z: I& v) }( c6 Q+ e' Q2 ~Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, P( U- t( `2 _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;& U, `% d; W; F" u# r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  Q/ v- @7 G+ V  y4 N6 w& j2 I* F# ?# y
/* create a logger instance */
: O& k/ s* P4 y2 @6 {& Kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  f" R7 l( g; Y) D( B6 R
var loggerBufP = new LoggerBuf.Params();8 _5 n2 q3 M3 n& T6 _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ K5 A" x# e/ C9 s0 U' O  T+ |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
, D4 v% E1 E. v5 X7 w& a8 Z1 }$ s0 H; Z" s. }% T. `
var appLogger = LoggerBuf.create(loggerBufP);9 Q4 I/ U' b1 b* O0 u5 i5 O7 ^
appLogger.instance.name = "AppLog_Core1";! [) ^5 p( C; r3 t( V: J: ?# s
Defaults.common$.logger = appLogger;' t: a! c( I' N' \) {: ?
Memory.defaultHeapSize = 0x8192;   
+ j; |( n# n# o9 b8 CIdle.idleFxns[0] = "&LEDStatus";
! K* M4 M8 E1 e/ x3 BCache.initSize.l2Size = Cache.L2Size_32K;) g2 f8 v) K$ ^3 N% p! `+ w

; q' [) x# L* {: b/ U( q
回复 支持 反对

使用道具 举报

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 */* G% l9 a4 m4 e; [' D2 V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  u! G0 n* d/ \) I( Xvar heapMemParams = new HeapMem.Params();) w! D' L9 r9 c" E
heapMemParams.size = 0x4000;, b8 q8 t! L+ m0 u) S5 x
( w) J; G7 y: x* n9 x
var Memory = xdc.useModule('xdc.runtime.Memory');! @- G! M! n, _$ ~  q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 C9 ?) N3 D3 |& G
' G+ j: d7 S% @$ p  }6 e* p1 ^
我大约calloc  每次共计大小为5K*16bits,, Q$ t: }! T6 f" l
而默认配置才0x4000、需要改大。: }- q0 ?& m  x* U2 V& N
% ~( |. ?& |; V! p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ i9 N8 i+ M& ?' W2 {
Program.heap = 0;
& V- }2 g8 m+ L# yProgram.argSize = 100;  /* minimum size *// {5 K" J' m' r7 F) j( L8 c& P- \
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 05:43 , Processed in 0.042447 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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