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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 [* O7 G' b! C
$ f) `, W' r4 j. N    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* m7 k% g4 Y/ F
# z; j' W- ?) b, l
其他程序段。。。。。/ U( G! M8 ~! S# Q) c4 \

- w" O% ?1 y5 |! G" b( H% t  k. {   free(x_d);
# N4 h9 m) S* H7 D0 n# ~% @# o  W0 w3 H: H+ ^! \' c1 F1 B, J1 A" E
使用DSP侧单独调试功能,验证动态申请没有问题,
6 @! g. V! l! Y2 v8 I0 `1 I
# M/ K, B% f; q" V0 S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, Y, B' o! e! b
- E6 V. A2 P, m- [- v- Z

# z3 \; I  t" ~1 ~* @
8 M; R4 |% W! `" d$ \$ v" L4 w% ?# A  @& I( @7 v
& G* f! ~, F  @) S

' m* L, X5 y- ~
! M, h; e- w7 [$ M  s; A4 Y" l7 c4 E, Q7 c1 h
$ P7 O( I0 q8 W) R- P

0 V- ~6 S! w- u( W3 l5 F- I; |
分享到:  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 */
) c/ p* t% H; eProgram.heap = 0;+ \, g3 m6 k1 {1 p' Y
Program.argSize = 100;  /* minimum size */
* X+ T2 `0 B' C. m+ F6 B# `Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& X" M. C$ ~: ]1 \* S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 z. t3 z- h6 O- ]7 t, R9 Nvar heapMemParams = new HeapMem.Params();
# B0 ~" R2 _9 C; j. \# UheapMemParams.size = 0x4000;1 e% p' t1 S( l

9 r( g1 T7 a+ g2 Yvar Memory = xdc.useModule('xdc.runtime.Memory');7 `$ x6 y5 E$ _9 S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; d  ]1 @! |  D3 M' F

( k: d+ Q& ~8 z6 R- v我大约calloc  每次共计大小为5K*16bits,) o: Z- |: A, e8 |) E
而默认配置才0x4000、需要改大。
- {4 I; \) z" r8 `0 b, a. y7 A; h9 W/ d; {8 `4 h3 |- A+ u
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明& ]# I2 r, y# Z( W3 u3 A' x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* ~5 S  B: ?3 s2 O  c, z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" K5 }$ J& B6 `- g3 O- `- M# k3 k
" K* D# n$ i# n2 N
是不是需要在DSP.CFG中进行配置; [2 y4 {3 P% I# x+ Q
我现在的配置为
: P7 q0 Q9 G) a% _; G' i8 z+ ]' U
/*. \1 [3 k) M$ a- X
*  ======== Operating System Configuration ========1 _: ~% X2 x* C0 D- P
*// f$ |" @2 u. L7 E3 L& s4 @* V

. q7 @7 _7 L/ H( M- L9 w3 O  ~! I/* no rts heap */7 X1 R+ W! A+ G
Program.heap = 0;
. ]# h/ t0 ]8 x* _* L5 LProgram.argSize = 100;  /* minimum size */4 w6 ^" w/ G  F) d4 X, h# U& S
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. I% Y, A8 v9 J$ \6 b" }) d
6 U  j5 d; h, t8 M/* create a default heap */
5 R; ?1 n2 d0 _) v2 c1 [+ k$ @0 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 x- l. \) R7 L9 d5 Bvar heapMemParams = new HeapMem.Params();
1 w) G8 F0 l& n" z  `: yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ s0 l, y' A/ L- [8 `! `
# {; N5 c3 q) l, H* ~
var Memory = xdc.useModule('xdc.runtime.Memory');  y3 |) P" M1 b/ C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. s2 T5 }: H! j; T4 I0 @
: I% s6 J# B/ \$ k; k% R" c" j/* configure System module */1 l+ G$ j7 p, B: L
var SysMin = xdc.useModule('xdc.runtime.SysMin');
4 O- e" J! T4 s; Z- G, j+ Q" [SysMin.bufSize = 0x1000;3 k0 E! @8 V5 i8 h4 g4 ]
SysMin.flushAtExit = false;' U. P" N" t% U7 S( n! F
9 t% Q) I  g( C, |4 E6 y
var System = xdc.useModule('xdc.runtime.System');
2 o. z/ J8 v; g9 A0 ?9 H9 I" USystem.SupportProxy = SysMin;8 L8 H; ~. V/ }3 |' R; U1 S
0 F, R7 C: `3 f6 [8 }6 i
/* configure SysBios to use the lower half of Timer 1 */' K7 X) z8 N8 Q9 ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ j0 D) U* E4 Q9 u( K( W( p& h+ e3 Dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');( p/ ]* m: ]5 X2 J( p
Timer.timerSettings[1].master = true;
5 z1 y8 ?  @# N1 `! K# a$ aTimer.defaultHalf = Timer.Half_LOWER;
) W, m& V( x- t2 r6 u, O$ d0 bClock.timerId = 1;
' \, w7 B& m/ N) D1 f6 ]( j) P/ e5 T+ u9 A, }2 c/ \4 K% \
" P& k6 S' f: U# c+ s
/*" i4 j4 K9 M2 t; m2 s
*  ======== Miscellaneous Configuration ========1 c, J1 L1 b/ Q# }- a
*/; F6 {! q4 M7 ]6 i' U, V& h

* H& V3 _: j/ M( r  P1 S9 L, E/* set default diags mask */
+ x. `8 }) C3 J5 q( u+ ivar Diags = xdc.useModule('xdc.runtime.Diags');* S: X# H6 y  E# ?# a! _# ^
var Defaults = xdc.useModule('xdc.runtime.Defaults');! S! q* t6 {3 s9 f0 T2 _8 r+ m: l# u

3 D6 c" x) T3 }% Q/ i( j1 eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 c' u( [. X3 g* zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 X% n* f" u1 QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) }9 j/ D; u% |! Z4 SDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. U1 B) G( J9 ?3 `6 @* SDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' R/ Y3 |7 @" [: Y. ~8 y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 ?& {& n4 v. J; n9 b6 qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ J8 d% g" g9 [2 d/ Z; pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" }' H- _2 @/ y* E' X, K' \# sDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) J% g, Q; v1 m' R$ ^6 p2 wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! [/ O/ C2 o% E* f: E0 A0 ?0 }1 t  w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* r0 e* ^/ ^6 Z! ~& F- q0 @3 ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  w5 k- o. |) |* }3 e% S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* m( Q, z# B3 o+ j& ^0 w- i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ i5 f" l1 b. u& L0 D" O0 v8 i

: s7 Q9 O- M# X  _/ a8 Z/* override diags mask for selected modules */+ P" R" j' _7 E  I
xdc.useModule('xdc.runtime.Main');8 {$ K% D; |: f2 f1 P1 }
Diags.setMaskMeta(
  _8 R  M, D1 |& F9 ?0 S& C* Y    "xdc.runtime.Main",
/ g$ [6 h( T- H) n$ p8 }6 G, s7 T1 M    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 W- ^: Y7 R. [0 q: k4 b4 i
    Diags.RUNTIME_ON
6 J8 S' a) p0 D: O" ~  |  a# \6 h# z);1 M2 w+ H7 w% H! f, t) P
0 A0 Z% L( b$ |" i/ R# r
var Registry = xdc.useModule('xdc.runtime.Registry');
) s+ M! z7 p7 U/ n7 nRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' B. Y1 l5 c5 W6 }+ ~7 SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 m" Y  ?5 n! g
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 Z  {. I/ z& ?) e, J8 l6 o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  C- ~3 r% M: _+ m$ M
" S+ A. ]; T( W4 j( x  E6 j: e) q
/* create a logger instance */
' i6 ^- K' W5 l- qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% l& E& J+ j) J; P. f' W4 j7 ]
var loggerBufP = new LoggerBuf.Params();
  I8 [# j3 r. f- Z: C% qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, V. w. c  Q" k1 X! V. ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;' Q7 T4 D5 |% h# ~; T5 H9 S( l/ B; O
1 n- a/ Z0 B( H2 ?: V2 p8 @- \
var appLogger = LoggerBuf.create(loggerBufP);
9 _7 o8 @! v8 j/ R9 D* UappLogger.instance.name = "AppLog_Core1";3 [+ C  ^9 @( W/ d! N- m" V
Defaults.common$.logger = appLogger;
% ^; Y- n. c* SMemory.defaultHeapSize = 0x8192;    . O+ S0 m6 C) Q1 F! W
Idle.idleFxns[0] = "&LEDStatus";, z% H5 z( s! k$ I" f/ E% p
Cache.initSize.l2Size = Cache.L2Size_32K;6 j7 R  m# L+ Z6 A- M& z! H% N, x

" D: \5 F5 c1 s5 Z+ U" v
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 21:30 , Processed in 0.044127 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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