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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ H& o: {; {. i& c  o

( E: d  y% j7 ~/ a; b7 q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ I0 [4 j! Q0 E

8 w# W2 J1 d" x4 ?0 y其他程序段。。。。。
& t, D) S- g; w  i/ ^2 [ & d& G+ d4 I. N6 `
   free(x_d);4 W5 X& l# D) T
! p8 s' K8 @5 {. G/ c. q
使用DSP侧单独调试功能,验证动态申请没有问题,2 t- B7 n9 B1 I2 v& Y/ T
& ]4 V0 T3 k9 F" `
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 S8 \0 _5 E6 f# b5 I9 @) V& R

1 g. j% w8 O( m8 S2 M
* h! N) q) ?: ?( O5 H3 ?! m) W3 N) D8 s; h

* e5 M. J- C; b: a6 D' g" h9 w% z. T0 `7 u' u8 V
; \3 X3 ?; N: @! t
( o( u5 X3 B  @" x7 l4 q

7 L% G: ?+ j- F+ s/ D
2 `: H) W; @/ R
+ I+ ~+ [& Q1 I; R
分享到:  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 */) e( ?5 Z  I/ _/ m5 I
Program.heap = 0;
) [/ L( F, `. E( d% \6 UProgram.argSize = 100;  /* minimum size */
) U  Q- r' l0 h3 EProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */3 T7 u7 K* ^+ }3 u0 [; j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! |8 `7 l5 F7 d% ^- ]6 |" Tvar heapMemParams = new HeapMem.Params();
( L  Q  Q) m+ n% j4 C* ?heapMemParams.size = 0x4000;3 }. A( ~# t1 {5 E  Y

0 ?0 w4 t, A; V  |var Memory = xdc.useModule('xdc.runtime.Memory');
% _* y. b: y( u/ }; jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 v! @; X/ g# [; v
  W) _; t1 r' \- x) }( C
我大约calloc  每次共计大小为5K*16bits,
6 j' k4 U8 ^7 F0 d9 n! ^而默认配置才0x4000、需要改大。
$ D& I, t  |" w
) g% E9 n  Y. x6 I/ H6 P5 i
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
6 x: w0 D' @" L: O( M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 q' [/ |" h9 p* u(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# t3 n1 F. ^9 g3 `& B

% m3 e. n, n, e是不是需要在DSP.CFG中进行配置0 ^1 P8 O; G* s  y1 O9 Z
我现在的配置为3 p2 z5 h7 Z/ F2 e, H

! r# B, {2 W9 S+ W6 d( b/*
" w" d. f" U% q0 _. \5 s& H *  ======== Operating System Configuration ========
: Y, I. w8 ~: ]1 L1 C6 Y0 ` */
+ r3 ~  W: _& ?3 r  H0 \* Y% I) J5 ^. y. @2 Y
/* no rts heap */
+ t# V  F+ Z& PProgram.heap = 0;. b; b& q$ b- `  \4 v7 v/ I) u. V
Program.argSize = 100;  /* minimum size */
5 B7 R1 J, q7 s/ y7 a% s5 @5 eProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) H+ H/ }6 q% w- g( g
$ i. ~) Y6 p/ X0 n& R* P5 Z/* create a default heap */- G* v5 S. U4 D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: M' ?. v5 Q' ~1 T+ m, U4 U  ^
var heapMemParams = new HeapMem.Params();
, X  [8 T! K( G4 R) ]heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) B4 n! n  @2 B" `& d" _- o6 O( c
var Memory = xdc.useModule('xdc.runtime.Memory');* ]& t1 p* v; @/ S! F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. V  N. f1 }" M9 @* m6 E2 H& Y& L& J
/* configure System module */
9 ^: w6 K% ]; }+ O" M3 evar SysMin = xdc.useModule('xdc.runtime.SysMin');
6 I  Z, m) U. U0 aSysMin.bufSize = 0x1000;
; Y4 g. I3 b6 m$ T- m- J. h  NSysMin.flushAtExit = false;
' s! y9 z( V' {& o. o% p
* t) |4 _7 O7 w: G# qvar System = xdc.useModule('xdc.runtime.System');: V$ k$ W4 E7 ~1 n, h! R
System.SupportProxy = SysMin;1 W1 A3 F9 q1 R: C  q$ i2 X
  S' [1 o' z- u
/* configure SysBios to use the lower half of Timer 1 */
9 c) j# u$ J& u8 X" \& kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ c3 p5 ]; i/ v& _var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 D9 Q9 F: G! |8 ?& B; d5 ATimer.timerSettings[1].master = true;
* l6 m( _( o$ i6 i( u  u9 PTimer.defaultHalf = Timer.Half_LOWER;8 f; w$ ^$ P4 }8 \9 l: R; s
Clock.timerId = 1;0 a( y+ }) V; T' P  x, i

& N8 z2 P, d: F8 ^: r# o, ]7 n# L
, X# ^- C5 a  @) B) L% I$ T/*; x- z" X8 L6 J0 N2 U* X
*  ======== Miscellaneous Configuration ========
8 H/ j0 L. M% N3 y8 T" f0 R" r */
: V' U! \( G( ~% y! v$ O5 G+ R
/* set default diags mask */+ s7 W6 z5 ~: Z
var Diags = xdc.useModule('xdc.runtime.Diags');1 i1 Y& b3 B! A& O
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  _9 L, x& j6 H, H/ D. C2 S7 P! ^6 ]7 S3 W" w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  e+ d2 g- X8 K$ c2 ~
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& |; [; E$ F6 x; ~8 p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 Z* G2 u# O. |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" {% D& @& n9 D" V: TDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- T; f  K; z; gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ N, s: _! s, ~  v. s2 Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: k* g5 w! U+ u) }Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! `/ D9 I( k7 f& q% F( k- N; R# hDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& ?8 L; t% N+ K0 y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. c: o( b5 i( g5 i; v  @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& g2 c' {" H* j0 z5 v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 e: \( o7 h/ i# w) BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& A1 ~9 q: e. G' V; HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' p: L+ Z0 y+ M: ~& v
( n0 [' o: F5 i0 Y: Q0 l, @3 n
/* override diags mask for selected modules */: a( S! I2 X/ S% g
xdc.useModule('xdc.runtime.Main');
+ b" c3 A) W5 G5 U' NDiags.setMaskMeta(
* z- C' B0 J. Q; t9 k    "xdc.runtime.Main",
) h. W! v) \6 y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- r- A  Z4 R, W% G0 P1 L. h8 U3 g    Diags.RUNTIME_ON( @& u+ M# h5 w4 x
);
1 D" F7 y6 R. ~3 |: N
# ?3 V! K  f$ p/ M1 M) k& s+ Uvar Registry = xdc.useModule('xdc.runtime.Registry');9 H+ Z0 m* w8 s, z0 G( {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ Y' ~2 T6 W5 A# ^3 nRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 a  q/ G: ~  M! c4 d6 ^& B: i( eRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& u" M7 a- a( d( V% `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" R/ [9 l  u! G
! R7 d: w  H5 L3 a/* create a logger instance */
7 l' Q; t* j* T( a9 u/ Z0 [6 L. `# p% Wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, Z! X; u$ z* W% j: k5 Ivar loggerBufP = new LoggerBuf.Params();1 x3 e! r1 J! z1 `8 O% d0 {
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// R7 R7 B) t1 h$ \$ C: @+ |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! a$ N8 `6 B' ~6 |! Q3 z) X/ B, a* D5 `
var appLogger = LoggerBuf.create(loggerBufP);* _9 W/ O. Z. M, N" T
appLogger.instance.name = "AppLog_Core1";) E; g2 V) O) E) s- x1 {9 n
Defaults.common$.logger = appLogger;$ m2 V1 x, l/ z& |0 P; F
Memory.defaultHeapSize = 0x8192;   
) i; a, K1 V! S3 r& sIdle.idleFxns[0] = "&LEDStatus";& W& k9 c3 v1 g& d1 ]1 L
Cache.initSize.l2Size = Cache.L2Size_32K;
3 h5 ^4 w& I% T8 f5 `3 O* B& b% |( {
0 W5 i( S! U; s' U. d: D4 x: b2 W# k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-6 11:48 , Processed in 0.043408 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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