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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: d1 p  @- S+ n4 z
3 s. `, `1 `+ X. q: l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; Y3 Z% w: L2 r$ w' w" P! |
# E2 {( J5 g- _& s) A2 u
其他程序段。。。。。
& w. E5 b; m% K( U
$ z7 B3 m) `% l& U* I   free(x_d);
, W) \0 c8 \9 q6 G6 }4 h
* B0 s; @/ E1 J# r" O) C7 b使用DSP侧单独调试功能,验证动态申请没有问题,
; d! h3 h5 Y9 v: C5 @+ g4 y( E( Q  h- W) c; e/ @) G* O2 R& L0 v
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 _+ C0 W3 \" G6 n
! ~9 \, p( Z% v8 k3 f

$ F% c- l: L  C8 u8 t& z- e
6 g. ]) U5 M6 F5 O. l1 X- J% u% s  h2 P8 h) ?2 ]' ~9 h
" J/ _! o+ k& U1 Y% x5 [
4 G6 t  l3 t% z1 _% G2 s. e

2 m/ n) f$ i5 W  D" `: ^. a* F2 r0 N# g! ]

7 b4 Y$ q# y4 b  {+ Y* x9 v5 d, g+ l2 a+ v6 R8 ]7 |2 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 C8 w( I/ D3 W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ }! j8 y9 a  L$ j3 k(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 g9 R( ?- d6 }1 s! L1 I/ c
2 K0 p5 M9 }: P9 T1 A$ V
是不是需要在DSP.CFG中进行配置
) c: \4 s7 M3 i! C# h+ i2 |我现在的配置为
# L4 R$ s' k/ c, `3 l9 W& C! ]$ f1 j5 P9 ~5 I% T
/*+ l) B8 y* d/ W8 ~7 b
*  ======== Operating System Configuration ========
# v4 [7 h* ^- |# M5 w' o */
' |' Y! L' x3 |  ]8 B
8 b$ V  X3 b8 u, j7 Q$ [; J6 m/* no rts heap */1 {  n' V# G( X  ^; D
Program.heap = 0;
; E0 t; N6 ~% ?0 J6 S% K6 O. ~, |Program.argSize = 100;  /* minimum size */) S: W# v. }% X
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 Z* k7 t% {7 x/ r% i- u* W" N% P, z* i+ {' q
/* create a default heap */
  |% `1 ], J& B1 \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- _! L0 N6 R9 [' v+ P! w& evar heapMemParams = new HeapMem.Params();: }. j# `  s3 q, s/ W/ o; ^, N6 A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 i3 G' H, @* l. U3 m" Z2 q
7 G- W, S. j; q7 _3 K. u8 [7 F! d
var Memory = xdc.useModule('xdc.runtime.Memory');3 E0 z) p5 y* X; H1 h% B( k0 o& Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 e: e5 p0 l8 q4 j8 `- K

0 d5 B. [- @5 S0 S+ c; M# z/* configure System module */- F( _( }" Y3 e  Z3 @2 L% C
var SysMin = xdc.useModule('xdc.runtime.SysMin');
; u( s2 y7 j- ~( m  DSysMin.bufSize = 0x1000;, w. l) @- O9 X. z2 o# Y0 X
SysMin.flushAtExit = false;
7 k  w, q0 j% o8 D! k( q* C, g3 O; a' e3 `( A9 e2 P4 U8 k
var System = xdc.useModule('xdc.runtime.System');
7 @9 m+ I; m- a8 m$ s% q6 J& F7 USystem.SupportProxy = SysMin;
' V$ C4 a6 b0 U0 j, Z& d, p2 X1 R2 S3 ^
/* configure SysBios to use the lower half of Timer 1 */8 k$ L6 O7 l4 t) ~/ b3 g  N/ @
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 N7 c3 W; q% S6 l" |4 c- }var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 Z  _9 R9 P% }Timer.timerSettings[1].master = true;
5 [& N8 q, B* q9 o) STimer.defaultHalf = Timer.Half_LOWER;
( q0 b1 E) i5 _" ~Clock.timerId = 1;$ G4 ^" [5 p! B" N0 y+ y

1 Z9 f& z) P8 f+ A' ~4 E: y1 O2 T4 i4 \2 h
/*7 E+ ^- n: p  ^# w3 ]% p# L1 U
*  ======== Miscellaneous Configuration ========4 m: V$ Z5 A/ G2 I9 J+ l
*/* s8 X$ A' K1 u. Z. G4 e1 U
$ q$ e! D  ^$ ~3 Z5 `" X5 t, C
/* set default diags mask */
# {& U, ]9 O% H) P; Tvar Diags = xdc.useModule('xdc.runtime.Diags');3 _9 ^% h# ~( e4 K2 y* W' {
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' v( K$ H: c$ T! a; I
1 j1 E/ B/ p! d2 I" D; n- `6 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 r, q8 E$ r) A* Z; d6 q% ~0 Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 ^2 u& y6 e) b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 n( M9 D* Y! @) F" h5 q% ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 p! N% |2 ]/ L" m2 y9 I% MDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. U; n, [2 N( D' N0 f- T' H# G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 t8 g) e2 o; d) Z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 G6 K: B- }" K- MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ r" e8 V  ?: |7 F% q; \# s5 l0 \Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  a* `. A5 g- x5 f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: J+ J* {4 {# zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( S+ J2 f" A0 Y! ^& @( wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, {/ Q' ~- o9 I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 Y/ E) ?% k8 I) D
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" E0 d! J5 n, c, y& N- v

% M1 A0 Z6 v. j5 J/* override diags mask for selected modules */
5 m/ g( j% ^9 ^xdc.useModule('xdc.runtime.Main');
! }" q8 B- O5 ^; b3 jDiags.setMaskMeta(% @. G# A$ K6 c: @3 t
    "xdc.runtime.Main",
( ?$ O& W( b/ x    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" m1 u& J2 @) @+ O: ]9 P$ R    Diags.RUNTIME_ON
0 T+ C# }3 ^+ [9 @4 J0 r. V);7 ^$ W) X% g. F' N3 ~
" Q0 _# |  t* _; V  b
var Registry = xdc.useModule('xdc.runtime.Registry');
( ~; n0 }+ Q% ?7 oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, h& c  @4 W  V3 c; ~$ D3 m( |- @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; r9 _; A$ ?* O( O2 o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 f6 O* u; {2 \5 I4 R5 z/ e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. ^1 M8 }) n) f5 Y7 k7 i" F0 Q: s6 i5 d; V4 f+ S; P- R  w
/* create a logger instance */
# R& @* Q! k8 evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ L( Q3 l& g6 @" j/ e( {var loggerBufP = new LoggerBuf.Params();) d1 p  S2 U4 r5 p
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" j. f( v  o' ?; I( T+ j. O3 AloggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 x0 T: y& b: w5 b  X. K' q
) b: F- H  r% @+ G) Q( u% kvar appLogger = LoggerBuf.create(loggerBufP);/ v/ d; R  P9 l7 U; H. |" h, u
appLogger.instance.name = "AppLog_Core1";
7 f$ V3 J0 T, ZDefaults.common$.logger = appLogger;
8 R7 \, N  C+ O0 [0 [' `Memory.defaultHeapSize = 0x8192;   
1 p% S5 m3 l9 ^) m4 {! yIdle.idleFxns[0] = "&LEDStatus";5 i! v& V. @/ R4 ]- @
Cache.initSize.l2Size = Cache.L2Size_32K;
6 s, [0 S% `1 h$ S' J% N2 l: N! a9 ^; r) c8 H7 p, R
回复 支持 反对

使用道具 举报

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 */" D. u3 S2 b( r. R: F3 A8 Q5 \" A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 ]) _! x: n$ e5 v& H8 |1 a
var heapMemParams = new HeapMem.Params();$ i" c! D" L- _2 t5 M/ `! Z
heapMemParams.size = 0x4000;4 _8 m, ^8 D; k/ N/ b) N9 ]

: T/ q9 K0 t. B7 s$ r4 Y% A. d! mvar Memory = xdc.useModule('xdc.runtime.Memory');
; c( O4 O2 d/ c- c; AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 F' y7 B) h& {" |3 K2 I# J

) l: u. L5 r! A. f  P我大约calloc  每次共计大小为5K*16bits,
1 x  J; @! J& j) _# B' }而默认配置才0x4000、需要改大。2 j9 R8 o8 {$ A" \/ a
& y2 ?/ l! Y# `  o# C! P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 g- |4 n" G0 i; K% W
Program.heap = 0;
" K# U, u- S- o0 I1 ~9 v0 x) vProgram.argSize = 100;  /* minimum size */
' n6 D! @0 }  r6 b; ?) D' I6 N) ~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-5 20:50 , Processed in 0.042044 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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