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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ d& V$ b7 @" f0 D! I( Y7 W6 l0 D1 @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 ]* @. L3 d8 |9 P/ |' h: W2 P2 `2 L* \
" [1 H; \5 [. J/ y1 M其他程序段。。。。。
) F' K0 I, O  p/ u7 J7 g2 A3 W- Z9 E, n
. e, F+ j3 ~( ^1 g* n   free(x_d);
' N) \1 k7 H, Y2 [6 b! c3 j" A
' Q# b( q- F2 U1 c使用DSP侧单独调试功能,验证动态申请没有问题,
9 x$ E7 h0 m  D: A* N. y. }8 W
' g& Y8 B2 `& U. ]8 {- B4 f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# |6 F( A9 c2 t" o/ m1 x

/ i4 {" ?9 G* t* ^, u5 Z; f8 z$ q/ v/ s
7 W% I* g( C: v# N% E( r* L

9 g: y7 l1 `0 `* L. L7 o
! e: @- x3 m& S2 D- m' }$ J
& E; E, p* Z4 g6 K, i0 c
1 N" D4 q& K" w# D
( X% B& X; @1 S' |1 e& U* d
. K# b( y; W( `' d  Q; I3 y. ~: a+ |' j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 y* ]+ @3 b) @) k  i7 o) ~我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- _& M" ?2 Y  N7 _: u(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& v- G% x' B& {9 s! l
7 T  f& Q" B( m1 j( l
是不是需要在DSP.CFG中进行配置
3 A0 Q' Y. R+ s, c我现在的配置为$ v/ [) u/ P$ S; Q3 a% E( h

2 H6 |" n0 Q( I" Z9 P/*
, n, v1 D" n: m2 T6 v *  ======== Operating System Configuration ========1 x6 o: Q. u$ ^) L' }; Y' U
*/
( h; ^2 A. u$ q* ?; G: e, z3 q1 p& l+ [, q
/* no rts heap */4 v  v' E% P4 `8 n  G
Program.heap = 0;
3 ?6 ~9 q1 N* X; I( fProgram.argSize = 100;  /* minimum size */5 w* c) C4 z. z, ?9 s* ^2 N
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 \. j' d. r0 h" p# [
  I/ ]4 m8 A% t" [( s$ @/* create a default heap */# p' O) y- o% w! M# o' \9 a! [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( ]0 R' E0 d: \
var heapMemParams = new HeapMem.Params();* K+ h' x- S, \* ]: U" y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! r3 b  b0 |, |' L3 u% v
3 B& ~/ H1 o# W/ I. o
var Memory = xdc.useModule('xdc.runtime.Memory');
6 T* G6 ^/ V- r* b: qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ G4 o. r; n+ J6 I2 ?( U  W# u( `2 T0 A3 P/ B/ Y( y. x" f
/* configure System module */
( O6 Q; Q  Q8 Z2 f0 \var SysMin = xdc.useModule('xdc.runtime.SysMin');
6 E/ b) b" Q8 q" [% z4 tSysMin.bufSize = 0x1000;
& s6 a: k& v- LSysMin.flushAtExit = false;
2 Z# `# e3 S0 p" T4 F. Z9 W' u0 s2 `5 x1 _; M: z# B; o
var System = xdc.useModule('xdc.runtime.System');/ V0 T5 d+ E( y% Y+ P$ _+ C
System.SupportProxy = SysMin;* N! j% W% F* L4 d

! d/ h, A6 j( m3 ^3 h2 z8 u/* configure SysBios to use the lower half of Timer 1 */0 n8 p0 `  A& T* K# }* v% O4 L
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 H# }6 h* ]. e) h% V! U3 O0 q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 n: v% k" V( \, x- Z  g* W3 iTimer.timerSettings[1].master = true;6 _. V, d2 w# ?7 E8 P
Timer.defaultHalf = Timer.Half_LOWER;/ w2 z5 X- k) `+ V3 B; O
Clock.timerId = 1;
+ H- b# v% E) T+ \: d0 u) w' T* m/ ^# Q% d, W* B) h

  k/ @! K' R: B; t+ `" T/*  P; V' N7 B0 U# Y) [( d* F; Z
*  ======== Miscellaneous Configuration ========% m* g; z: {& ?. P1 k9 z$ ]
*/
/ ]1 K) U! T6 M  y- _+ w/ Z. J! Z: k9 [9 {3 ?
/* set default diags mask */
% i, I% {0 _# Dvar Diags = xdc.useModule('xdc.runtime.Diags');/ A0 H- b* ~- [3 b% J9 }
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& }5 m* Y' f5 ^/ e- F! O4 z; d" M! h# g! j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: S1 u# u& b, x" C# I- T0 \
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 X' ]" A% }! Q3 |, s1 o3 E4 q, g1 UDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, q/ t0 h' f8 ~; s
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ {* h9 f: K+ H4 z* {" r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 T) I! q/ p' g3 c+ K* {% c0 WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  [3 ?# b# p& c) T3 z0 W. R; P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 n0 l. |/ ~/ ~8 G0 y3 aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, ]* M/ g% U% H+ GDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 u1 x' t- L. _
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& J/ V# f' S9 R2 J* |+ V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* Y. l' C8 h6 A" N' M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, x( j1 O5 M8 C; }- Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 b4 n" @; e% D& F0 N- w& RDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 y2 Y, ~6 d* x" z. A* s( A2 N& J' s- z" C' _
/* override diags mask for selected modules */, o  k2 t* E, P# m2 L
xdc.useModule('xdc.runtime.Main');
  ?) x3 K/ O( C* _Diags.setMaskMeta(
, Z' A1 E0 P+ r" g% }    "xdc.runtime.Main",: Z, L7 _" l/ R8 H: o5 F# Y) ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 q' v' |1 ]% ]7 V2 u2 c
    Diags.RUNTIME_ON$ S# j" p4 S' i, k
);
4 A) I% {+ n# J* d! c
8 n; M0 V3 E; p6 a7 |. Bvar Registry = xdc.useModule('xdc.runtime.Registry');% Q$ i+ R) t0 Z7 |# k
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 B+ e/ z+ {3 m: k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ a- [" f5 r6 }9 I5 H
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: ~2 D2 [& G1 j& |! U
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 p1 |8 i( C) [* G: E. A
5 u, c. `+ [3 _$ |8 P; ]/* create a logger instance */
( @- f/ p  ~2 w2 R. }  o/ s  uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) o- {8 J$ q( z; E
var loggerBufP = new LoggerBuf.Params();2 g+ E, F- S, u' z: c! ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* Z( X. R) o0 x0 V3 c
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
! a; N' {7 W' k+ N3 y. K; ?  K: c, p6 s
var appLogger = LoggerBuf.create(loggerBufP);
0 m4 F4 b% L# A( n% x' dappLogger.instance.name = "AppLog_Core1";
8 f: K# \+ q' q) `9 @0 jDefaults.common$.logger = appLogger;% Y" e4 e+ ?0 C& G
Memory.defaultHeapSize = 0x8192;    / m4 U) T- |8 S( X" j
Idle.idleFxns[0] = "&LEDStatus";: w6 m3 M2 o, X$ W% o% O% w1 t( L
Cache.initSize.l2Size = Cache.L2Size_32K;
5 C. a. Y$ w8 X& R2 c
* u0 s+ `8 Y$ C1 y* ]6 |
回复 支持 反对

使用道具 举报

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 */
, h+ J. ]( K" J6 q, B3 Y6 \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 y% t" p0 ]$ {- o, a; O. P1 \var heapMemParams = new HeapMem.Params();% u. N  Q( w% o6 C- S% _. b
heapMemParams.size = 0x4000;
5 L* ^$ a$ ?! f3 S0 J
4 r& _6 j- v4 w1 @" |, \* ]var Memory = xdc.useModule('xdc.runtime.Memory');
$ z# X" S) s( ~! zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ T! D8 d, w# B0 M% M6 U
2 z' p9 C+ Z. T
我大约calloc  每次共计大小为5K*16bits,) R$ R$ A2 k0 G3 N( j
而默认配置才0x4000、需要改大。5 S2 D2 [# j9 x! v9 B

. t" h/ I+ c% V, I9 P% U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- Q$ X& p8 A3 D; b
Program.heap = 0;
) w1 y- ^# b/ A* ~3 y. hProgram.argSize = 100;  /* minimum size */# {1 }* x8 C' W; I7 H. a4 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-1-22 01:16 , Processed in 0.044911 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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