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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 |& f, _- W. @) }" v& t7 \6 I4 ^1 p: Y* \% T( B" ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ h+ }3 k! }! l

- m4 L' D9 A, U8 z6 B其他程序段。。。。。
9 X; n' h+ x% ~; m8 G
1 o% a0 d' k9 ~5 w! ]6 y3 Y   free(x_d);
3 G) k; x/ ^  Z9 Q
3 x- c# `* c: ^1 h使用DSP侧单独调试功能,验证动态申请没有问题,7 Z+ A1 g4 M6 X. \3 M6 ~

; q# M! o3 w6 Q& {+ s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 a& x3 R) S2 l* Z& t

! p5 N2 n$ h- Y, E0 _, ?& g& @: @8 P- s+ W$ u
2 C1 r( R4 e4 V" b- O2 o

9 w1 `; \$ D9 t0 I: u* M/ d2 ]
: {2 I) X; ]/ t6 |5 {
8 N8 W4 A& P/ ?8 D
0 R$ L6 k1 B$ [1 Y" n
0 a  S% J- F8 l# @  u9 P- h

5 ^" I7 W" X* S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( A0 Y4 @! R( C# r" G1 l, e4 C# Z% p/ j4 s! g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! k/ W2 e- B2 D(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 p9 c" X1 d" Z) k; O
# k3 U* q0 u; q1 X: \
是不是需要在DSP.CFG中进行配置" `2 x; `+ P4 o; \' ^
我现在的配置为3 {+ ^" r6 t) m7 v
# a3 M$ U# T" ?4 [6 r. u5 M
/*$ K; p7 g- }& W  |4 m) D% B
*  ======== Operating System Configuration ========
4 T) l# u+ o, B6 @* p1 l+ u */
' g1 g2 Y' \/ F; B" g- D, P
2 n9 r, @7 A% l/* no rts heap */
: L  y4 g8 ~. k3 b0 ^Program.heap = 0;
: U+ I. D4 q0 C. U* cProgram.argSize = 100;  /* minimum size */
$ }; {, A2 C# P- lProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: o/ [3 ?  u2 f0 K5 R# K* U$ _
) s5 R" t: \+ V% P9 L
/* create a default heap */
- Y+ x, B, }& c1 r: K) S2 _6 F' ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 F( b2 s% d. j% a  E, q% Q
var heapMemParams = new HeapMem.Params();8 _( N, E0 ~+ I1 E0 c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 v5 F- P. O2 B6 f+ h* y% D( o
var Memory = xdc.useModule('xdc.runtime.Memory');
% @9 I, _& e3 gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 n. O5 Y( W$ y! o" ^- {* [, p& d1 |
/* configure System module */
8 L4 x/ b$ q9 uvar SysMin = xdc.useModule('xdc.runtime.SysMin');* P  O  n  O! y. c6 }# F9 n1 t
SysMin.bufSize = 0x1000;
5 T3 j7 A* m: r- T! G8 f# \# O! }SysMin.flushAtExit = false;+ \; }: X# Z9 }$ a# t: r

7 z* F4 h' h+ s6 y1 }0 Lvar System = xdc.useModule('xdc.runtime.System');
% N( h. @/ i4 d1 Y  B: [9 HSystem.SupportProxy = SysMin;, x. [4 f  ?! w2 L" q1 f
7 [% w5 s, r( h
/* configure SysBios to use the lower half of Timer 1 */$ ~1 T# `: n: Z* C3 {' f0 W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. t4 p( `# v7 V1 J+ @6 ]& c0 ]" I, o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 [( Y" e2 P+ p: A3 w
Timer.timerSettings[1].master = true;
! m- M6 ~' `2 B% ?$ PTimer.defaultHalf = Timer.Half_LOWER;% L$ r7 W) r( T+ a& a5 U) A% c
Clock.timerId = 1;7 ~2 z/ [0 @& h" a

. G5 Z: g8 O. i2 e, f
& h+ q1 ?/ Q# c/*6 A$ H+ w0 _+ \  k+ \4 \1 n
*  ======== Miscellaneous Configuration ========
( x& |/ {8 J1 G! q! {' m */
2 H- d/ f* `1 T7 o  G! Q7 i0 l: H+ z) L
/* set default diags mask */: z; }# \' e0 U0 c$ u" z
var Diags = xdc.useModule('xdc.runtime.Diags');/ u& g  y8 W, `% y, C; n
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 w( k( Q- a4 c* _' m+ w! T
! Q- o9 K# ^% ^9 NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: {  B2 ~# W* ^2 \- Q# mDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, |5 H$ B8 t7 G$ U; W3 LDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! S# L/ }  K* t4 f
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 w% j7 N. s  _- d: g
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( p# t; T+ J" e/ P: ]( I0 N* K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 _) n# C1 q1 x9 O3 }  vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) |8 n- r6 L- R" A3 aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: W7 {6 Z: o, F- [  W
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  C4 s- H+ c. ^- w% A# VDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 w3 p# e  ?) ~. h( m: Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( m" S  h. p, F$ y7 k
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* L+ Y+ H4 X' ^9 ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# f# u( N' @) r6 {/ J, G. D( C4 z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, {4 T  }% |& K/ W
. c, T: b0 t# F" [
/* override diags mask for selected modules */; G* j7 L7 w$ V+ c- \8 r% A9 i
xdc.useModule('xdc.runtime.Main');
$ l- E3 H. b" B, `% bDiags.setMaskMeta(
& H8 i5 f$ X" R6 t/ c    "xdc.runtime.Main",( s1 d9 w  x1 O' G( P. S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( i& |# P+ a* s
    Diags.RUNTIME_ON
' N- _/ K# a  n- _7 S2 `8 r);& w0 @3 H: o- O9 U; _9 v  \
/ @" |& N; H  s
var Registry = xdc.useModule('xdc.runtime.Registry');5 R/ N, k3 y5 r2 S1 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' t$ T9 Y6 d( R! XRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 `9 ]  ?- i8 |+ E, B
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* ^- M/ d6 M. \- s% xRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 ?9 \1 h  q4 D

4 g8 n5 H: K% j: E/* create a logger instance */
% z' @% U  n4 X7 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: Y/ u0 x# K; Y8 {var loggerBufP = new LoggerBuf.Params();
8 c! D6 o/ u! m8 e. ?  |! UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 ]# [0 a- w3 w+ i4 B2 H; B+ }8 SloggerBufP.bufType = LoggerBuf.BufType_FIXED;; o; y3 B- v& Y3 w" P' u
+ h" F8 ]5 o  K1 p
var appLogger = LoggerBuf.create(loggerBufP);
2 P" L0 H" k9 H+ [4 U( OappLogger.instance.name = "AppLog_Core1";
- c' p  p) T5 m" b! xDefaults.common$.logger = appLogger;
. x. W. c2 i! G! Z* N: _! \Memory.defaultHeapSize = 0x8192;    " a3 g  R% F/ n, D5 s# r
Idle.idleFxns[0] = "&LEDStatus";
7 f0 Q" U8 M+ b; [* vCache.initSize.l2Size = Cache.L2Size_32K;+ ~; a& x0 ^( W# p
- w7 e7 ^8 i  t$ ~  R7 {
回复 支持 反对

使用道具 举报

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 */& p& u( c5 [+ U7 R+ Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ v$ l8 O0 N6 N
var heapMemParams = new HeapMem.Params();: q: N- t  f. g) L1 u( r2 _/ F
heapMemParams.size = 0x4000;
3 h5 T4 Z, a- U! p5 u; {2 P, U" l: b3 A
var Memory = xdc.useModule('xdc.runtime.Memory');
6 g# O# J& L2 P3 r4 o7 p7 k+ A  Q: TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( L4 \6 i6 c  ]
1 K  h: G( U9 L我大约calloc  每次共计大小为5K*16bits,
/ D& [3 T4 |3 [  @' F; X/ Z而默认配置才0x4000、需要改大。; L& e- x$ c" g, u- ]: M

+ T8 S0 \9 @+ C; }0 l' L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" f4 a1 _4 h4 r: o1 D; `" zProgram.heap = 0;
2 ?% K$ O7 w3 ^1 |* k. }( o0 `. ?" G0 DProgram.argSize = 100;  /* minimum size */
% W$ K1 {& Z  SProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 03:16 , Processed in 0.043215 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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