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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

  [( L( B9 P+ }& S    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 i8 ^0 y# o0 }  `# C

. h* A7 `; a4 P) ^* D, q5 ~其他程序段。。。。。
! ^5 C8 B2 g( ^
# @' s2 W/ Y. x, p' S& {   free(x_d);9 {7 u9 s! t  p( M

7 q& t* ?, O. e: b# d使用DSP侧单独调试功能,验证动态申请没有问题,
9 `8 Q. O* s, H: l
' O5 v  f" R% Y) v# ]! t' Y7 T但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! Z9 G' R/ o, V7 C- [. t8 L" t
7 N( I4 q/ G/ H& R/ m

2 a0 |) K# F7 t! Y: C2 y1 r4 I7 Z6 m5 t0 i
$ o1 H9 {7 `# ?2 Q0 a

+ `, }4 @' c% T+ E' g. a0 m- i7 F3 \7 Y, t
- `8 x( |: e/ M% Z4 k* ?1 J/ J) a

/ ~2 c# J, O5 z8 D3 F# K1 q. U3 X0 Z; h% a$ ~0 @3 g) ?
. q  N+ s+ W4 R- x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ G6 ]4 m! X7 i5 q! Q( I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, O  G# b  R! b2 @; {
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* u" e) ^& S# ^$ P. J
& u+ G  u" E0 H  G' n  `$ X$ q& H
是不是需要在DSP.CFG中进行配置
' m/ [& l: a" G6 b, e/ V. y7 p0 S' s我现在的配置为
7 S4 m2 G* Q& u; o1 P' a
& x4 q7 L6 q9 S( |$ L; S: X7 u, @& t/*- q" T7 J4 I! t- W
*  ======== Operating System Configuration ========: r' z! b1 [; Q) @4 T
*/9 ?7 G5 l, [1 m4 h1 d' D7 i4 r

; y" }. \) C$ ~3 W) a/* no rts heap */
9 z: f" U7 w3 g- p+ H8 Y( j- C8 F. ]Program.heap = 0;
9 q; F2 Q  E" v  ]- }3 ~' F1 LProgram.argSize = 100;  /* minimum size */' K8 J! e5 n; u( [8 L4 l4 {7 w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' ^- f5 g2 w1 L  L& j5 }

& W& N. Z& m; ?% q2 I! l9 t& s/* create a default heap */# F; U; Z0 p, G& g5 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 s; {7 z1 s' {3 p- z1 J; ?* S+ v4 O
var heapMemParams = new HeapMem.Params();
; B) S- M6 v0 N; {% EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! p& E9 j. i" ~2 y- `

. z! C" n( g) r1 `+ k; F
var Memory = xdc.useModule('xdc.runtime.Memory');( _) a# q: @" C! [' g: B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) y0 \$ ]+ t0 x* S6 c+ h' |$ Q7 _! `3 K7 r0 u
/* configure System module */# R0 q, D) E& V# D& ]+ l" V
var SysMin = xdc.useModule('xdc.runtime.SysMin');! l% O3 L0 P6 G3 y5 {7 T0 c0 i
SysMin.bufSize = 0x1000;
  C) f; a9 m: h9 ?, d% ~2 q; dSysMin.flushAtExit = false;
( p3 ?& r( T* K/ j: q5 T! S2 O$ U( D9 R! F
var System = xdc.useModule('xdc.runtime.System');6 S0 h! Z! m& r
System.SupportProxy = SysMin;
0 Z1 F5 {! I/ d9 \) \+ B
# s; w" V, w! _# Y+ V  H3 s8 a1 p/* configure SysBios to use the lower half of Timer 1 */
: i: W) E$ P' nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- `, ]: P' z# u6 \9 y7 p4 avar Clock = xdc.useModule('ti.sysbios.knl.Clock');& z( c8 Z! ?+ Q- B( |3 L
Timer.timerSettings[1].master = true;
3 A! D+ i, z2 p4 vTimer.defaultHalf = Timer.Half_LOWER;
4 o) K! ]6 D2 Y( a3 j/ UClock.timerId = 1;
- U: R7 H) ?) Q+ h7 g
: J) M3 J: D# D/ c6 L' r
# e1 X, C6 G+ c5 N4 _" b; v/*/ g1 L' k' c. J' A: L+ I
*  ======== Miscellaneous Configuration ========/ T# Q! I; O" s- t) [
*/, U6 k6 f* T1 R- r* I; F0 e( x  b
( W) d0 {6 a* P
/* set default diags mask */
3 z) C2 {4 @. ]var Diags = xdc.useModule('xdc.runtime.Diags');" M+ I1 y( x3 |( @  q8 M
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. U3 n0 U% U( D; V" M4 A4 U
- {% q2 w/ o6 F' q, |* U* ~( iDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! Q# @& O- r. q  i: d; _' v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ }" I! C# R' o/ j, T8 c6 [& bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: N4 M: F) H8 N; b) lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* a% P- T3 I8 g: j/ {& R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! N* a8 |7 w5 |+ g. [) S. \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! ^( ?! C. k! z4 aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# Y. m( a! x9 y" |% ?* I/ o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 [% ?8 F) D: t* _, ^* P" J  T" j
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" y+ M+ w( O+ J9 ^& g- n- DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ ^  z! @4 M8 x* L6 pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' ^  I  {7 A; [; \
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! p- z8 Z, h8 c7 Q9 b7 }- T; X5 M% {/ iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 j" c7 c. s; A, F9 MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& ^7 p; R: l4 Q4 q$ K
+ t* n  Q* j6 F5 `
/* override diags mask for selected modules */
# D. H1 ^+ z" V! b' Vxdc.useModule('xdc.runtime.Main');
, \% S# m1 M  U/ _5 vDiags.setMaskMeta(
" k# i0 F, b" [    "xdc.runtime.Main"," X5 K5 f5 @8 @& p: U
    Diags.ENTRY | Diags.EXIT | Diags.INFO," G% Z, Y) O4 {6 r( ]7 H
    Diags.RUNTIME_ON
8 g, `% e/ ?6 w$ Z, S);6 W2 n! L0 A% @4 c
3 _1 g; \3 P7 z8 l" L, Q8 L
var Registry = xdc.useModule('xdc.runtime.Registry');
0 X0 U" O4 V2 F+ n) s# y' N, u0 WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  i) Y& u3 F$ w: w/ h  k. Y+ hRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 O* u' t% K, j7 K6 _8 H
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 R. B/ K- a* G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) d, ~" T. K* ^/ H

0 m9 A0 C: w7 d' m/ y/* create a logger instance */
7 ^6 T$ I6 E; {3 P% ~var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 ~; J+ `5 J% Q, k5 `9 evar loggerBufP = new LoggerBuf.Params();
. I0 E  I  a/ h7 jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" s: b$ ?9 ^# m) G3 T; A% g  yloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ G% m; y- [/ Q6 S( H8 _- x1 y& B: S' U! @
var appLogger = LoggerBuf.create(loggerBufP);
. ?! L/ A8 `& M1 @appLogger.instance.name = "AppLog_Core1";
, x2 B, G- i3 V; PDefaults.common$.logger = appLogger;+ ]( C4 z$ L/ t1 ]
Memory.defaultHeapSize = 0x8192;    ' h2 c* u  N' j
Idle.idleFxns[0] = "&LEDStatus";
. V$ l+ ]' G0 ECache.initSize.l2Size = Cache.L2Size_32K;5 _% ^( O! a/ C- q
0 {* O" x9 ]. _' T" j5 z2 [/ l
回复 支持 反对

使用道具 举报

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 */+ q- V: S+ u3 I) A# P" J; Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 Q( p: L5 ~! X6 m0 k( dvar heapMemParams = new HeapMem.Params();* b8 B" A7 w3 C# J; m9 Y5 `
heapMemParams.size = 0x4000;
# ?$ D9 g2 O5 k0 K0 w% J" K5 r' ~" ?- R
var Memory = xdc.useModule('xdc.runtime.Memory');
/ J+ t1 D! _$ y  t, MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# |& z6 o4 `3 r, v) V! c  }
" z/ x7 v" w1 E. ?我大约calloc  每次共计大小为5K*16bits,
5 d: K1 R$ c% B9 G2 Z+ O而默认配置才0x4000、需要改大。
8 d! v3 b, F( C& T0 t4 @$ s$ w
4 ?0 r' Q; _" l- y0 B: i$ x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 M" |  I" ~5 n, X, n! Q9 N* @Program.heap = 0;6 ]) M6 T2 B$ @. ]/ g9 e
Program.argSize = 100;  /* minimum size */
( M! p' l* D% t8 `/ GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 20:13 , Processed in 0.041645 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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