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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 Z& n* C( R) b2 o; y  }3 D4 {% ?: C0 U/ k2 j4 ^5 e
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! q0 d. |, \% Z4 K% P6 m4 J+ s6 Z4 I1 m. X: P" i$ Z
其他程序段。。。。。5 |. f9 H2 v2 u) B

* c  g7 M% X* V* g   free(x_d);" E! Y3 [! w& P: ~" ^2 V
, b/ `& U/ b+ [1 i
使用DSP侧单独调试功能,验证动态申请没有问题,. t3 K& K& p: u! c! f' Y' E! Y

4 A' v+ Y2 [; W) k" F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ ^# d2 u4 S  D  r7 I
+ Q4 T6 I9 `8 y

# L) `  R% U7 x4 V+ t4 D: s# Y* ?8 Y. U

" j. ?6 c* u  l0 b5 }9 j; e2 j2 N- b; ^: |0 v0 M% t3 j
2 p  W/ S/ g: N9 d2 X

$ Z8 A0 X4 o, H% T( l4 e" z& [! d0 K! y) z

: k/ e( j  U6 K  e, Z0 p
  w  H$ R- a& o' @/ W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# W+ J+ [3 O' h2 l$ b. ~Program.heap = 0;0 _5 m1 A, S" v9 W2 v5 @) c
Program.argSize = 100;  /* minimum size */3 s7 |# ?2 @" h  r; o
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */4 y1 l' K# V- _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) `/ ^( d% n' Y9 X1 B- W6 ]& u) Rvar heapMemParams = new HeapMem.Params();' w" j. |' |3 g
heapMemParams.size = 0x4000;, O8 U/ `# s, G0 T( h0 q. k" `# S
$ s  Y2 R, @# w, ?' p
var Memory = xdc.useModule('xdc.runtime.Memory');& V1 I; O7 k( a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( d0 o/ j/ U) L
$ R  N" e% Q" r
我大约calloc  每次共计大小为5K*16bits,
( A  P$ E( f2 o% p+ {而默认配置才0x4000、需要改大。2 f! y; ~- m7 ~, o  c
! W$ ]& `1 \' v+ u1 r  x5 P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 g; W& G2 t5 ^$ H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( f: E, i# L  D( @0 \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: d1 \2 U: P; Z$ Q! y& Z6 O8 G( H

0 H( Y4 ^6 w( H) a$ A# l是不是需要在DSP.CFG中进行配置
* O+ w0 \6 K- M0 ]我现在的配置为
; E- w: s3 [# D* A, I7 b4 s4 k9 ~  P+ I2 b2 e* d8 u! M
/*
* k4 \6 K% T7 F" M *  ======== Operating System Configuration ========
3 J) K7 P* w% ]# V/ n& e7 l */
/ e% G0 y5 `' ?4 w+ R3 y4 F; m2 W! w! `  \& T: u; L1 ?+ l
/* no rts heap */
  P, b5 [  w$ CProgram.heap = 0;
" ]& n5 u7 L0 t8 d# W9 AProgram.argSize = 100;  /* minimum size */
* i8 f0 |* x9 O: I0 l! i; C  xProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- m6 F" _& z" k
3 G/ t6 _; R$ Z/* create a default heap */
7 [1 r  {8 W6 dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. j( ]# s% T: v0 ~+ v
var heapMemParams = new HeapMem.Params();
/ Z- D. [! g9 Q- X. _& @heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% E" D; N# [' C, H; F/ N
6 u' A% ~, d3 t8 k' R/ ]1 J' ?
var Memory = xdc.useModule('xdc.runtime.Memory');3 d4 p/ U+ u2 X/ I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ t, H+ j1 E6 F: P4 n' W! T
( B  d3 T) [. t# x
/* configure System module */8 K  y) w" e2 W
var SysMin = xdc.useModule('xdc.runtime.SysMin');- y/ J' h  A1 s( r) z. x+ y
SysMin.bufSize = 0x1000;
  b0 x8 Y; y7 k3 ^. @4 f1 tSysMin.flushAtExit = false;, c  [* E& M- `+ W7 n, y4 ]9 |; T6 h
8 ?+ u+ E- ~' ?; P9 ?3 i
var System = xdc.useModule('xdc.runtime.System');
+ u  h( M1 |9 Y7 h2 R, W6 LSystem.SupportProxy = SysMin;
' Z( s) C. H" M- l9 R4 m4 W  m2 D; f1 z3 A
/* configure SysBios to use the lower half of Timer 1 */
0 D; c* ?7 ^. ^$ u9 i/ pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 C3 s: `; N; c
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( g. `' t" Q6 ]+ ~" ~
Timer.timerSettings[1].master = true;
) x# C2 i" L" lTimer.defaultHalf = Timer.Half_LOWER;
& B" k+ N) v: C! S" h+ T9 kClock.timerId = 1;) S$ Z5 F  F! E/ U& }
" r# f5 c4 P" b9 M
; n/ @2 a$ a6 F) s$ y4 R0 m" i
/*
4 F* N) H$ s! q% d* v% s4 |2 k4 s *  ======== Miscellaneous Configuration ========
) q1 T! D5 a& r  G */
& J! ?! u# |! N4 v3 B) F$ d7 w7 M# `* a0 \6 c) p) J2 u4 x
/* set default diags mask */" _$ x3 _* L9 S
var Diags = xdc.useModule('xdc.runtime.Diags');
, m( K' k) }3 S+ x  ]var Defaults = xdc.useModule('xdc.runtime.Defaults');4 l  l2 J6 ?$ C9 g
+ B" q$ T% v0 ]9 P( T* P- I
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 V3 \4 B: o7 w0 S7 i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  h+ u$ T$ E# W5 _) G- x' \Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 ~, P: f) M0 z0 CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 ~5 L! y/ ^7 `
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ i  y, P1 s9 }* q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- M$ ^7 f% O7 pDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 M4 G8 _& }' Q% |7 Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 _  }6 E! `! @7 W4 H5 FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  O# o$ i7 G3 p' X; N" e
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. m: m4 L. A6 @, C* z' q# y& A9 q  BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 |" v8 t0 y/ C; K' T; W, lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ K+ b7 |" [( y$ ?0 Q9 r2 cDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ ^# R  B. n! [1 U9 J1 m3 D# a$ @Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! I. h% j; k  U- F+ |

9 U: h9 r* {3 ^! T, V; H! E/* override diags mask for selected modules */) H7 G1 {; u% N% l
xdc.useModule('xdc.runtime.Main');
2 |- X* ~# d; @. CDiags.setMaskMeta(, `9 O- ^8 E" {4 Q+ b9 v$ Q* q- o/ n
    "xdc.runtime.Main",
8 O) E$ f- x0 C( S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; r! x4 \" A* p, }# E, I& i! ~1 \    Diags.RUNTIME_ON
7 B0 s" z5 o1 x5 |3 a3 b);6 s+ }; x$ S8 \. b

0 E9 W) N; D7 }* j0 s6 H! fvar Registry = xdc.useModule('xdc.runtime.Registry');
5 [9 `" p' k1 f4 ~2 [, RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 `; \' R) O. f+ IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ g2 R' t( \' H
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! t2 `- a- F& ]' C# I7 wRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;* u7 S  m+ J- `* v  D! Q8 ^
9 D; m, o9 V; I- R) i. h
/* create a logger instance */
$ ]) h. g: y7 p2 u3 G, C/ Mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: q+ {! @: B3 B8 t1 G* R  c4 Fvar loggerBufP = new LoggerBuf.Params();
+ |: B& q1 m% z5 gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( t$ Q( `, F1 B8 L$ LloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 R- Y" ?& X  w; w( A$ N* V
  {7 r" E  o) b. K( Y! Ovar appLogger = LoggerBuf.create(loggerBufP);: r$ I* n' M& v6 @; G
appLogger.instance.name = "AppLog_Core1";
& [. A! A  A( [Defaults.common$.logger = appLogger;
+ V% c6 T: a2 P' V/ y  xMemory.defaultHeapSize = 0x8192;    ( {2 ~5 u+ `% O* b; r! b6 y& z
Idle.idleFxns[0] = "&LEDStatus";
+ q" {4 y: j" ICache.initSize.l2Size = Cache.L2Size_32K;+ N2 Z2 }4 h" W. S2 Y
5 u9 A" [& j1 P1 X! l7 ^
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-11 19:11 , Processed in 0.042053 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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