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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

% c0 @# b5 w) l7 K. I. s0 w& [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 \1 }$ ^5 k& B. L. T2 ]* W! Q
+ |: b# _- N: x7 y: B6 o其他程序段。。。。。
1 T( p( S/ R1 Y
: Q' R* I" o$ \) {6 U+ v) p1 {   free(x_d);% d2 {. n5 v2 E$ F; c( V
* t% ~' c( w& A5 u: c% d: f+ y
使用DSP侧单独调试功能,验证动态申请没有问题,
( Z) J: }2 f$ Y
2 ~; j* J$ }; G. V; v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* H1 j% ~. E; ^! R: x

7 N, ^2 X  _/ p; j* v$ }- N
: _5 b: C; H+ n
0 B, q. b* M& u1 u4 n$ Z# b
. H. l$ L1 w1 k: p. p8 F/ [; x! {  W; t2 s

" T) b! d% i( I1 a9 F/ P  S- o) \' j2 d" V$ Y* H

: @- b; Q8 K! t* Z' [, G2 K: P
' ]( d! f6 V; X' u4 g1 g, `/ I; V. X; Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# q; _( L, m& s7 Z+ J( \
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ G- S: Z8 P' l' n8 s, w. y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' l" y+ E9 D) j3 i% R( j4 m/ |
- T+ d1 C# @7 y8 K, C' g6 z$ D
是不是需要在DSP.CFG中进行配置8 ]' y( e8 s, U/ X0 P
我现在的配置为- R7 _$ d' x' z5 D
( n2 Z+ V6 O: |
/*. w: F( v, f1 G% s, |: \
*  ======== Operating System Configuration ========. h' V- K0 @# G8 H
*/
7 ^8 a# |; q- b5 Y8 d& r8 T# N
$ a6 g# [0 W( |, {' H/* no rts heap */4 R& Q0 i/ D" m* J. X3 F, s
Program.heap = 0;5 c: D8 c# N  n, _
Program.argSize = 100;  /* minimum size */
7 Q7 h+ m( z, P4 FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 V5 }8 _4 s8 M0 {, d! w
+ u# ?- i4 x3 ?4 w9 H/* create a default heap */
4 ^$ s4 B0 e) c7 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( {$ ?; T" P' w5 j: V
var heapMemParams = new HeapMem.Params();  L8 @3 v: H0 o) G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 }% \) x% c+ E+ h3 h2 k4 X2 g* }7 M  Y7 o, C4 q
var Memory = xdc.useModule('xdc.runtime.Memory');
, g5 Q" @& ~, RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% d& k  Q* Z0 q) w' t1 M) n
( a: A7 i, `% o$ [7 e+ f+ d5 D$ m
/* configure System module */
7 p- |' J* d& M+ T- ~8 T( D; S. svar SysMin = xdc.useModule('xdc.runtime.SysMin');: h# t# K; b1 ~& L5 p& D
SysMin.bufSize = 0x1000;
" v! Y6 B% W6 B' _7 K; ESysMin.flushAtExit = false;+ i" P7 ~5 C' w
* m" ?  j6 U: H  }7 V% d9 Z0 j$ z
var System = xdc.useModule('xdc.runtime.System');' \4 g% u1 W0 Z
System.SupportProxy = SysMin;
  Q3 @2 N: Y" P6 T
1 }7 f  B5 [3 a3 F6 P) P* K/* configure SysBios to use the lower half of Timer 1 */. P6 M+ }* ~+ k$ n9 a( Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ A; q  G/ X2 p7 D) j- ?* D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
( P0 w+ p' D" g! I" H+ y0 r7 n: ATimer.timerSettings[1].master = true;
: |+ `, K% _0 u" `$ m7 |* a! GTimer.defaultHalf = Timer.Half_LOWER;9 d7 D" C' @( L+ G1 V
Clock.timerId = 1;
0 |1 E9 q$ r% M1 }
/ M$ H7 [; m0 K2 u1 t* r
$ G# D8 |( w( b4 f/*' d+ m# Q9 X$ f' R; n7 K/ T3 c
*  ======== Miscellaneous Configuration ========- _+ E$ A( K" h! r/ @4 C' x5 f
*/
. J6 e# S0 j6 a, ?1 d9 o/ L- K; T) T' r( u0 ?7 G5 X
/* set default diags mask */  R+ {0 U9 f7 y0 t8 G  a& m
var Diags = xdc.useModule('xdc.runtime.Diags');
! k! K2 A5 q. `2 J$ A( Qvar Defaults = xdc.useModule('xdc.runtime.Defaults');4 h4 l  _" g. ]- L; ]& {: p, Z5 [

1 _/ w8 g% K* k* h2 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 \) Q7 P# Y  u5 A5 CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ r* u( V+ Z  K
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 ^1 A, r2 ~0 @( _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 ?. D/ i9 C' S/ S' z! u; ~0 K# dDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" Y* D, L- V6 h0 n, ]& w
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# z5 {$ I1 ]0 vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 g9 q# b  S  bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 a% E  f+ V4 h. s; uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% w# J5 _1 B7 H2 B: X0 {1 `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" R& F% }' p  k0 ]0 Z) v0 v6 S. ODefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( D5 _# v* w: r, t: l6 V. m8 Z1 eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 C( U2 D* g- a1 x  O- u' ?% BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ a# ]2 [  X# @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) K$ v  s: T7 p2 ~
5 U" ~1 \; |) ~9 z, L1 |% }/* override diags mask for selected modules */2 }: r" W& z4 n
xdc.useModule('xdc.runtime.Main');
( T0 A9 D! f) JDiags.setMaskMeta(! J) H7 z, z1 D
    "xdc.runtime.Main",
# _1 w* m3 l, f4 {% k2 o7 i    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, e7 ^- W! \) N6 n$ L/ Z/ O    Diags.RUNTIME_ON
4 c& Y  I8 @+ i. J0 O9 w. S5 b);! |2 h1 i) j. c1 s% x' q) o5 T. z

* i% M# L8 r) o6 _7 h: g; ?+ vvar Registry = xdc.useModule('xdc.runtime.Registry');
- d4 Y& ?" a9 Y8 ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- U, R5 ^) O/ f9 y1 aRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 u  c6 B0 W. b, F/ x+ `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 T; n0 a$ O' k3 z2 i9 c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. e5 V  C6 S' |! L3 k% L$ A- A% r' d, e! e4 I
/* create a logger instance */
1 J* J9 B2 ~0 |8 u( C( svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& t4 ^% {+ K; w; `- A7 Qvar loggerBufP = new LoggerBuf.Params();
  Y6 a) K7 v+ |* F' vloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, Y+ q$ c* b& ^loggerBufP.bufType = LoggerBuf.BufType_FIXED;; ^3 B  {; E) I5 K5 v" P
8 L8 A6 Z. {# L# y% q# E. X' Z
var appLogger = LoggerBuf.create(loggerBufP);
1 F- Y! x( Z$ S; r& J9 W2 }& S* BappLogger.instance.name = "AppLog_Core1";- t& I" B9 I" K) @5 t
Defaults.common$.logger = appLogger;
+ a! L$ t0 C0 W. ]4 |8 sMemory.defaultHeapSize = 0x8192;    " D( c9 S% b. b, P: |7 T$ D: J
Idle.idleFxns[0] = "&LEDStatus";& t4 e% b* j+ e3 Y+ N$ B
Cache.initSize.l2Size = Cache.L2Size_32K;
5 V6 M. ^; u9 G/ {" T4 j
: [7 M) O( r9 I# l' z1 N' }! m4 w
回复 支持 反对

使用道具 举报

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 */' e, q$ g5 F$ E$ y- t$ S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& h+ H2 U7 e; h( Q* G' i9 h( C9 Y% ~
var heapMemParams = new HeapMem.Params();# L" ~9 ~$ V5 {$ V; n) ~
heapMemParams.size = 0x4000;
7 L! R. B3 \: y1 j- |. x/ a! O/ A# o& v. X! E5 z+ l# a
var Memory = xdc.useModule('xdc.runtime.Memory');5 U7 Q* f! p; l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; ]1 T# z! Q* D5 |% ^$ l

& b& A# s# a4 ^& H  h- r! K6 k; c7 g. a! R我大约calloc  每次共计大小为5K*16bits,
5 O1 X9 X4 {' v. z, z而默认配置才0x4000、需要改大。* V9 A& r9 H' C8 z2 P' q3 Q0 `

, U1 K. j" B- h5 Q* }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 @4 s% \! I. i4 R+ P( P5 m: sProgram.heap = 0;( z5 M- A, [# s! ]$ `) w
Program.argSize = 100;  /* minimum size */+ I( u5 v! b, c  `3 Y
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-18 20:56 , Processed in 0.043312 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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