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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% L7 U- H& B/ `8 L$ m0 D1 A) @" H
+ h* V& k5 W7 h: X: H$ W( z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 v& x/ Z0 F$ S( N  `9 e! a. J( i. V  x* h* a7 ?
其他程序段。。。。。0 V+ b% G. b+ O
+ r" q( ]1 @" a9 b7 g
   free(x_d);
5 `6 t! l3 J" a) G) E; C% B# ?2 v6 _/ d( z5 Z) |
使用DSP侧单独调试功能,验证动态申请没有问题,
% c/ x- y" E0 G; I( M& M! G" p0 m
" i- k$ U$ }- ?4 X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% L( X! Y% D( k) H7 l3 B7 c3 y

2 [5 u7 `8 _& v  p* R/ C# m7 a+ V3 J# I" K

& u! G2 g) M& |8 v0 r1 `  a# E0 K& g6 P6 N. v' L" S
+ w' K5 a9 _: A+ B3 l' g  ?+ V- l

* q* S8 `; T7 Y) m" s# F0 d$ j. X" I& j' Q4 G! g. X" \# _( [& R
! ~3 m6 @" U6 L
" T4 d* T& T# D6 A0 d! y
1 f$ @& n0 e8 ?7 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 `3 N( w+ l3 e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  `7 S& \+ E; }% V2 {* u: V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 W/ @# `! ~- B0 u5 X
0 j% Y+ F. b- R8 R$ D7 A0 n0 ?9 Q$ B
是不是需要在DSP.CFG中进行配置
; v6 v/ A8 Q7 M我现在的配置为, f/ s1 x6 H$ p* R0 s
- h& z2 s) b/ ~& b/ n9 P
/*% o  n, _( V' |
*  ======== Operating System Configuration ========/ w" X) e4 P2 F, z( J- w1 h( g
*/
( W  G7 |. p( u6 v# C8 W
' o2 {) F! w0 o% @+ L/* no rts heap */5 K% a4 P( D8 G% h# C6 r2 l' q
Program.heap = 0;
  b; S# i" Q  T% J( T; \% }Program.argSize = 100;  /* minimum size */
% Q$ b6 S( V+ m+ ?2 z4 j  C3 ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  e3 B# h* k2 E- @* T
  q2 j" F! O6 C8 j  ~2 C
/* create a default heap */
- Z5 Z, R0 j7 D1 ?$ H# ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- T* p: ]9 d8 {% @: zvar heapMemParams = new HeapMem.Params();* g( e0 Y. F* O/ T, B+ M! V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  X* _) |& H* ~% k( Y# M3 }5 w% ], R, w3 {; |/ M& V
var Memory = xdc.useModule('xdc.runtime.Memory');
3 w8 \4 |, L- d8 [, {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# S: t0 ?* T5 O( T8 H0 z7 a) ]% e( t! |, t
/* configure System module */
+ q2 T2 v9 S& U7 l6 Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');  w- `) u# n( A
SysMin.bufSize = 0x1000;
- D9 J* V; x3 @# m5 {* ]/ hSysMin.flushAtExit = false;- F( P  ?" u5 S* C

" k" H: a  ]0 l; x2 jvar System = xdc.useModule('xdc.runtime.System');- p) O; l# C2 i2 n8 H
System.SupportProxy = SysMin;
6 ^  ^! h. Z% y; v/ N: p' q, ~" X" X8 P9 d7 B" z
/* configure SysBios to use the lower half of Timer 1 */
" P3 j/ m, k; ]- _* H2 T' gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 R' z3 I& |" e: t2 s0 O+ ^* y- cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');8 J8 a0 \1 v2 Y+ Y4 I
Timer.timerSettings[1].master = true;6 v; ^) T+ j3 e* k. e: v
Timer.defaultHalf = Timer.Half_LOWER;
( O. m" j% F- U  S" F4 h! a+ J6 Q1 D, nClock.timerId = 1;
+ \+ z0 X! a7 M9 }6 x0 H
4 w, I4 j8 A, w0 Z0 P) |) J
2 c8 |; _/ ]1 e, }/*: Z) c% z! d" v% R0 b% p/ G
*  ======== Miscellaneous Configuration ========0 w; M4 R5 @* r& ~
*/
1 K( l0 B1 @* H8 k' P1 J0 ^; l3 @2 b' w5 f8 u. K# x, c
/* set default diags mask */
# A/ L8 V4 P7 |; o! J4 Uvar Diags = xdc.useModule('xdc.runtime.Diags');
) E2 @( K" O! i$ C( a4 kvar Defaults = xdc.useModule('xdc.runtime.Defaults');0 s: a( u* ?" v# J
3 i: E: o! k8 J2 o' I6 W3 C+ U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 J; t* M) s. ^; Z: s8 M4 _" ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' x* Z( y3 F$ X8 Y) I3 x7 p0 J. Z+ F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- n; H, D) _6 v1 \
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ z6 v/ ^) `1 u! w! Y& G" Q4 `7 t/ z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ A: v) G- N% i, L9 t. bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* _" g0 D! P3 W3 d: r) D5 T9 I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. p, ^4 e2 y9 KDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 [$ B0 P/ u1 ^( F, W* T3 h- }/ R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! I2 ^/ J) J" gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; a5 K8 Z2 ]4 V7 T' hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: [9 L- W: c: d# x3 N: Y/ ?6 u8 rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: H# y% M" }3 b4 S, ?3 e" ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 N  E- Q2 \1 [4 ^  t9 g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 d9 o: R$ c' y: @3 A+ g7 o+ e
! t7 f  R( M& D3 ]0 z8 w: g% Q& t% S- O/* override diags mask for selected modules *// N, l& P, ]" W4 _- {9 y+ h
xdc.useModule('xdc.runtime.Main');
2 b2 a( j. F: w. ^7 {' w& KDiags.setMaskMeta(
/ }5 P/ _# E( F    "xdc.runtime.Main",( v5 F& [2 N4 F( M
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' S6 p% L# a' l, R+ v+ t    Diags.RUNTIME_ON' u% R! Y" G4 ~5 L) O
);3 m& K. u. m' ^5 [; K; r2 n

5 [. p; G( m2 i  i8 Lvar Registry = xdc.useModule('xdc.runtime.Registry');. M' G8 s3 W8 g% ~, H8 a
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 L% V2 |; r2 A4 SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 ?% j1 u" \1 r. P) @# t  f: |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 r: \' e4 B  M  g' Q6 R. n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: m; b9 g' v" d; ^8 `5 C, X% w6 }: u9 ?1 i/ @& N
/* create a logger instance */( i) u. ]% ^. V+ G. O' L4 s
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& M/ D  c8 o" f0 e( t7 B! `: u
var loggerBufP = new LoggerBuf.Params();
) r- W) O4 B0 JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" {. s2 Q! T3 j; O* @8 HloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 S2 g* N$ [$ j
7 ?' m2 x5 G2 [
var appLogger = LoggerBuf.create(loggerBufP);# F' A" ~. E! e/ c' V6 x6 G
appLogger.instance.name = "AppLog_Core1";3 o( J* X% L# V+ H* l5 T  S8 e5 d
Defaults.common$.logger = appLogger;" d7 v  `2 A# V& J* m
Memory.defaultHeapSize = 0x8192;    4 W  b5 k' A9 ~* L2 W4 L$ v+ }4 C
Idle.idleFxns[0] = "&LEDStatus";! ?8 _7 Z/ u( u1 M* R" i' m
Cache.initSize.l2Size = Cache.L2Size_32K;
! R+ p, H1 s# y/ B3 |* h0 @5 \/ Y3 ]% n7 Y0 }4 f, V$ g" m
回复 支持 反对

使用道具 举报

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 */9 i! @+ y' \1 f$ g7 |  l( W; \$ V/ `- Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& u! Q1 |5 K4 ]
var heapMemParams = new HeapMem.Params();
0 f$ K0 }: a4 J; zheapMemParams.size = 0x4000;) ]# M! \% b) |

3 A- @3 Z2 O* H8 ~var Memory = xdc.useModule('xdc.runtime.Memory');
1 O  O( s: x0 T* u2 J# n  H' L2 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 {! |2 g# V+ H3 y  \1 y" u6 _: A) j$ [8 f: R4 M- P
我大约calloc  每次共计大小为5K*16bits,
( x9 g6 x/ ?) o3 G) b6 M而默认配置才0x4000、需要改大。$ ]! S* T0 Q6 r- @
, k7 V6 c2 t4 v% q- n* ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' x: N  s1 r$ V  b1 n
Program.heap = 0;# t, E  j. i- R: c; R! R. t
Program.argSize = 100;  /* minimum size */4 E$ {+ O  i5 ~7 t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 00:40 , Processed in 0.052411 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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