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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 i  `- t  O  ?
+ L4 R( o8 v) J# t: k. M' a3 B* }    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ m$ ?# J2 C4 P2 L8 P  y; @

; a: l9 F# a, v8 Q4 ~( ^! g7 J其他程序段。。。。。0 C& x  }# d5 h# U

) l+ V! q4 `) o( n/ u* ~   free(x_d);0 Z( d$ F# D' U0 a- O6 ^2 r" f3 p- E

: O; S' V4 \) N8 l% H使用DSP侧单独调试功能,验证动态申请没有问题,) @* z" f$ z; R: X5 U! \( W0 r

- ]% {! v3 u$ a' M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. D/ C* G# t! n* W' o- w+ K4 k3 K

0 T) K& d5 Z0 [7 R# d0 B4 ^5 B  q6 M. k4 y9 g" U; O6 D9 V; L
% w/ U& L" c+ l+ h
# F0 x+ k0 r- ~, R2 Y

: d! M( K  `/ s4 P: b1 V# r7 |* R: Y% n5 F8 l. d- ~
5 \: L1 Z$ I4 W3 \( |, O

+ l& b2 C5 {# A. r- Z# g/ W2 G( {* \4 q
; q! c' ~6 b5 ~' P* M: w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- R1 _4 e$ D8 q* W, @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- X. f" p$ Q0 `/ N- E; [5 g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 E& L) g; _/ p1 h+ T  G

3 G! k* M$ J9 M* \是不是需要在DSP.CFG中进行配置
5 v7 Q9 ~1 o6 G6 I9 b0 y我现在的配置为1 H' @! z& v* Y4 c3 a/ h
* i7 `/ h3 a* f. V
/*, X7 F# N+ C' M" S5 p7 i" b
*  ======== Operating System Configuration ========
4 f2 d0 b6 N  y/ f% V9 ~3 n( M */
' {4 t8 K) a0 B: u0 g' A5 u& A( s0 _( M; ?/ J) Q
/* no rts heap */
2 e$ N- u+ B% AProgram.heap = 0;( n  N8 v9 c: p  B+ Q5 M3 a& |7 O
Program.argSize = 100;  /* minimum size */2 @  f: E- T5 _
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 M: h$ c% P4 K' {5 }. A3 i- L
) E& N; P+ d( z7 |
/* create a default heap */
! b, A2 q& }& u4 k6 Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; D" R& T0 J2 G9 ^  qvar heapMemParams = new HeapMem.Params();
& W" M0 H% `/ u, t8 J  vheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 D2 q: t. r; S# d- g! b9 M( y
( K6 X# K- K. g* z
var Memory = xdc.useModule('xdc.runtime.Memory');7 B: C# n4 }6 t0 ^! N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- Z" f0 q, {. g* e) b+ ~' R8 X8 x
& ?4 [( o+ T9 ]/ _0 r* T
/* configure System module */
" L! [6 E" ?8 N+ l3 x7 Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');; R, H  l, q+ e$ ^) l, v0 c
SysMin.bufSize = 0x1000;
$ p. l" g4 e4 C. \2 i, xSysMin.flushAtExit = false;# `" E, x/ d, y7 K
. ~6 I, Y9 A2 ]% J
var System = xdc.useModule('xdc.runtime.System');* }, L, y8 ^1 L9 d& g- X
System.SupportProxy = SysMin;+ D- m0 p$ O+ [( ~: k6 Q$ s* }( h
1 E7 k  a% H# I0 i8 p) w
/* configure SysBios to use the lower half of Timer 1 */( N+ d8 B9 h9 p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 m+ d  }: z$ a: v1 B/ `var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 x: U$ h- d' R( B  W9 f( ~% W( CTimer.timerSettings[1].master = true;
' p+ O' v" T8 _$ _/ tTimer.defaultHalf = Timer.Half_LOWER;. D5 q. k- a6 m$ l( G
Clock.timerId = 1;
3 a* R7 O9 R3 p: w$ ^
' X9 v" p6 N$ X% p7 u8 A- M2 q+ z2 a; m( e- R
/*9 Q; z2 m2 Q- O! C! b& O2 L' i
*  ======== Miscellaneous Configuration ========
. Q2 w1 q8 M- i' t' x1 R */  N1 d& X6 Z2 @& M

$ r  X6 h3 Q; O+ Z5 W( Y" Z/* set default diags mask */
1 p' y. ?& }. I+ O) bvar Diags = xdc.useModule('xdc.runtime.Diags');/ ~; y& |0 q$ @3 [2 A7 A
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 B; m. S5 q" o* d

% `3 Q+ w3 D7 i5 G: ?Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ O, g. X6 H: Q2 ^9 Z* x& W8 f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. ~: u  ~! o- R% K
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  g, u( M% u) e5 e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 w/ P; N# [, s  t* U0 g  oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 @) n6 a$ t6 L: v/ H6 r. @Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# x0 |: `* f3 f- c, kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 G* ]: ?- Z# K* t. ~! s  g4 _/ I( X
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 k. c( ^% B2 x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 y* Z. {2 s2 ^$ y# Z% e: ~3 `0 nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: n3 ?* J' l; I! W
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" O; t7 P$ K6 b: {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 x# Z% @( C1 L+ ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ }" M- R: L; t8 c' I$ \Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 ]' z! c% ~: o. F* R" n. I/ f

# q, y: @* l/ n5 j/* override diags mask for selected modules */; C+ c, I8 s6 C$ k% l
xdc.useModule('xdc.runtime.Main');% i( I. H3 }6 ?- I& g& _* a( M) a
Diags.setMaskMeta(7 S3 l; j1 i3 B
    "xdc.runtime.Main",
# \: L; P8 ?& x2 t/ s( G. s" ]% m    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; i+ F0 c: X! q9 J    Diags.RUNTIME_ON
1 U, S- b0 \  l/ V; I5 I);
& {5 @& J7 f9 L! G
" A( Q+ Z1 J* e" E6 B! Ivar Registry = xdc.useModule('xdc.runtime.Registry');
1 i- u8 S0 q% @- y/ c( y6 gRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" e/ ^2 s2 r5 B5 |( r2 i9 \5 WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 p; {6 Q9 w$ z) [, f9 e' lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" o5 u! r: f, D3 o/ N6 T+ @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ k4 ?/ k  A+ S, _) A6 G' H  {* V" k* m* t6 J0 z* Q
/* create a logger instance */
2 _# D. `" p" n2 t. R, I) z0 B2 @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) b3 O2 G  R& H* j# ]+ X
var loggerBufP = new LoggerBuf.Params();
% d6 ?! ]6 I' O4 {: x, XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 [- {/ d7 I2 f5 c2 b
loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ ^- D6 ?0 D) s3 T2 Z, t4 a7 A$ _$ D

+ w5 s" ^! d6 [& S3 Lvar appLogger = LoggerBuf.create(loggerBufP);) j1 s. W/ [% n) c3 G
appLogger.instance.name = "AppLog_Core1";
  c2 s4 e- G$ oDefaults.common$.logger = appLogger;( ?" ]1 {8 N2 f. z2 T
Memory.defaultHeapSize = 0x8192;    / v0 \. P% ?" B3 h9 g2 F  B
Idle.idleFxns[0] = "&LEDStatus";4 @) H6 C5 s- [$ ]+ j1 K- N
Cache.initSize.l2Size = Cache.L2Size_32K;+ h. {& y4 L/ |  L6 o  ~" I
# g$ P" @/ I4 v8 s6 h; x
回复 支持 反对

使用道具 举报

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 d. R, q* Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ c2 T1 \+ |: ?var heapMemParams = new HeapMem.Params();
% L# c4 W6 E6 O- `$ {$ f2 H- G" QheapMemParams.size = 0x4000;
3 r1 ?5 ~( z3 A5 p  Q9 J+ d, d
. ], s) r# e5 k7 `" \( \var Memory = xdc.useModule('xdc.runtime.Memory');
$ M4 u9 k9 p% `0 e% [# a" `& xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, T: g" m2 Q9 g0 R- a" X  x) {" j% g& b8 B5 E
我大约calloc  每次共计大小为5K*16bits,
, [7 `+ w: S- p8 F4 Z而默认配置才0x4000、需要改大。
5 u1 M# z0 e0 c7 L* ~2 l: L; G! ?2 Z& J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# O; i" D' N4 u7 g+ t$ I# H- \
Program.heap = 0;
- T- _+ t1 _& {$ Y  RProgram.argSize = 100;  /* minimum size *// L" b7 M/ y, ?6 U2 m$ m6 x
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-2 17:54 , Processed in 0.049672 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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