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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

+ b2 w" i8 B) k/ ~    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 T8 ?5 T* M, U5 S5 g
5 h: B3 o8 J" ?1 r
其他程序段。。。。。, [. g( C3 }2 a* X
9 W0 t! g! r. q$ I# z' K4 u
   free(x_d);
, Z/ f6 ^0 i4 T% @3 d, E  A& C- U! O, k) z
使用DSP侧单独调试功能,验证动态申请没有问题,2 M% c. X& U5 J" ]% C
* o) p9 ~- s& G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 @# q6 U+ Y  o0 A8 u/ G, a
+ k8 A% }$ `4 r! j: u6 A8 x+ j

- U7 O, r3 J3 G  M3 }& J5 e' p; L# R

) I- Q. g0 _/ m1 _1 t# {: u- {( n
4 U: F2 p& V) `% i2 f3 K/ S* Z9 U
* P5 a, y+ f( D- B( v5 f, ^8 X

6 Y0 I( F5 ~$ x+ @5 a& s% V
: ~$ E6 ^4 l* }* O+ i0 X0 w! u4 z, t$ M7 Z, t+ {1 Q7 t# c: i0 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- t' O$ Z% d* m$ k: V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 x, g2 t$ @, ]8 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 T# N- G7 W& `7 i5 |

. Z8 T$ Q# c1 X1 I是不是需要在DSP.CFG中进行配置" @$ o4 u9 h3 z6 g1 }# `% F
我现在的配置为3 m+ I0 C& l$ `" r" ]

% B6 b) C  C0 G4 [5 P' V, O/*
" O1 R; q& n2 G *  ======== Operating System Configuration ========4 g% h9 s; O& `: z* d+ T/ [% ], k
*/
1 M& @6 X1 q! c! r
+ g9 s- P5 h/ a& m7 }2 G( Y$ K& J/* no rts heap */$ |( n0 c! D) }! g& t7 u) G
Program.heap = 0;2 j6 x- f8 o0 O( c% R8 r
Program.argSize = 100;  /* minimum size */
% C' k& V8 h8 F9 |Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 S+ h' m; C1 @) Y0 |1 H9 Q, m$ I- g. d
/* create a default heap */' c; s- a7 F) A/ @/ m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! |) Z6 m( o* ]
var heapMemParams = new HeapMem.Params();
7 p, m- `0 r5 ]' H  `( |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" q4 @& U6 j( l
* r1 l  Z0 P! E- b2 W2 r
var Memory = xdc.useModule('xdc.runtime.Memory');
; w' L6 G1 E* g/ h( z" b: BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' g8 x, p' J/ u3 _
4 d1 d$ Q4 C0 k! x3 l2 p- S/* configure System module */. o) A& r5 Q; s6 M0 Q$ e) @, X" L/ q* `
var SysMin = xdc.useModule('xdc.runtime.SysMin');* B8 P" }: d( j+ f/ x. x7 S
SysMin.bufSize = 0x1000;( p( I' z. o7 ?# m' t( H: `
SysMin.flushAtExit = false;1 e4 l, b3 u" L9 M
& x, o0 L) y) L3 z
var System = xdc.useModule('xdc.runtime.System');
( E" o1 t  S; W' c5 H& OSystem.SupportProxy = SysMin;
1 E3 B* {# `  I1 w4 a9 n, o
9 Q( s' e% {6 x& }+ J7 t6 g/* configure SysBios to use the lower half of Timer 1 */
/ }6 Z1 @  ?' b: t2 svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 o3 F9 H9 F9 M; K- ?% \* ]! ?
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% W. |5 \2 r) O
Timer.timerSettings[1].master = true;3 y1 ?$ K$ l  m0 @/ b
Timer.defaultHalf = Timer.Half_LOWER;# }: B, }7 ]4 n  m. G  o" f
Clock.timerId = 1;& ?! ~+ o3 E* X$ v1 E
% q; \8 m! v% @/ B  M& I& n- H. i
5 q' x  s5 E- t( x  c
/*
% k% W2 [- T2 }6 _+ `. b( Q/ a' O *  ======== Miscellaneous Configuration ========
" H. m% }6 ~/ I7 o$ f */
, o4 a6 \; S; T" g3 E4 w$ j
* G: v* A7 \3 F) Q0 j. ]7 V" x/* set default diags mask */
/ F. B/ a) {6 y  hvar Diags = xdc.useModule('xdc.runtime.Diags');
' m% g9 k6 I3 r0 T8 avar Defaults = xdc.useModule('xdc.runtime.Defaults');
! X! H; }' `" @: |% W2 Z) p& Z$ ?) I% a) t. Q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 @+ J/ @* C6 R, ?. k- o! l, J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, u7 ^1 r. A( `/ K( T
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ B) ^. \1 g) Q- P. g$ I$ P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ E0 M  N+ N2 J0 mDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 z& }" Q( D( _$ V# Y5 p+ _4 M  ADefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 |1 X( F5 s! f' s7 G. K* JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! O% ~2 h5 Z: X( H7 i9 V. [& b& SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 X8 X0 r2 o3 l' UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& s, P; ^4 M" B. }
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 C/ q- {0 M+ t, l4 ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 T/ A# |. z' j' {$ i" H, cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& e' l; W9 S7 V% b; x; m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! s1 X; Z9 O7 K1 l1 [$ r3 Z2 {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 {* y' H' M- M4 @# y8 y7 a, N
0 c. A) ^4 n1 @& |+ k) F- ]% u
/* override diags mask for selected modules */* n1 @/ k+ f- A$ m$ N" b) r2 o
xdc.useModule('xdc.runtime.Main');  S/ c% E% y! i+ P, }
Diags.setMaskMeta(
4 Z1 y- E9 h- \: S6 a# M+ s    "xdc.runtime.Main",
- w+ b4 p; M# v4 g/ C    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 m8 ]/ y0 S+ ]7 ~% |
    Diags.RUNTIME_ON
  m5 X( u( V6 f" ]( |);$ ?9 J- m+ ?1 W4 |

! y1 X% j4 N& r9 m0 W% Yvar Registry = xdc.useModule('xdc.runtime.Registry');( C+ z& U& X  v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, C' }  T; I7 w$ M! ^4 ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: I" B# t& z2 y3 e# l% @3 IRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. p4 l* X" i  N% M( Q& @1 O6 l( Y9 R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ D6 @; t' H2 Q' x$ `
3 Z: T; \/ f$ S! s- Q6 T- I
/* create a logger instance */
% ~6 S! e) U( y4 {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 w% u0 B' i- M  s: }1 cvar loggerBufP = new LoggerBuf.Params();- B" L0 y0 C2 m- t0 Q3 f/ L* W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- V  `( c  _* R7 e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. Q( Z# t' ~* k6 v
9 h, b5 M8 v' A: x# O* T0 p( d9 a
var appLogger = LoggerBuf.create(loggerBufP);% g, q2 a+ u# {# U0 g
appLogger.instance.name = "AppLog_Core1";
7 D9 S* L* |4 O9 u5 ~1 i/ k% l6 T2 oDefaults.common$.logger = appLogger;
$ c9 l9 q6 [! g6 r9 FMemory.defaultHeapSize = 0x8192;   
4 x; a5 h9 i* r5 U/ g& oIdle.idleFxns[0] = "&LEDStatus";3 |/ o; x6 r2 Z" z- L
Cache.initSize.l2Size = Cache.L2Size_32K;
4 {7 S. _& }/ j+ S- n; e  z! f9 L: Y3 D9 s8 c4 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 */8 F; z; d) c6 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* ^  f, \9 T' o' K* N% @2 Bvar heapMemParams = new HeapMem.Params();
, E2 N0 N" W8 RheapMemParams.size = 0x4000;5 q- s4 E. E' O$ l; l8 u, ^: A
# m: L0 }/ w# |$ t9 k5 W
var Memory = xdc.useModule('xdc.runtime.Memory');  G" g; M. @; {, b* ]+ x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# F) @/ L% ^3 _
" M& P5 q- d) d- Y% D; E8 R
我大约calloc  每次共计大小为5K*16bits,: a7 I6 b% g# a  L/ t4 Y( q2 a
而默认配置才0x4000、需要改大。, w  S' ~4 K# ?; m

' B2 c7 m$ T: F6 v8 g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( r% n1 ]7 D& E! }) lProgram.heap = 0;
4 d. A% x* i& o; z$ Z' DProgram.argSize = 100;  /* minimum size */
0 _; {. L0 P% D( |- \% S0 @" IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 11:23 , Processed in 0.047427 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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