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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! Z: N: u6 z. M( `) A  h: w+ j1 w4 i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 U2 \1 T3 W# c% p5 T" [
$ F( v6 J# B$ ]! @# t7 n5 t
其他程序段。。。。。& D% e5 ~$ Z+ N- ?* G6 _, h# x
; ]8 R9 ~) y( q; Y9 a! o$ Z
   free(x_d);, N' `( S+ j/ O/ F9 h  b- r
$ P4 {; L1 X0 F+ [+ F; _
使用DSP侧单独调试功能,验证动态申请没有问题,
& C0 U- ?" a  o- ?$ u5 g+ J
6 t% g6 B2 W% r; V9 ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' [6 @8 L1 F8 R, b

; M( N* @( ?2 v
$ c: ~3 ?7 \4 Y' Z: @$ @% R/ f5 H# ?

' }8 I( W1 W9 E5 B( w4 S' g$ [$ Y* w4 ~
) o$ E: g/ L4 M1 c

3 U+ @' ^; F, Y! W0 p3 I+ M" @2 B1 j+ _1 R: n  }" a' R

/ n7 i; Y, @2 O, ]- [0 x) y( G7 k/ x* l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 D+ @! j) K. B$ R6 F' q4 r% I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# E- x3 K- Q0 ]( n6 y8 \# Y6 L
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% g; s% S. d  |: E7 I  Z' O! I  j
/ H  k8 G8 c6 o' V! B
是不是需要在DSP.CFG中进行配置
7 [3 n2 h% K( y5 |我现在的配置为
5 A! Z) P7 Q# c2 e, d
3 s- b: _% N- f. f* v0 l2 m! U/*8 {' t: O; E. S0 K6 `' P
*  ======== Operating System Configuration ========
) A7 O4 a0 N& J/ r */
# p' p3 f/ v, q
' h. c5 t9 k# v" l/ a/* no rts heap */
6 ~2 ~1 g. ^$ C  k2 QProgram.heap = 0;
1 }9 u, L. C; Z9 F- O5 UProgram.argSize = 100;  /* minimum size */
6 W) C9 [+ c  ?1 eProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- W2 _/ G% E$ h% a

) b8 N6 _0 f) {- Y/* create a default heap */
% S% F7 y4 @0 t% D: zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* E- d  p4 s! w; \' F3 s7 q
var heapMemParams = new HeapMem.Params();' T1 J' [2 A' M: |& K" v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' ^0 n& v  i5 d

% U4 L; ]2 s, {7 ~4 g4 ]4 s' _
var Memory = xdc.useModule('xdc.runtime.Memory');
/ s% I/ B1 H) z0 T1 `5 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 B/ v/ \3 Q6 s" p, ^* r0 G9 ^! T0 \. _) K5 G: Y. U
/* configure System module */
2 ]# r5 q6 X2 T. V/ ?. L# dvar SysMin = xdc.useModule('xdc.runtime.SysMin');" v  o2 P) T" ]
SysMin.bufSize = 0x1000;
4 F# P( G( J7 _8 s8 X( eSysMin.flushAtExit = false;" w/ W0 `8 Q1 B1 M

3 p5 @, p8 U" L, t, B- B# rvar System = xdc.useModule('xdc.runtime.System');
  p; `; ~9 L, ZSystem.SupportProxy = SysMin;
7 _2 t, ?. x3 h( t6 }
" O$ x% t' T* X: T. {3 y# x+ u' D2 F/* configure SysBios to use the lower half of Timer 1 */
, e8 L, Y9 w8 r! jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' g/ U1 h/ k* J% l( `. _9 w
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" T5 L; Y4 B: O6 ?3 ?2 s, XTimer.timerSettings[1].master = true;: j. ^% v8 z) e6 \
Timer.defaultHalf = Timer.Half_LOWER;
9 n- [: t) K6 C. R' Z; KClock.timerId = 1;) v; V: c5 w3 i1 _+ j' Z0 V
! C( X7 Z$ V0 _# }; N% h; }
2 d# k, Z/ w; m6 z( o! J
/*; a# A! t& p/ Z+ \" a
*  ======== Miscellaneous Configuration ========
1 D+ Y8 L* D$ k: [" l2 I4 z+ g */  Q& {% W9 o! \2 U8 @

. l4 \9 v: l. H: z/* set default diags mask */( Z( w0 D, b- R1 Z5 @6 E4 F' b
var Diags = xdc.useModule('xdc.runtime.Diags');
. p) g6 R0 E; g0 ], |: fvar Defaults = xdc.useModule('xdc.runtime.Defaults');# t8 Y4 U) P7 w% ^
% |6 i! n: w8 r9 @. L( [% B/ p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' G* f; m! T5 M( F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 K, v9 O0 X6 ?; s& P" c! Z. h
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 c& n- Q  n% W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 z; {: _  d! {$ E- aDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. p; a" H- Q8 \0 KDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 {5 j0 x% X, D+ V- \! MDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- Q. D) [; w- g. g& A6 D% A% X: pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 C! g) ~8 O6 c$ Y: c
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ O, G+ a! Q( j7 i* l3 ~# l; ]
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# P4 l' k" Z1 e  ~7 F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, O0 c" H! ?. l( t9 v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) d8 x) y1 }* T( pDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) ?* g" j- |7 rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ |) n+ e6 Q% t* O2 u9 X- u
& `* V' r( x* S( `% q
/* override diags mask for selected modules */
+ G' w6 `- Z; dxdc.useModule('xdc.runtime.Main');
' I' h% g' e5 ?+ J2 @! oDiags.setMaskMeta(: }  M' G- H2 ]  R4 H; p' _7 N
    "xdc.runtime.Main",
" p4 B) e+ x; ~0 y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- _: Z4 Z* B. D    Diags.RUNTIME_ON
* z5 u+ {; E5 H/ z0 u& o! });9 ~% O# R* Z' h1 R

3 Y  W: U- b' Dvar Registry = xdc.useModule('xdc.runtime.Registry');( M$ B6 h8 r2 L( `! t, q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ D+ {4 |3 X6 k  y% N3 I9 [3 o& }
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. |$ ?9 V! l) w! }# M$ A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 n; T5 Z% A7 b6 t" |5 q4 uRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;% E! b6 i& Q- p/ N. s1 s
& Z( z$ p+ P* {/ p$ N5 u
/* create a logger instance */$ r( z' A7 E0 y& Q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& p; l, g& x5 V- G+ ]8 u  ^var loggerBufP = new LoggerBuf.Params();
% y* O9 K, x8 r6 U, m6 W  L0 L4 }loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# U/ o2 W* J! Y4 I) L( U- ologgerBufP.bufType = LoggerBuf.BufType_FIXED;
1 \+ G' U* f* G) f% ~1 Q, N. G' E" q: p; m$ c: B
var appLogger = LoggerBuf.create(loggerBufP);( E. i- a9 q3 R( ^7 S' b* \' P
appLogger.instance.name = "AppLog_Core1";3 w' p: a9 e* f% c! k
Defaults.common$.logger = appLogger;' c/ \: s; N! h. X+ G
Memory.defaultHeapSize = 0x8192;    5 o( ~" ]  O+ B
Idle.idleFxns[0] = "&LEDStatus";
# Q3 s7 n% Y  b6 ^- MCache.initSize.l2Size = Cache.L2Size_32K;
7 _; x; g: J% z5 O; c7 H" ]" o0 ]5 g& x* n% ^+ I
回复 支持 反对

使用道具 举报

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 */
! ]* A' r8 G. a. nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ c* E% E& t4 u: ~. m4 {% C9 lvar heapMemParams = new HeapMem.Params();7 `5 @4 S, q: U
heapMemParams.size = 0x4000;
0 v' @8 C* q, U9 I. S. [4 o7 d
: @  M  X* G. m' t3 @! zvar Memory = xdc.useModule('xdc.runtime.Memory');
0 f0 M8 c3 q/ t8 `4 n8 W9 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 v; \9 A1 e: Z! E, R& l( |2 J  i( o$ ^
我大约calloc  每次共计大小为5K*16bits,/ K: k0 w, ]# b
而默认配置才0x4000、需要改大。4 v1 e$ g( w. |" d" y' ]# A
: ^8 x9 {: L5 M- E" o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: B1 c5 r, B' i& i3 N2 E/ |+ MProgram.heap = 0;3 e  G# s/ l$ K6 w! p
Program.argSize = 100;  /* minimum size */$ o/ D" h* D0 T& ?
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 01:45 , Processed in 0.040851 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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