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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( u% H- Y7 a8 L& u. M% }
/ [. i2 [# A0 p0 |9 L9 j* C  b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; o2 A. Z# M% Z+ b
+ Q  b, g3 i2 S. Q- I$ N% e4 y* q
其他程序段。。。。。' c. ?' v$ V5 [. q3 d8 B
0 T( o; V6 M2 j- x5 T
   free(x_d);
; B# q, s& c% p! m6 a+ R
* k- x; e8 j+ J! @! Q5 V3 r使用DSP侧单独调试功能,验证动态申请没有问题,
, x' F5 \4 y! r5 ?  m
7 P2 p5 u: f+ y) o' A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 }( {. X8 R" [' o

9 T/ P1 _+ ?* A, V* y1 B1 g$ C
/ b1 e, C1 C- y! s3 i' r1 @/ H" @# i% l9 M% J

. K# z0 x, y; ]+ s5 m$ w2 A* V# i: R; |' D& B( x* q
! Q+ M; @7 M6 Y3 C8 X7 }7 L
7 O( E: j+ @* f  {

( r. j4 _" o! T$ X$ v- F9 Z( y5 s/ K% E( s7 j
8 L. s, F$ Y( V* E7 y& b' }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 n0 }1 _" N' n2 d$ z; T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- h# p; s  `: n# R8 U/ @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 T7 k+ M. Q0 s. O; t

! N6 h/ g; C9 F5 |- z, h是不是需要在DSP.CFG中进行配置
' j. X( b( x) b. N我现在的配置为
4 v2 |  c+ Y7 `; g0 e& J. Z4 ~+ B: [, Z$ j1 P' @9 z7 U1 C$ o
/*; q0 o* ]2 C1 r- i- k: E( o
*  ======== Operating System Configuration ========
' B) K" E; a8 Q2 n */
( Y5 l" Y, E" j2 U1 [) J! Q6 Q% v2 i5 _1 `5 b1 z* f- I
/* no rts heap */7 x2 N& h1 g+ G
Program.heap = 0;/ N/ J0 F! Y' B  S
Program.argSize = 100;  /* minimum size */1 i' c6 m, x7 _: I; N# @/ O7 m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, P9 z6 f# Z3 O6 a& c3 @

/ Y1 T% m" ~+ L* ]/* create a default heap */
  F6 _6 }9 b: q7 e# ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- j" d( S2 a6 A6 M
var heapMemParams = new HeapMem.Params();$ h2 H; e5 j7 X2 D0 q* f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% m9 k6 {& m5 ]6 K
, D4 W# i% m7 t+ |
var Memory = xdc.useModule('xdc.runtime.Memory');* A+ |, M6 o) Z2 z7 W# I. j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  l8 V4 N+ r4 Z/ q9 D

; g8 j8 C7 Q( |1 M3 ?. y/* configure System module */
& T; Y$ R% ~. B1 Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');* n' k% @$ H* q* x9 I
SysMin.bufSize = 0x1000;
4 c1 ~+ o! W. {/ [SysMin.flushAtExit = false;' j- r' A" t% i  d4 R7 u0 l

' n. V4 P. G% z2 i. i! Xvar System = xdc.useModule('xdc.runtime.System');: u4 z5 v' P  Y& S
System.SupportProxy = SysMin;' I1 ~/ u/ e' F* n
7 s" O- o. {, i$ T( m* w, Y& i
/* configure SysBios to use the lower half of Timer 1 */
& }8 H( f% G- L' q9 v3 \+ Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; O' x2 F4 `/ A% W+ ~' tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 W: ?# [" m* H; dTimer.timerSettings[1].master = true;
$ E7 P2 o# ]# C( S  `- h) rTimer.defaultHalf = Timer.Half_LOWER;% o+ S5 F/ p4 r' b, F1 K$ [) U
Clock.timerId = 1;( t' S5 A  L' o, _1 s5 f
# A* o9 A2 H0 ]* X% x

+ R- n( C! C3 A" I/*$ q& Y( v) _3 A3 f; n" M" y
*  ======== Miscellaneous Configuration ========/ V7 B' K3 N, }; X/ N/ ^4 H2 @
*/
5 U1 n- ~1 n* w; r% q1 c- E7 H( }  M
/* set default diags mask */3 v# b! H9 H9 @2 f  m; _$ w5 z
var Diags = xdc.useModule('xdc.runtime.Diags');
, a! x4 r& m6 {6 P  qvar Defaults = xdc.useModule('xdc.runtime.Defaults');/ _! t' q% x$ o% i0 \
$ o! D0 ?: L; {, L1 j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 i6 u( B+ }& U/ u: y: ]
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( I& z( S1 v' B" d0 hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; b! z; Z8 \* _* mDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' B+ u$ c, k* ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- V' J* ~) j# I1 H. |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  l6 \, J4 S4 B! x1 n* H: gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: \- l0 k7 y* c7 S) l2 GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ _! R) Q3 t, o1 O0 wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& L; k$ z0 L- x# o2 {1 S/ LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) x7 T9 ], ]) u" C' H4 n3 w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- X1 }% P0 z0 A1 m' k5 L3 W
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. p5 ]# E" u! u9 r8 ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; f6 a: }8 D. J! D( F+ d. E( J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; T) X/ a( t+ |. I* O

  k: y% G3 u+ l' u/ c: {8 D/* override diags mask for selected modules */
6 R, X5 y! y# Z0 X* g/ L; Xxdc.useModule('xdc.runtime.Main');- M2 ~, U( N4 B) [
Diags.setMaskMeta() e) q8 V7 R+ R$ E5 ~7 m0 X
    "xdc.runtime.Main",4 ~0 Z- v8 U7 h2 O
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 g+ ]7 Z! [; k  z) D0 a4 y0 {    Diags.RUNTIME_ON
" y6 d5 y% A0 I8 I3 M: K);( D& V5 p* {  y; @, j- G8 t

8 v( E  I2 j! M$ c, l( jvar Registry = xdc.useModule('xdc.runtime.Registry');
! i/ s) o. [; q8 ^0 F0 h6 X  zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 E- L* S3 y! F/ }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 v0 ?9 V! K9 o! `  K* \" b1 G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& K3 a) L( w1 d" Q: @" \: }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% h4 z& I: {+ G9 Y; g( w
* K$ j) F* N, T6 C! x/ A2 B/* create a logger instance */2 n1 E3 h& y# y1 B" {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 K& ]1 ]1 I/ V& u3 i) p: Jvar loggerBufP = new LoggerBuf.Params();
2 Z2 t% q9 \7 L( B; Z7 C) KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. F4 f+ j3 Z; [. K- f, aloggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 W0 e6 S- J# X% T5 z7 O% K
; M1 O' w/ r+ |* |5 ?var appLogger = LoggerBuf.create(loggerBufP);: W: p: L0 p! f3 y0 N
appLogger.instance.name = "AppLog_Core1";
, V& {0 H- M( d; s/ d. M9 t, ?Defaults.common$.logger = appLogger;
0 O* C' `+ j$ u  eMemory.defaultHeapSize = 0x8192;    4 i3 U  v; j- D; a4 |7 F! A+ n- C
Idle.idleFxns[0] = "&LEDStatus";& T2 x1 Q, @& d7 R# ~: H* i3 U5 [! D
Cache.initSize.l2Size = Cache.L2Size_32K;8 `" S% `7 A% U6 G: @
* j9 N3 f2 a8 q! D6 _2 @
回复 支持 反对

使用道具 举报

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 */
7 Q: \( r6 k* c1 \5 jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ T5 k# K+ n4 c4 I" d7 {var heapMemParams = new HeapMem.Params();' W8 Q. F8 b2 H/ T+ C, R8 x1 m
heapMemParams.size = 0x4000;/ ~; s+ g9 X5 W$ _9 L0 k. C$ m2 S# w. K

' u/ O) q/ Q( J( p% b2 n, D3 avar Memory = xdc.useModule('xdc.runtime.Memory');& \4 V+ v2 l/ a4 N0 _! Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ f4 I1 n7 K2 W& B" G* ]% f2 j! ]1 v, j0 `# t5 y
我大约calloc  每次共计大小为5K*16bits,
# ?. ~0 d8 {8 O9 K5 _% V而默认配置才0x4000、需要改大。) S$ j- ?+ J7 }- w& Q# d7 ?

* _! S/ v2 f2 u0 Y, u: G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ @  K% N  i* G% C
Program.heap = 0;
$ U1 f6 V, D% n( h3 w0 g- u' ZProgram.argSize = 100;  /* minimum size */
7 P1 V4 {; w. P6 _Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-24 10:39 , Processed in 0.040331 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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