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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( O- P4 s" B7 \/ n  }  s
- w% o' C% y+ d7 q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 q( c5 ]; a3 L: E4 y: I

( K0 q% H5 `* G. m: j7 t其他程序段。。。。。0 Q; C; F6 x& B2 Y+ x4 w% D
3 c& n) r9 x, a0 i$ f
   free(x_d);
# [7 M8 M- J4 e2 \* |. O2 {4 [9 R  M7 P/ J
使用DSP侧单独调试功能,验证动态申请没有问题,1 }* o0 y( p) ^1 B# s0 f

- u0 C+ ]- f4 i- |  t, L; J但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 C% F0 z; ]6 d2 p9 t
% n- O& Z9 a4 S1 a$ L  R' \

$ D+ A, e, K& |! d! T3 G8 V7 j6 @- d: P" m% y% J

- S  E5 `3 t( B5 u. E
* p1 ]' }; v7 E1 F8 i% s
4 c- q- g3 o; I7 k; T" {
3 }$ G" ]  h5 v$ J! }. ]* x+ i, k$ `) e! d1 k8 l# d

1 a0 r' {" _8 v/ t0 B, Z4 O3 r8 |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* y" \1 P/ G. n5 R7 r
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" }% m! U. r6 ^- `  t9 J
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): `* R0 n2 o% \$ E

  l7 d+ e0 K% e! |" j是不是需要在DSP.CFG中进行配置
7 ]1 C( L- e/ I* G/ ]' T我现在的配置为* y8 z$ u3 X( p+ q  v( L1 T- O5 g

9 a4 ]: N4 V: [$ c/*
5 P8 D: x1 Q% R& D: W! ] *  ======== Operating System Configuration ========
. I0 ]6 C4 _7 K3 O3 s7 D4 d* ?7 M& ?. i */) [# R8 v9 m- o+ Y$ J5 [

' K* w' b. d% d3 u/* no rts heap */% D8 L' u7 [, e1 P8 P' Q
Program.heap = 0;% H* G5 [7 J( E- o7 j
Program.argSize = 100;  /* minimum size */
* Q+ T  w) Y$ b+ _; O  u' M7 CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" X0 k, s9 _* w  g4 F8 q; z& F0 i

* p# y" J, J. {1 z/* create a default heap */8 t$ f& e" P9 l' H% L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ k+ p9 a: E1 dvar heapMemParams = new HeapMem.Params();
2 }3 G: [) U6 E* w; c1 h8 @0 MheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 T/ {7 n' f$ z4 Y. U* u
- {" _* I& Y* n- N
var Memory = xdc.useModule('xdc.runtime.Memory');/ E0 c- T/ z7 O# M+ b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ ?( D# H$ Y- j$ i) E# j, @
8 H1 i  D/ S! I3 S4 H, G" ^- Q/* configure System module */
: v5 J) E% q9 J  `: o9 V* avar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 N3 ~% ]  W7 I. X. E( T5 W7 FSysMin.bufSize = 0x1000;% R/ n3 M! w( Z, c4 v
SysMin.flushAtExit = false;
, `, M" O4 i  y. T( R3 B; ?$ M+ B2 a. H9 U8 B
var System = xdc.useModule('xdc.runtime.System');* e' @# ^" p; p  f+ K" y
System.SupportProxy = SysMin;5 T) J$ a) h1 b( U
- l- ~9 v. Q. A0 P
/* configure SysBios to use the lower half of Timer 1 */
% p* r' R; o) p8 s5 C) r* r  bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* ^2 j, S) ^3 W) ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 u  O. K* }, C4 @8 Y: {Timer.timerSettings[1].master = true;( x4 U1 D9 A. t% c" b/ D1 M0 n( {
Timer.defaultHalf = Timer.Half_LOWER;: K+ W, w# |# t2 T$ N; T  [' i7 z
Clock.timerId = 1;
. Y) h5 v% y( o2 d3 ]/ V! K  n6 D6 d3 `2 t1 l2 i  e3 H
; Z! H& Y4 }7 @8 i
/*1 K3 h+ n2 E2 }2 y7 B  b" P
*  ======== Miscellaneous Configuration ========
; L# a! p: |9 X3 W */1 ~" }2 y  B& P$ e& d
2 S# g. c; \1 h0 g/ N) @
/* set default diags mask */
% U1 E- b9 V7 P( W; Vvar Diags = xdc.useModule('xdc.runtime.Diags');; Y& p1 w% C1 c  a- e) M
var Defaults = xdc.useModule('xdc.runtime.Defaults');& b- J$ U! O& s" G' u$ U
8 r  b. J/ u1 B- V$ g2 J( X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 j0 m% x4 Z! l  h" S
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( N/ s$ D0 w0 e  s* xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 _& X  i/ Z* W' ]4 q( }  @Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% \. j8 s3 [( J5 I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# G+ j( u! A  K3 cDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 B7 J5 C6 \1 x- O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. W: z& d  Q( h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; t7 Z9 h1 W) ^) @+ u/ G2 u9 g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 Z0 ?, p" L7 z$ F1 a* _# B" D, xDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: F& v( y0 H$ `( X  IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" T3 [$ G3 Y8 V" P+ v1 {Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 K" n7 F9 m% A' ]0 @
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' P' o1 l3 E8 U2 R8 l8 J- i4 W9 jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 s1 _2 N4 [7 j1 [+ ^
8 Q8 V: I7 a7 \3 G& O4 g/* override diags mask for selected modules */
" V8 }6 V. d+ ^+ N$ _' ?: @. k" H. axdc.useModule('xdc.runtime.Main');
! ?4 o1 t  K/ F4 p0 H4 ?Diags.setMaskMeta(6 t( X$ W* u$ ^  \0 M  b
    "xdc.runtime.Main",$ |* U2 Z3 y* w* E( m6 J! y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 }  ]$ w+ G2 y
    Diags.RUNTIME_ON: |* C4 w' M0 n2 u
);' I1 I* i0 o3 S3 h: Q" Q8 k

: b9 w6 Z' ^7 \" Ovar Registry = xdc.useModule('xdc.runtime.Registry');- b7 a+ n! t& A+ i. ^/ L) P9 I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 Q5 B* Y5 g9 W3 Z; N# |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ P* s9 [( v3 h" w' s  `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  e: h7 Y7 C$ ?( \% K" a5 ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 x. `( n6 A4 `$ n# r( M" m* `6 V* c& |5 ^& o9 U; v1 H5 _+ a
/* create a logger instance */% B1 T2 l& ^5 ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% \6 c( P% |" p1 x" X- l' f
var loggerBufP = new LoggerBuf.Params();# b( E4 |# G2 N
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 ?0 T6 \) \  o. F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- x) H3 ^( U: }7 J9 f9 y

  @$ _* g1 i" D: a* J$ q1 T) Q3 Vvar appLogger = LoggerBuf.create(loggerBufP);
% D8 Y( I' c( qappLogger.instance.name = "AppLog_Core1";
' Z5 R7 w9 |, V+ ~: z+ k3 q: YDefaults.common$.logger = appLogger;
( ]) f" ~% D+ J, {2 x7 S" y4 TMemory.defaultHeapSize = 0x8192;    $ c; R6 _+ \4 |" S2 S' ]
Idle.idleFxns[0] = "&LEDStatus";
8 i; T& x. t# }  {1 y( D0 xCache.initSize.l2Size = Cache.L2Size_32K;
6 F1 B( f* Q, W9 S7 O+ G9 ~& K
  s8 b+ |! m( a# Q" y
回复 支持 反对

使用道具 举报

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 */2 K: A, f4 B4 y( Y* L( C: K. Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 I1 Q* e' h6 Q- V+ l5 y0 p, H2 Vvar heapMemParams = new HeapMem.Params();3 g* B& w' b8 A7 b; @2 m7 _% f
heapMemParams.size = 0x4000;1 J3 u# D- @: N
; s! ~5 o2 A+ m. p
var Memory = xdc.useModule('xdc.runtime.Memory');
& X. J( n% m* {) G- P$ J0 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 f/ c7 s/ `' l: i; L* N; e8 K( W8 ?) N7 X" |% s
我大约calloc  每次共计大小为5K*16bits,: F, p; e$ W4 W9 g8 {2 F; \
而默认配置才0x4000、需要改大。  r4 z7 I; K. E$ C
% e; a6 n: R7 A5 m' k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 d9 g* q6 Z4 `. r. Y; {5 h
Program.heap = 0;
* I5 n' r0 h) W1 ]Program.argSize = 100;  /* minimum size */9 _$ O0 G: Q/ P# t1 O% t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 10:34 , Processed in 0.051780 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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