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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; F; r6 N. H; I9 X) C
: {0 ^, A" S; o0 p- O8 x  N2 O1 J    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' a! r9 S/ y  q8 ?3 b4 ^; p

; }  {+ R  T/ o, J& U. N( U7 U, T其他程序段。。。。。# t- w& r$ ?- f
) l' J$ i8 {8 c
   free(x_d);
! W7 p8 \2 {) B( ^
% f& ~$ F; H5 k% t使用DSP侧单独调试功能,验证动态申请没有问题,. d6 b$ W$ ~8 I$ e0 f

' K" `+ Q' @) J8 F" Q  s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% C6 d3 ^6 t; j6 q# u3 Z
6 h  v0 q2 I( Q. l# W
0 h2 [' x+ {  |, I5 S# x2 h

# X/ Q' S4 D$ _) @
: P! e1 H, G! ^) V, U4 h# S& x, ^7 M* r4 ~+ _( \

' C4 a- o8 G1 B
' a) [4 ?) ]5 g" d7 w
" I8 k5 ]  n# \# B7 F! A8 b/ b0 @" s. e
7 z7 S% Z* m2 |" p9 Z+ m6 ?; p$ x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- n! ~+ `( J6 ?& a" h% z8 {Program.heap = 0;2 \' u, X9 x. a+ A, ]& ~
Program.argSize = 100;  /* minimum size */1 g  ]' I( ]+ W! J' t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
1 E/ O- B! g6 U3 _. V6 B+ zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. v8 k, c3 P0 E8 evar heapMemParams = new HeapMem.Params();
' |+ J$ \1 b/ Y5 _2 y8 V' F# u# pheapMemParams.size = 0x4000;
3 M' Q9 ?2 b( N4 ^
' V5 \+ u) t/ B/ B) |var Memory = xdc.useModule('xdc.runtime.Memory');
5 Y9 l" J, }. P4 S! MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 Z* E# ~7 _; G7 C. G1 m
- i3 P- c% t7 A4 E) {
我大约calloc  每次共计大小为5K*16bits,
& I: m+ T/ h0 [8 W而默认配置才0x4000、需要改大。
- L( k; C5 B6 P3 D7 k2 ?: O
% G. e) n7 M; F7 s. g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 _4 N' q' m- v' A/ ~) [我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# m# d! C9 [% }/ ]; M! @(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( {# o' c: Y2 r, A- {# a9 l
, }7 `4 p1 V& r
是不是需要在DSP.CFG中进行配置( X7 f  P, @0 h* P0 P+ o# y* M
我现在的配置为
# g; n" A6 E, _+ Y3 X
& d3 n- j5 y. j+ f- A/*+ P6 C1 b/ ^# N* ^
*  ======== Operating System Configuration ========
/ w0 m/ e. q# J1 e */) `9 L) I  k* O* N5 N: _3 B& O0 _: T

# N8 s2 s/ K+ N! |9 G/ _1 }8 I. K/* no rts heap */
8 b. m4 t% y4 Y$ BProgram.heap = 0;
0 l+ j! B4 o& T% S" m$ T' wProgram.argSize = 100;  /* minimum size */( Q7 ~9 [; M! m" p7 p, S
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 ^( y2 B4 }, ~" v; Z* i
  i' {8 o1 ?) _' ]$ ~: M/* create a default heap */
7 S$ @1 @& W+ D! Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% u% N+ `& C( I6 V4 c" O
var heapMemParams = new HeapMem.Params();
6 q- Z  O; n" R) p; @; CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* {" S+ F- D# y8 ]% t0 [# Y# \2 X# Y: }% l9 @8 q
var Memory = xdc.useModule('xdc.runtime.Memory');* J' Y$ ^. D; X/ u$ [  b  U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* e. L% {4 k( I; l/ B/ b4 t7 k1 l4 X0 o5 e0 F$ f5 K
/* configure System module */8 c% U, M0 H% l& z2 P0 s
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ }% {2 S! ^, U/ \+ H
SysMin.bufSize = 0x1000;1 l0 K0 P8 N$ }7 X
SysMin.flushAtExit = false;
' p9 \5 E- \% I/ q! A
' H" L" I$ o7 A# m- Hvar System = xdc.useModule('xdc.runtime.System');
4 H  K& D1 j) N, GSystem.SupportProxy = SysMin;
3 F) ]% b# U7 s* [% j9 ?# c9 F9 `1 B0 g
/* configure SysBios to use the lower half of Timer 1 */
8 N& J' V9 M& @$ g9 ?0 E& Dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 ?  a5 L- F3 `% l' M- d. U: Z1 }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# F+ m2 s  Q+ @. Z/ h& M5 aTimer.timerSettings[1].master = true;
5 v& C0 J/ z- R& q5 a) s# q1 a* \0 {Timer.defaultHalf = Timer.Half_LOWER;
0 A, r# B, {; Z: xClock.timerId = 1;' M  i- h+ \  r3 \  ?9 v5 }- o1 W7 \3 U3 ^
% W. c. x- P- M1 W, i# g: R- ~
* Z/ a4 Z: B2 |' f  ?
/*- i; n, q! q! }
*  ======== Miscellaneous Configuration ========3 q9 d1 S/ q- B9 q4 F4 _+ M
*/
; q* p4 G3 ^2 Y0 B+ x0 D1 d% M2 [) r' s! U0 I( @7 K
/* set default diags mask */+ B( I. I+ Y9 w( Q; D- I8 e$ Q7 `
var Diags = xdc.useModule('xdc.runtime.Diags');' K1 C- `+ K9 Y! Q" @
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 F7 c/ V7 `# o$ b" m
4 L' E' ]! ?# @$ e3 D: g# PDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 `* @3 U# }/ V, q3 B: n" Q0 L
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 H4 j: _7 y, {. b" N2 n9 h
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; _: P$ y: T% _/ E# a. RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 @: _5 h( {* l- N& W4 @+ }' _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  C1 T, O7 P5 E) Y3 g  gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: [' \8 I4 e3 J& g3 g4 U" j( }
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 w& G4 Q4 M' b  `' C6 F
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  t  }) r% s2 P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& }$ Q' o! |/ J0 F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 Z& r+ R- R' ^/ d- o
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* z8 \! B; X" `* P; |; s; f8 z3 nDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, P/ Q; z" v$ f9 L9 H+ ^$ Z% tDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 r1 j& i' I' Q! {; _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ k' \' m& q) P1 m, I; t5 r# H" F( c% ~
/* override diags mask for selected modules */
6 y$ _5 N2 Z* F+ M! V8 f( cxdc.useModule('xdc.runtime.Main');9 w) U# O( P  T& E1 R
Diags.setMaskMeta(
# L$ I% X% {1 ^    "xdc.runtime.Main",
( [0 W6 I& n8 y* ?. I- b    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; L' t) n' E7 j. E# m! w% \  }    Diags.RUNTIME_ON( D  e; R( A( V; |
);
6 O! k, E6 N6 l1 m: }4 \9 u4 Z$ @9 {) |: u) v2 O( K6 Z4 \5 S& Q/ e
var Registry = xdc.useModule('xdc.runtime.Registry');
. g4 B' w/ ^1 \4 j: DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 a$ ]8 g) ]$ g; s4 o" X* c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- a; ^2 p4 G7 _0 _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 W$ {4 G6 p! N7 t  }, t! M4 A, @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  h0 f  D9 _0 f0 m( t6 x  `  J

7 @6 {% c9 _  a* s( r0 O/* create a logger instance */
( b( u  f) w0 ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, V% k0 i$ E) s, j: d2 y" |! Y. y$ pvar loggerBufP = new LoggerBuf.Params();
7 |0 h3 \( p/ l# N+ H( r2 xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 u4 m3 N) s; q( X8 uloggerBufP.bufType = LoggerBuf.BufType_FIXED;( }1 k8 g1 Y# m" p* |0 @6 h6 b
4 u5 ], H" Z1 T/ o
var appLogger = LoggerBuf.create(loggerBufP);
" Z. l( j! _8 A6 e0 ~0 h9 K- ^appLogger.instance.name = "AppLog_Core1";: \9 P8 \) n" C7 Q" z' A% T
Defaults.common$.logger = appLogger;! j  E& ]& o3 K% a' {
Memory.defaultHeapSize = 0x8192;    5 }" }# \- x' l
Idle.idleFxns[0] = "&LEDStatus";
3 k. z" s* Y5 c% H* b$ T6 QCache.initSize.l2Size = Cache.L2Size_32K;
  N* x" t5 X4 p( M# @
" x* O& u9 d% S
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 06:38 , Processed in 0.042508 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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