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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( N8 @- L9 ]# {2 d9 ?
  S" L* v7 @; A8 m; y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ U; b, `; K0 }  \- a2 O

5 M) |/ H/ U/ P4 ~5 I- D其他程序段。。。。。
  N+ D# L' ]& O, x+ R7 [  X/ p5 h
( ]/ `8 s/ c$ d6 V   free(x_d);
5 U0 n# A3 @# j3 M+ O
6 B" l: X( D( u- p使用DSP侧单独调试功能,验证动态申请没有问题,6 i: u6 H+ K2 y
3 l6 f' r9 r6 n8 \' Y9 Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( d' h$ J7 u" k1 V' ^) O
# G1 D- {& p' D8 d

6 j4 r9 [+ b5 J; I& a4 }3 T  r' C: e  z9 {/ i8 R% K) [
: R0 {# I1 J6 O) q9 H# L5 I
6 {) D9 m- S9 K- S) V

, i3 T3 ]* x. k% x7 e2 L' m5 P5 I' E4 h- a: x

6 r+ |$ D; h% p" F! r# v) u9 p9 V- b, \4 |$ o! @/ ?/ v6 h+ M
5 I2 D7 {& K' `9 x
分享到:  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 */
% c6 X. {: ~% f/ t$ j4 AProgram.heap = 0;* o" i- r6 t) Z" {: o' G8 T- W& L# g
Program.argSize = 100;  /* minimum size */
& f8 P4 h% y* ~; w5 w8 m& p& V9 NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& R2 {5 b7 d# w+ A3 W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! _' ~% N: G7 F* K. x' l; H0 Cvar heapMemParams = new HeapMem.Params();
) f) b1 n/ \4 Z3 o) mheapMemParams.size = 0x4000;
, t. U: S1 I0 W2 v" \8 J" E- U! w
) ]$ V! b5 }) \  k- vvar Memory = xdc.useModule('xdc.runtime.Memory');# p4 [* k9 A) z  D/ z; w3 }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: f9 e" A' r: n8 S1 a2 s
7 @2 c" d0 |! f6 ^; d+ U我大约calloc  每次共计大小为5K*16bits,
! u: @) Z8 K, R/ D2 X5 h而默认配置才0x4000、需要改大。/ J9 i" h2 y8 f7 X

5 \& b# R8 B+ ^. M" W
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明2 Q3 Q  U( W' s, `# |7 C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# ?- O- R( l5 O(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# F8 P. i4 g0 `

/ z: \+ P. r, P, O  D是不是需要在DSP.CFG中进行配置
$ y4 Y$ ~% C; X- U0 l- q& p. [我现在的配置为
/ M( F" |4 J! h- Y- S; p
2 J( U* B; b6 w% K3 ?* C/*# r9 O" c9 U1 {7 ]; V/ d" }
*  ======== Operating System Configuration ========8 P7 @& L. ~: I/ p. \8 i3 ~
*/: A0 W  v, w1 Q  Q" C' m+ s

" B$ j$ q1 R' w3 m/* no rts heap */2 \4 ~% A* q% l
Program.heap = 0;0 G5 K: J% e2 j5 Z1 b3 b0 G
Program.argSize = 100;  /* minimum size *// A% ^) G7 Z$ x  ?- s: `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, r+ p  Z# Z! q2 `+ _' u- H# t  x3 j. l5 V4 r+ P+ h
/* create a default heap */
2 S. T1 \9 ^; L4 hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ ~3 u5 V. i& _! U  F$ zvar heapMemParams = new HeapMem.Params();5 ~1 ~) v: }  d; L- T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, `6 _$ C/ C1 m2 i' x! q0 a
9 t9 V( A8 h4 a/ W) Y
var Memory = xdc.useModule('xdc.runtime.Memory');
/ z3 e9 Q  C) ?& F* n( J. z7 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ V. @5 ?, j  i6 O+ T
$ o" E8 k9 f* p2 i! Y
/* configure System module *// S+ Y+ @/ n2 D9 F6 \+ m7 q, ~( W
var SysMin = xdc.useModule('xdc.runtime.SysMin');. t# ^* u; X9 o8 z8 v6 N9 l
SysMin.bufSize = 0x1000;0 g* T( U6 e$ o. p
SysMin.flushAtExit = false;% P5 a. W. G% g+ }$ ?

! s6 W; E" a7 ]0 v# Zvar System = xdc.useModule('xdc.runtime.System');
" T7 Q- O" ^, r: p: aSystem.SupportProxy = SysMin;; U8 ~) v) v% s: X5 y. S% a
1 t* q/ {8 K) H# Q4 H" ]
/* configure SysBios to use the lower half of Timer 1 */4 k' Q" L+ j8 M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* ]  q1 Z( O7 V& M2 M5 r2 b) R0 ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 o! u# E' v& l. Y) ]! ^Timer.timerSettings[1].master = true;
+ ~2 D+ u8 [- U) H! D( u6 z8 cTimer.defaultHalf = Timer.Half_LOWER;: }2 G) t5 v* }- `, c# c; n% n
Clock.timerId = 1;7 ]# ]  ~( Y/ `% s
( \0 F; [# `; ^! @

% A$ @" N8 d% p; A- h# N# s4 i. [/*
5 v# ^+ h( Y! l3 n3 f* T3 ~3 U *  ======== Miscellaneous Configuration ========
9 Q! ?4 n  N+ d1 _+ }8 L */' x$ {  h# j/ _. j' I$ I5 {7 Q. J+ `
" G) K6 P9 ~4 f' l' x7 g
/* set default diags mask */
4 `2 K- K( x. ivar Diags = xdc.useModule('xdc.runtime.Diags');4 |/ H2 ]/ M  ]- A; X, W
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 @' |# k1 Z# B0 Y4 q
' h- `) o, D& V$ @+ P! t' y7 k& w% O8 rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( W6 G9 q2 j+ M5 _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- P7 R. S* }: ]" f: K! i# b; SDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: F# N  D1 v4 K  s. KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  Q: u& P* m6 Z, ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 t) s, b8 Q6 c; h" y6 x9 yDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ E! ?# y9 h% u- ~/ }2 ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 U& Z, X" A, N1 b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 ?8 K6 e7 K0 E+ L5 U
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 n, U2 N, j3 I6 l# R+ Y* Y/ t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 `( _* F) n: a4 q/ j& Q( u$ l
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) j2 h7 _1 a, S3 G  z2 RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 y  d0 z% y5 BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# C5 ^' o% D7 i( p6 _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- `, c1 r6 Y; }& A) Y9 e2 ?
- i* h1 }3 ?! d, H1 m
/* override diags mask for selected modules */. {+ I- {, a+ Q" d3 k& U
xdc.useModule('xdc.runtime.Main');) c- K7 n2 Q0 h( N, ~" M
Diags.setMaskMeta(
, J5 j) _9 o! f  ~2 j. _% w' B! Y    "xdc.runtime.Main",
( S5 I+ @1 _6 a* E. X    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 u) z% y+ n1 K) S. `    Diags.RUNTIME_ON: g- X3 j1 O/ T* p* ]' \
);' F4 I. h" b/ _) f. D
& j7 x3 B9 Z( Z; O/ O& t4 J3 W
var Registry = xdc.useModule('xdc.runtime.Registry');
/ B& g7 M7 f2 e: n" d& _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 q" Y$ G9 M8 N/ r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% G3 D7 W! R. \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: Q4 X; H6 _- ?  H2 e9 m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 L& p6 Y# H/ D" V! [0 c
! R" T6 \4 ?. {9 ?/* create a logger instance */, i7 N  d/ n0 u, k, q% ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 z- l- x) ~( }# l8 Hvar loggerBufP = new LoggerBuf.Params();
# V$ V: d' m4 cloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 o0 z! Q, H/ V% WloggerBufP.bufType = LoggerBuf.BufType_FIXED;
( V! j% H" h: d/ Z* @! k9 J: D$ L* ?0 B2 |, q* Q* I
var appLogger = LoggerBuf.create(loggerBufP);
5 ^7 u. P9 T* v9 ?6 x$ }appLogger.instance.name = "AppLog_Core1";2 L5 i# [; H) l0 J/ M
Defaults.common$.logger = appLogger;
& s: G/ A5 m  \7 d! Y5 [Memory.defaultHeapSize = 0x8192;    : @" j. u( R; w8 y
Idle.idleFxns[0] = "&LEDStatus";! B) ]$ ]$ f) X& A( }! Y
Cache.initSize.l2Size = Cache.L2Size_32K;
0 r: Z. m/ e" I, T) F, u
  R) V$ `0 u8 \9 `5 |- ~$ r
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-14 19:19 , Processed in 0.042371 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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