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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 }% z) \9 s/ j8 `2 Q' H

! a# g5 u: ~# i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. w. r9 l1 D2 {+ Y$ y+ k" z/ A& a# ^- \3 [3 M4 _
其他程序段。。。。。
- L6 [5 \1 ~; A+ b4 o7 N
! L" _( F+ L9 T   free(x_d);
- ?: A1 _% h2 H3 G/ R7 v: q: z7 e  E: Z5 ]( O3 F2 S! b
使用DSP侧单独调试功能,验证动态申请没有问题,* h/ R' v1 N" F/ R6 L- V% ~: ]

  i- I7 U3 N- w1 h8 ^. A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 b) J, z* a: e4 y; W
2 @* O( a9 u- p/ H  L  k
  m3 q' z( J  E3 _( }% A- v
$ x2 B; {% g0 z6 S

2 b6 l& l% _* S# Y' F: m+ @
' W# j9 d  y! d
# Z0 E/ [6 }1 d7 n: Q' Z$ y6 r) J! s+ f! b
8 q2 O' u$ o5 \

1 T% F/ P, o4 v6 A- O) `
- p7 l# W+ P+ U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ O0 G3 w! C& H8 `8 R: Y# a" V; C+ y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' |% J- C( t: P. V  i% O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): l+ [- X- F! o8 F- i
6 p6 U; u" ]7 Q; @; P
是不是需要在DSP.CFG中进行配置7 @, T: Q" d+ [, a% ^% G
我现在的配置为( b- u1 D! V, r) z! U% |8 S/ B! v

9 z7 b) H, o% h0 f5 {  u. W$ z/*8 |9 J  ~. H; j7 D3 b  E* x( D5 _/ u
*  ======== Operating System Configuration ========8 x* A7 i$ a' ?4 H) M$ T
*/
# H; {/ b/ G/ I7 B0 }5 h
" ~+ A8 v; t# F# g5 W1 I5 {0 {/* no rts heap */
+ h! K1 B3 x0 X" _& Z; aProgram.heap = 0;
5 P* K/ P* Q3 T& m  W( JProgram.argSize = 100;  /* minimum size */
/ E* M& f5 r; p5 ]% T" P& k0 g1 `7 {Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: D0 i1 c( o7 I6 O2 ~* N, l6 x( S. p. a! K! |
/* create a default heap */
/ `& _" Z" {: E$ u0 o+ j0 |+ I7 Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  R" c) E% }* l  n
var heapMemParams = new HeapMem.Params();
9 v1 f+ P) F; R3 ]heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" X. V5 G9 S/ e* @% V1 ?; t( F- |0 E; q( _/ U$ [3 n
var Memory = xdc.useModule('xdc.runtime.Memory');
5 e( a# r- e" e  DMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 Z2 ]/ s/ b- ~0 N( `( m' M9 |
& N; V+ }  U# p
/* configure System module */
, o; e. |% a; m+ p- yvar SysMin = xdc.useModule('xdc.runtime.SysMin');. N9 z: O$ m1 y7 I7 X$ v2 w
SysMin.bufSize = 0x1000;, K- k, u6 q0 R4 x; ^
SysMin.flushAtExit = false;/ L' u* v: \0 [1 m
- R" N: E0 U% n& A& O/ D1 V
var System = xdc.useModule('xdc.runtime.System');
$ F$ B9 W7 S; k6 _+ YSystem.SupportProxy = SysMin;/ ?; s4 U' l  [# }5 T9 D( @) a

7 V1 w, {: H0 W% L" n/* configure SysBios to use the lower half of Timer 1 */( H( i) @+ ?: v/ o& Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( Q: J+ t: h# \! q8 _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ U" T% [6 D: ^* c( ^
Timer.timerSettings[1].master = true;
  c5 v" V% P5 \- u$ U% jTimer.defaultHalf = Timer.Half_LOWER;3 E, D9 B( T$ Z2 v
Clock.timerId = 1;2 W/ N! A" z: N# ~; T
& T9 c% M/ d8 g: e& r# Y

& \0 K9 q( ^2 }& l- O0 \% F) j/*
1 ~+ I4 L' \: q *  ======== Miscellaneous Configuration ========
* P: z' t5 G: M: L */
3 e4 o" o$ s; x7 j: N, X* g+ \7 a( r
/* set default diags mask */& f( e. b# F  F
var Diags = xdc.useModule('xdc.runtime.Diags');& A( W2 @9 Q+ N9 ]6 t
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 s( T1 H5 P9 g7 i
5 J7 Z/ w3 P& }( KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* q6 B" N" H9 V7 e2 {, k
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! p) S' U6 l9 {7 r$ m7 N) ]
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. y7 d* v5 y. }5 M' [: n+ ]Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 C9 X+ Y3 C  y4 \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. J3 n* t* F# }# C2 w
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 @: N' h7 \2 C! _$ t
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, b+ r1 ~+ i8 b7 }. W  P& [2 r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 T* V# w8 J# h+ R( z5 G1 YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) m- o9 c2 m9 O% f$ Q6 N; S/ ^2 vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ j& W5 N1 C  s4 IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. `+ z* ^/ H2 tDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 g1 e- M9 \9 _* h, [( b
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; M! \  m4 v6 C# A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ e& C$ y0 \) E9 O0 I: h4 D
; C5 b8 D0 R: \+ q4 O3 ~4 O3 F/* override diags mask for selected modules *// i, t  a( e+ }& }( F& x
xdc.useModule('xdc.runtime.Main');! O% j0 k, e5 B
Diags.setMaskMeta(9 u0 h, |3 Y: `: o8 `
    "xdc.runtime.Main",
5 r% b  w1 d7 k( Y7 |  K( O9 K    Diags.ENTRY | Diags.EXIT | Diags.INFO,; f! |8 S& ]* Y4 r2 M* ]
    Diags.RUNTIME_ON1 d8 S8 O. G/ o2 W
);
% N& G% n. B0 r. h
  G" t  I; F) d  C& d8 uvar Registry = xdc.useModule('xdc.runtime.Registry');
0 `# F7 w: d- K! u9 |# xRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! f+ C( W- l+ J$ F$ f- N7 S9 F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 J/ W+ C% o: M# u- yRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 i& I* m+ b" U' M$ P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 c, ]5 H8 @& p2 n; B6 p& G/ y
  k) K% f& C) D9 r" X7 s
/* create a logger instance */
( Q" V9 O3 R8 F9 @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# D+ o7 n1 l% ?8 H' [) fvar loggerBufP = new LoggerBuf.Params();
/ r2 I" Q6 ~% o" {( sloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 ]" K. I* t- X) p  E; uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! j6 M+ G- P  v- e' g5 |/ P* X0 L$ X
var appLogger = LoggerBuf.create(loggerBufP);
; k- Q, v5 ~* V; }7 |$ m/ vappLogger.instance.name = "AppLog_Core1";
- x' a5 l0 D8 T: Y2 F7 G; aDefaults.common$.logger = appLogger;
. F  o# K& M# W  [! t) {. JMemory.defaultHeapSize = 0x8192;    $ O4 t' j7 s0 ^; Z1 e1 v( k2 p
Idle.idleFxns[0] = "&LEDStatus";
# j0 m) I+ `4 O9 G% uCache.initSize.l2Size = Cache.L2Size_32K;" F7 J* I7 z) u# a
+ G. v1 Q0 n. q3 c7 z% [- }
回复 支持 反对

使用道具 举报

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 */
( A1 M: H0 x  [( l- S4 Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* ?' h% a" X' J  n% o" ^9 q* ~0 `
var heapMemParams = new HeapMem.Params();* l" p: i/ V. c, i/ T
heapMemParams.size = 0x4000;; D, a" o, P2 ?* Y& c8 u2 ^
4 v( N7 y- R9 d8 R! [
var Memory = xdc.useModule('xdc.runtime.Memory');1 w4 R5 B/ [0 r  ?# c, c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* ^$ [* v5 Y% P: I8 ^/ Q& {( _
$ h% Y( v' f2 ]2 t+ F8 ~
我大约calloc  每次共计大小为5K*16bits,9 ]  L7 ?& ?* M% w$ ~# ?% A4 ~: d1 i9 Y
而默认配置才0x4000、需要改大。% r7 W! }: X: E5 _. W* Z$ S
; J2 _) @' J6 v0 f: h$ \. ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; x7 A( J4 n/ H1 [9 BProgram.heap = 0;
3 r+ E( h9 h! J0 Y, m  YProgram.argSize = 100;  /* minimum size */, `4 n- m4 \2 m5 ?; r7 u4 K# q; ~
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-19 12:27 , Processed in 0.041234 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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