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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* Z3 O# E; ?# l- p5 Q1 S, z0 ]) b( i6 G2 J- z) q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& t. s1 I9 S4 Y! ?' G) q
, {" m! i- ^- K其他程序段。。。。。, h, P2 p9 `3 V9 `+ v

9 X" e, C" c# f/ c   free(x_d);
6 u( e$ E+ X; f4 b$ M$ f* S0 b; g% r; _& u  u& Z1 l! `0 Q+ c2 Y& q
使用DSP侧单独调试功能,验证动态申请没有问题,' z5 y1 q6 \; V. Y/ g- \; e% T. a+ w

) g( h3 @) W) Z: n5 a1 ?6 c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 b; n9 w% k2 Q% O' m, t( w: \

3 ?0 r+ B. F$ d+ j2 [5 D9 k% h3 v7 K& d3 }2 c, \$ D
+ k* I1 ]4 _8 e6 S4 A

! O. H6 m  P1 Z- D. T! F- Y( V) Y  x8 g" g0 |
, W2 L; Z' d9 o1 [$ _

) {& D3 L0 ~4 t0 \& L/ d( T* U$ ~
) k  Q. q# ^2 |* c6 m" j* h! T7 Y( o4 f+ Y# K
* p2 o5 x# _9 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. k$ f: G8 v7 C( ]! n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 l  M. v0 u& B: ?) h; j2 l(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 u8 F. T) y5 t) u
# ~1 {" E7 }; p0 w& t7 M
是不是需要在DSP.CFG中进行配置
2 y' h0 }& P7 {  z/ F/ }- U0 g我现在的配置为
4 |1 W4 Z' m3 K. V0 n9 V: h$ y1 {6 A/ }8 o: d9 l% C* I
/*: G7 }, F3 z" D. h, X' U3 K: d8 r
*  ======== Operating System Configuration ========
0 Y% u. G+ O+ l; s; Y4 B3 Z */
9 P" V" R8 @$ L; Y  n& u; x5 D" X$ p+ l- C" t  A
/* no rts heap */8 ?8 J+ G: Q5 P3 i# t+ t
Program.heap = 0;9 {: J' _3 R" ?/ e
Program.argSize = 100;  /* minimum size */
$ t4 P+ I6 S, r0 z* R, tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. r7 k% f& @) T" Q

, @9 Z  e5 H( q& t: t/* create a default heap */
- R$ y4 C. d4 y/ U% Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 X$ N) `6 \. K8 h# u
var heapMemParams = new HeapMem.Params();
9 B8 E# ~' {( I* s, L) {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, k% H! I2 O# w# _
" Q7 C& f6 l% o! c; E! v* ]; Y
var Memory = xdc.useModule('xdc.runtime.Memory');
/ H& E4 b& H0 c% O: bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. p0 E+ U- r( j) h; J& R. c

' a* ~* k0 _) {( b! |8 v/* configure System module */, \  f6 \0 E2 r  p$ G% ?
var SysMin = xdc.useModule('xdc.runtime.SysMin');! x- u/ ^" u* D- A& _3 D+ K
SysMin.bufSize = 0x1000;
* F( z4 y( w0 p3 }) m/ TSysMin.flushAtExit = false;/ r0 q8 J" U! C# v) j) ~5 M
3 A. q( C. y/ x! R9 w+ M6 Q
var System = xdc.useModule('xdc.runtime.System');
! P8 |" R1 I9 ^8 ?System.SupportProxy = SysMin;
" \% _# @! h/ o! {, L4 D* C6 a  w. V' Z: N. g0 o, t
/* configure SysBios to use the lower half of Timer 1 */  j) T( a: _# P3 N. o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 k$ e7 X- r" [* f- D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, G0 G; [. X% V* F. I0 ]0 U
Timer.timerSettings[1].master = true;* s9 R! l6 L, f9 q, O
Timer.defaultHalf = Timer.Half_LOWER;
4 T! `% p' m! A( x# ^/ V+ m3 |/ rClock.timerId = 1;
# O7 Z+ z1 u% a6 u+ M5 h! c8 p) K  G! a- q

  U. ?9 a! m* j/ `0 R8 N; \/*
! s3 V6 }  b; F) [7 x. z *  ======== Miscellaneous Configuration ========* {+ M( S$ d4 R( D9 q; Q  I
*/$ l0 g$ V6 R- B) H+ R
, W2 n% J/ \, W3 g
/* set default diags mask */
4 u6 M$ Q' w0 v' B2 ~* wvar Diags = xdc.useModule('xdc.runtime.Diags');* \/ K7 W- {' p3 Z* D
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 Z0 z+ U, S1 X0 ^" u0 r
6 b6 Q& w/ a6 T) X3 Y% ^6 ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ b! p! c( ^4 k8 S+ X6 ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% ]) p3 E+ l' \- a- _7 f& z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ h  Y2 C5 y2 w" H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; X0 L% N$ e# ^  U, O; M
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 f* M% E# ~! D9 _Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 ~* R% [9 i  M, A! R9 F: T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 I$ @3 k; U1 T8 l$ A0 U( [2 ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; u3 h0 ]+ k' z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 g  G- J9 a* ~9 u- H" ]) w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 j5 f9 J5 e2 |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 @- ~, f# z& f0 t' E) h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ \: t  _& A: K% Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: e. F+ p' t, ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" N0 A& y. u" r7 G. h' n8 S9 b3 n, Z6 |9 n6 @$ Q# n5 W; d) R
/* override diags mask for selected modules */; T! B) ]% u6 H4 o, M) M, C; W9 Z
xdc.useModule('xdc.runtime.Main');
' C, |8 A/ A% o5 j. P/ vDiags.setMaskMeta(
' F7 @  [7 P  O$ H- s7 D    "xdc.runtime.Main",
: n  ?- T9 E) Y3 v& B4 N    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( E- h. x4 M( u4 X    Diags.RUNTIME_ON
# V$ \4 M- Q" D4 z, ]2 o3 y/ i1 N);" N' [$ J% M0 h% d+ k  j% `

6 L1 R! w" k3 }  Pvar Registry = xdc.useModule('xdc.runtime.Registry');# ]7 D% B0 ~$ O' {8 ~- S. V% l  A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 U! e! {. d9 i% w- J! A3 I, o& bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  L# j) ]; ?! Q+ c2 ~6 P  ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 d8 U3 E$ s; i
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ P6 h; Z* }" [2 `: H3 Q1 w0 K9 R' \$ D
/* create a logger instance */
" ?4 @0 G  o% C9 n5 H3 P& C  gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 A6 q# D5 \0 d/ [var loggerBufP = new LoggerBuf.Params();
1 c* ~4 n& ?. u/ ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 C0 R% ^2 L. _5 O! T% v5 _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' g0 [7 P9 D4 c  I6 b( _" K: l% F  v1 f, x  R
var appLogger = LoggerBuf.create(loggerBufP);
" i" i0 t( L% f, OappLogger.instance.name = "AppLog_Core1";; i/ q! ?" c) a; m2 Z$ n. p; E7 I
Defaults.common$.logger = appLogger;5 X/ o3 r8 B$ H0 S3 X
Memory.defaultHeapSize = 0x8192;    . q( I6 [6 ^8 `* g9 {) K7 n
Idle.idleFxns[0] = "&LEDStatus";' J. r4 i. [5 r- @
Cache.initSize.l2Size = Cache.L2Size_32K;
2 ^8 T! Z  T/ e3 ~+ S- C8 ~- w+ k
回复 支持 反对

使用道具 举报

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 */
6 g+ x: B' k4 c2 z1 g0 b! svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  S( W; x. l' P# k; F7 I& f8 ^' Hvar heapMemParams = new HeapMem.Params();" L1 y- W( L3 N0 {- h; q
heapMemParams.size = 0x4000;1 q8 m8 D9 d3 d

4 O" ~5 ]; S6 m! k6 g" O/ }% Rvar Memory = xdc.useModule('xdc.runtime.Memory');' D# k( Q3 o* W% M5 @* f- D$ I: Y4 b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! v& D1 J2 N* G. P, z, I' H" n8 W0 m& ^7 O# I
我大约calloc  每次共计大小为5K*16bits,% f0 R2 Q8 @5 n
而默认配置才0x4000、需要改大。+ G9 P! v2 p5 o, W  \; M! M

) }$ K: i" }. P1 f1 L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* i9 u5 b0 e: H/ p( R, SProgram.heap = 0;
/ v2 I' p/ E) R( }. Y  w  r" DProgram.argSize = 100;  /* minimum size */
+ ]1 e* R. Y! D# q( T3 o5 rProgram.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 21:49 , Processed in 0.040975 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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