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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! O. \1 i/ m4 F7 E) R4 z. L1 U# Z- h2 H' ]) N% G9 Q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 L- x! S* u2 l+ g$ \5 f' \

/ d0 X6 G) a. p  B4 ?- n其他程序段。。。。。
  Z) y( P% O2 ]; @! T . F- w, x% ~5 A
   free(x_d);
" U- v+ H+ k" v/ o7 d/ c
( ?" f# D7 Q4 L  N: i4 e/ i使用DSP侧单独调试功能,验证动态申请没有问题,7 _! E$ ?6 g0 B9 j% E/ K  _  ?) {& o
- ?7 s/ p1 r/ ]  t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 y2 j% w0 n  i. Z- z& @

) w: d9 R( `5 H2 j* V6 i. _8 d3 S
+ H* E: A8 B$ B% U" f- f6 K- l% s+ B! a  ]- s

0 }3 r, i9 q) q) P- v( P' D# e' \) w' k

. P$ ]6 b. p! y  z. e, c
; x6 m* x$ R- r) K+ D4 T9 ?6 t& D

9 }  U+ Z. ^) q7 [1 _8 i# k& H8 o: f* k/ a2 {! {0 {$ z- {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( C! Q  B7 L/ T$ n# \3 M2 G( N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ L% H' W2 c, A2 M2 T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 ^: M& [% I6 A0 [$ C. o8 h
6 l# G; b6 e! W+ y+ A' f
是不是需要在DSP.CFG中进行配置
( p- \* T( E4 r6 i7 r2 d我现在的配置为+ @8 ^7 V0 O3 h" s9 Q4 b+ |0 w

0 g+ O- r. t6 t( d5 S" x/*/ E& o4 @: f) z  N
*  ======== Operating System Configuration ========/ G) f2 k9 a8 S: N/ b
*/& a0 t' ]- M6 W4 Y$ U4 K5 q/ s
: `: \1 J- Y, M
/* no rts heap */
+ v# K, d$ K8 [' m" ~$ I' d7 m: q6 vProgram.heap = 0;
) {0 U7 x& _' R  J# XProgram.argSize = 100;  /* minimum size */
( J. l5 ^& J. C# N" w. m1 r( J4 B$ rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( p; j2 V) B/ l; X, z9 _' }
1 f+ K4 g% G- V4 O: f
/* create a default heap */
% V7 i9 s  {8 ?% S6 w* r& {( evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. O2 u: k( S  q! h& Q1 e0 v8 yvar heapMemParams = new HeapMem.Params();
. J3 F* b1 \/ V2 G7 k3 O& V, @7 iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ P& f' E, k3 [4 @0 z4 \& t3 a# b- U( @) l
var Memory = xdc.useModule('xdc.runtime.Memory');3 j: S; N" s/ y- ?! _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 J) U8 Y- h& Y+ B
" W9 E9 M6 A6 I+ Z6 S/* configure System module */: j8 V5 l  ~- t! V( A  U$ o0 y" G
var SysMin = xdc.useModule('xdc.runtime.SysMin');: q+ s2 ?. v0 W6 N- I' f1 |  {" C$ {( W
SysMin.bufSize = 0x1000;+ `& n( t  k* `# g$ k
SysMin.flushAtExit = false;  m7 ~  @+ O/ p( S
6 \) q) P0 G: L- ~9 S. g
var System = xdc.useModule('xdc.runtime.System');  b& z1 V& T5 z! n& l$ @0 a
System.SupportProxy = SysMin;
+ ^% q3 I: ]0 m+ d9 y  d# d% k& E. ^- U8 N& j2 i7 Q5 a; C
/* configure SysBios to use the lower half of Timer 1 */. u( r/ B" r4 f* J( V' l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 z, m1 q/ ^$ d; A9 q& ^
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 D- d4 t+ J2 \5 NTimer.timerSettings[1].master = true;. z& `3 a4 W" |( m4 T* j0 A
Timer.defaultHalf = Timer.Half_LOWER;
2 Q/ D. d& S) E( oClock.timerId = 1;
8 L/ W7 H: H( q2 u  Q% P  T- h( n" {% C, i0 h, v  Y

) Z, |% Q) d  `7 |9 u! b; k/*
8 c% r% T* w. A$ e" e- l' ^  B, J *  ======== Miscellaneous Configuration ========1 O; x) j5 k/ j$ T! _
*/: }! ^- E1 [8 ^
6 q, `5 [& J) g( z& X! B
/* set default diags mask */
$ o0 I. b2 c0 {( z5 F, hvar Diags = xdc.useModule('xdc.runtime.Diags');3 m0 \( ?5 e: V; M5 o
var Defaults = xdc.useModule('xdc.runtime.Defaults');  U' r6 m/ L) S7 t; k  E

' N3 ^8 d: [& s4 }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' j3 j1 }3 v+ \0 }) s3 X) f) l. L7 A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  v0 @7 U( a; x8 [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& Z; \2 q8 ^; }6 KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& v2 u% _$ J7 o' M: ~: |Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 w& \; t7 Z' h7 Y' M) _
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: m( L4 q  V: H$ v0 X  O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* T: L, F# }3 ^9 }; @$ ?% xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! S4 P  B0 W/ t& f% }8 V% x" hDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" F1 U# q6 v7 }- Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. ~/ m% B: e& I5 n! l
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 n, c' k) F! s3 S! k
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 S  z- Q7 A& S5 VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- f3 Z8 X' Q" `. Q% H! A" VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ Q4 d8 x1 h1 S( `! w. z4 ?9 d: U- L  Z* _* S
/* override diags mask for selected modules */! F- u; S6 ]& A2 i# Y( X
xdc.useModule('xdc.runtime.Main');! ?6 x, }- m+ U
Diags.setMaskMeta(
9 j) i, {8 ?4 s6 b$ h% d# b    "xdc.runtime.Main",$ Q) s( r- s# Z0 K" F1 d
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! ]( t; i- Q( f+ Y! I' S& Z    Diags.RUNTIME_ON- ~/ A/ r' J8 |2 w+ b. h
);
5 v" I* M+ Q( C2 L+ v1 J& I$ b2 w5 o  o# f/ I4 Q. L
var Registry = xdc.useModule('xdc.runtime.Registry');5 m  J. d, p% D6 z5 C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" t, k) A% t& g, U# y5 _% kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 D  N) V+ Z4 |0 F/ ]1 e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 @- x9 M. G9 A. P/ E7 SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 J, t8 U2 r0 j! ]( T* a. I
/ ?7 y6 t! x% s& w* S% g3 M
/* create a logger instance */
2 N3 c2 _7 j. h) ~3 o% ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( S- o5 r0 U$ f0 L3 g* Vvar loggerBufP = new LoggerBuf.Params();
4 D6 h( P3 M% K  H8 `, mloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 r3 E( S- m. g+ r
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 Q* y6 C9 I2 t

- R2 O) K$ T& n/ K, ivar appLogger = LoggerBuf.create(loggerBufP);% Z3 S" c3 ?' l: v4 b5 \
appLogger.instance.name = "AppLog_Core1";
. d0 r) O( j0 Q7 j' o  TDefaults.common$.logger = appLogger;4 }: a6 f+ W1 U* n; A
Memory.defaultHeapSize = 0x8192;   
& h" G' \0 K: [2 N, p& ]- \Idle.idleFxns[0] = "&LEDStatus";; O7 Y& V9 n  C6 n8 ~
Cache.initSize.l2Size = Cache.L2Size_32K;
2 H* I2 O/ _5 ^9 {5 b8 Y
8 L; L- O* C% a; S6 O
回复 支持 反对

使用道具 举报

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 */, I4 H* q4 |" r) [( p, v( y1 s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 h- R; ?* j, C
var heapMemParams = new HeapMem.Params();
. v7 r) a& d! d8 ]1 p- d  e1 _heapMemParams.size = 0x4000;
& T5 X: l& N! I2 |( _" s+ Z& I  m4 F
var Memory = xdc.useModule('xdc.runtime.Memory');
+ M' w% y# Z9 m& c3 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: t* n8 w5 ~; s2 t  A
$ E+ x) Z' j/ q6 N# v0 e1 w
我大约calloc  每次共计大小为5K*16bits,
7 J6 k* j6 Q! `: u: V6 X) ~. q而默认配置才0x4000、需要改大。* ~: `7 X# E  @2 i8 X8 [7 i/ F

' w- l7 k* T- p% h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 a1 L- W4 h- H4 `Program.heap = 0;
0 J$ O0 M- A! s2 S" aProgram.argSize = 100;  /* minimum size */
: I& @8 s2 e# G! k: [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-30 17:21 , Processed in 0.041117 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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