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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 n# X' H) C! J* z% F8 O1 G
. }+ E! W, M* A  ]9 N8 u/ e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: r) T  K+ ?* a) b# \3 E. a% o3 W- q* d  g$ h* o
其他程序段。。。。。; `; z3 E4 @! U. ]2 `9 a
" ~1 ?- H5 Z: _5 L4 q+ Q
   free(x_d);
( r2 b' M& @4 z% m9 C3 C( n9 M. n+ ~) ^
. l/ i. K3 g! U8 r# L使用DSP侧单独调试功能,验证动态申请没有问题,5 u, m& f/ z" U! r; q4 \1 |. l

; B/ j! L0 t) V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 B4 j9 k' S6 K' v; ?4 O
' u# r4 m% @* Z! b1 D$ n
$ ?1 d0 k' ~3 y4 T& S8 g

& |3 J& M, P8 f3 E
8 w3 W$ W4 b- K: @
$ P6 H% \* \+ X8 I2 G. M! Q! @5 M. J
* S7 r; n. B2 B  r- }! m# p; G3 T% ?- R6 E

+ z$ ^% T' _6 W: j% k* X: Q
) V7 a( `/ T6 `& l8 U" h$ U% H/ ^3 I7 B+ X5 Q: o0 B& ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. c8 ~/ A/ f8 l% G) n' [9 V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 m/ x7 a- Z$ y% ?6 @  w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! L; l& x) c9 t  w- N/ }

9 {6 E: c( j% l# G; q是不是需要在DSP.CFG中进行配置! g; X4 C2 o/ y
我现在的配置为
. ?( [9 i6 K. m2 J4 \0 G( b
/ f5 s& h+ T6 C1 v" l/*( k: @+ S7 e* g7 `  Q
*  ======== Operating System Configuration ========- g* I# I% @: q4 V4 t
*/  V  C+ r7 i- D) L
; F9 `1 s6 l7 `. q8 l
/* no rts heap */- ?. w/ A- k0 g9 {3 Z& {7 }
Program.heap = 0;5 z% \) ?+ I) s+ T' d9 }  i% B
Program.argSize = 100;  /* minimum size */
3 D8 Z( W1 n# g* E6 fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" }5 w7 I2 m# Z4 I# E, a8 F# c4 c4 b. L. Y% f
/* create a default heap */
& N- V" p+ T  `# Z! x9 S0 V6 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 w. j6 {- K" R
var heapMemParams = new HeapMem.Params();  @: l% X: A  Q: j/ k6 Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- x4 T' @1 I: Z! ^$ j

# L* ~$ `% L5 n
var Memory = xdc.useModule('xdc.runtime.Memory');
0 h+ y1 }% k( S' K7 d. Q6 g- v+ r5 EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, e1 ^* m% x/ k$ g2 y
; ~7 P; @2 o$ t# f& a2 W% I/* configure System module */8 [3 p% H# D: W6 i3 @7 d7 ]2 J  q
var SysMin = xdc.useModule('xdc.runtime.SysMin');
0 @; C9 [) C) \+ X- BSysMin.bufSize = 0x1000;  ~3 I: j7 Q# |# N
SysMin.flushAtExit = false;) P; J0 m8 b9 {+ V5 Q9 [
' W/ G5 C$ H6 q! K% @3 C# r
var System = xdc.useModule('xdc.runtime.System');
/ ~9 r3 q, }' H. T* v' a' MSystem.SupportProxy = SysMin;
1 J8 Y: U: j) B; ~1 @! _, h! y# L4 e) a6 |
/* configure SysBios to use the lower half of Timer 1 */
* ^" P4 G3 T- S) g6 V2 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ F% L9 n0 q! S  F3 u7 \
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ N0 ~4 w$ X4 M9 C6 U1 T$ f( s  K
Timer.timerSettings[1].master = true;) W" x: t" ^' p; ]$ O( ]! B" j% c* V9 N
Timer.defaultHalf = Timer.Half_LOWER;
6 i7 a9 T7 G# \Clock.timerId = 1;5 E. w0 H' p1 g7 L

# Q+ I3 y+ e+ h' \' Y1 B% ?, O$ |2 z! R/ {) I" F; w1 K' A
/*+ W: k6 Z: Y; A0 `' }
*  ======== Miscellaneous Configuration ========! Q  d( ~5 v9 v. ]$ K6 Z
*/6 H; m$ F$ v* l

; k6 g9 P# s; n4 @+ C/* set default diags mask */
* z0 g0 y. m( }8 M' s7 p* Gvar Diags = xdc.useModule('xdc.runtime.Diags');
! z$ H" t* _% ~. H4 W/ evar Defaults = xdc.useModule('xdc.runtime.Defaults');
7 d! w* \# s  y2 L, \1 m  `4 p3 _
. w" k$ X2 C: E6 l) f( mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ M# ]& v3 s9 f  Z; l3 _& G& y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( N3 K' f# e) V* g, G, F. fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 z6 |. Y$ i( m  I: R/ TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! ~9 y3 |8 S9 F7 I+ \: z0 W/ kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# Y6 ]' E5 O$ Q7 S8 U! l8 BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" p3 `" y. T. z8 @: a
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* F, `3 P- W( g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' f( f2 J' s3 b) iDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 a5 c0 c$ {4 @  N3 o. D' d7 cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- f4 F+ n' `' G: \2 B: F8 d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' z+ `2 y7 T% C" v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 E" R, L* R% }* TDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! [9 ?; `( C! d$ M8 ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' v' Y& b# T+ a8 p7 F3 f" c) {$ N* r$ K# r8 `' k
/* override diags mask for selected modules */( D( J6 w' a) B# {: |1 m
xdc.useModule('xdc.runtime.Main');
/ I8 S: h- X/ g; w! m- MDiags.setMaskMeta(2 p  V- c, _5 r" K  |% b
    "xdc.runtime.Main",
4 t3 z# a5 z+ b, o" A! B4 H    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 k$ V# ^2 S+ w3 [- q: [
    Diags.RUNTIME_ON8 U( N- E0 O/ A
);7 w6 ?3 F9 A5 p+ @8 r
1 n& ]9 X( `" I2 r- \7 B
var Registry = xdc.useModule('xdc.runtime.Registry');
& d6 D  I+ E6 P' g6 V8 lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ [! Y( ]4 ^; ], tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 d* O% q: g2 Z- L- C8 `& p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: i9 @5 c1 D+ S# d! @: ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* a/ v- [  |3 ^3 d+ [0 p

- m' ^8 e- R: F0 A4 A/* create a logger instance */
  x5 [) I2 Z: z# M* }; n7 Y" _# rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 U7 {8 u4 E$ B1 N, Uvar loggerBufP = new LoggerBuf.Params();7 J) c9 _+ ^* q  H4 K: _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' P2 U+ H6 Q- Y: \6 A6 w# mloggerBufP.bufType = LoggerBuf.BufType_FIXED;* `3 v  L: X! p6 d  L
  x) e$ \" [0 T% ?3 a; f
var appLogger = LoggerBuf.create(loggerBufP);
) w6 C0 ]4 L5 ?0 NappLogger.instance.name = "AppLog_Core1";
5 p1 e  z0 [0 ?3 vDefaults.common$.logger = appLogger;
  H4 F5 F' v5 x8 X  iMemory.defaultHeapSize = 0x8192;   
- n7 Z7 i6 H- }: i% U; {- hIdle.idleFxns[0] = "&LEDStatus";& _+ m% k. F  k6 N2 h, q2 P, z" G
Cache.initSize.l2Size = Cache.L2Size_32K;$ G" C0 E- [6 d7 U

7 {5 A/ ]# Q4 o" g. k' @
回复 支持 反对

使用道具 举报

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- D$ _& i6 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 u; R' F( X9 S, B% {4 l" H; n  ivar heapMemParams = new HeapMem.Params();7 B3 g' p6 E5 H& S
heapMemParams.size = 0x4000;$ ~( {* @" V+ y; N. ]
( s  Z( ]5 Z% D, T7 o! H
var Memory = xdc.useModule('xdc.runtime.Memory');# M$ x* y) J/ Z3 M/ R& q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 @+ o  T/ a& y5 E9 T1 u" |5 a
8 f/ y- s. @! n我大约calloc  每次共计大小为5K*16bits,
. A8 {( P7 z% `  R- j3 U/ S( `0 X而默认配置才0x4000、需要改大。8 {9 b* S: S4 P8 @6 R$ v% [- F1 N

; \) N; \/ x4 v$ P% Q; ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) {4 ?- Q& B4 d4 r. ]( |' kProgram.heap = 0;
- e, i2 n+ p7 z' SProgram.argSize = 100;  /* minimum size */  O# U& l( R0 Y+ c4 {
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-28 08:17 , Processed in 0.045780 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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