关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 a1 I& O1 s9 S; p0 e
6 K0 _. x% `/ c4 w0 v; T5 c! {7 t& i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 [3 S7 i  {$ c  K/ M2 T

/ _* a5 W$ N" u' d其他程序段。。。。。4 e( Q7 z- R3 T8 C# t
) X' N2 z7 I  f
   free(x_d);
, ~/ f5 r9 L8 ~! ^0 i+ L) r: N% D* a& Z* K
使用DSP侧单独调试功能,验证动态申请没有问题,+ e9 g- ?$ i; I) [0 ?0 s) r
* h4 O! V' H3 w5 J$ t* {( n
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 G5 g  i2 h3 M* s# D5 v

: Y4 g+ E+ f$ D1 u4 s* R! l2 r3 o- Y; }' P' M
# M! w: f7 e: u- B5 k  u

! s( F1 Q$ z- R. M  v$ i- Y2 {
% g) k( H! F6 q2 u$ G, n
$ r7 R* W; g; d+ d! ^
5 ~. J& t2 @) Q6 ?9 K! b  e# ]+ n- Y6 ]: o7 ]2 v

+ W3 r0 ~. G. T/ A: j, ~" r  u
6 f& k$ G% F2 h% h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 b% s" |' J, O* o4 |7 f7 D) j/ T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 L9 w( E. i" [! E- n1 B/ ^6 I; x& l(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 i9 o, d1 r+ G6 H- a

6 w1 Y) h1 G. t6 _# H+ P7 k( L# `0 b是不是需要在DSP.CFG中进行配置
& T0 l: t3 e9 r. i8 }6 `我现在的配置为$ x5 C2 g* J( u( D0 `0 w+ r
! j" F& n  ^- c) X
/*
* e6 K# r/ _8 m& ]" h; k( F# P *  ======== Operating System Configuration ========$ h1 _+ D; ?9 t2 N' w# N
*// S  c  F6 b. |5 p3 \* q4 _
; s% ]' L0 r) s, `/ o( w% w8 I8 [# z
/* no rts heap */' \7 ?5 }* Q2 a2 B
Program.heap = 0;- Q% L1 Z/ R3 }+ |
Program.argSize = 100;  /* minimum size */5 d) J+ m9 M- o+ a
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! ?( S( {" P$ Q( k0 A' N

" l. i, A8 \& W5 M" t8 K7 P5 M/* create a default heap */9 p# b. R6 G7 z+ k# h# Z8 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  R; h' f' N, K' Ovar heapMemParams = new HeapMem.Params();
- b4 U' c" o, oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) V- K' E3 @% X& ?7 X. e
7 X0 P7 x$ l1 q
var Memory = xdc.useModule('xdc.runtime.Memory');
1 {  |" H- o: s5 C5 h6 c: z, J* b* b: BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ v0 n: k& `5 m8 }8 m9 X; U; ~

, y4 @9 B; j, X) L. g$ F. X/* configure System module */
' @3 [4 o4 g8 D# _0 nvar SysMin = xdc.useModule('xdc.runtime.SysMin');
* ], a; Y, P; x, V. nSysMin.bufSize = 0x1000;
: g8 [# k& C( M( E9 A2 q3 [1 `" ASysMin.flushAtExit = false;7 [; C7 C  F& ^1 u4 O' o
; p/ z4 Q8 {% j+ a& q2 k
var System = xdc.useModule('xdc.runtime.System');
' J/ o. Z1 F; E$ k+ r2 eSystem.SupportProxy = SysMin;/ W. O& A$ [5 k/ w. M
* ~" N1 \, P# l! X* h- T
/* configure SysBios to use the lower half of Timer 1 */9 M8 E# y& J6 i4 x6 [9 Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" y5 L; A% x' M$ a7 u$ j
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) u" Q" I6 @- o/ P
Timer.timerSettings[1].master = true;4 X0 ?0 I# ?: L5 s4 ]
Timer.defaultHalf = Timer.Half_LOWER;
, X1 s; E) T: I* g* s6 zClock.timerId = 1;8 X$ U8 R2 \2 \2 c
1 r2 X  h0 p- ~% @7 r+ X

4 V7 F; ]% p6 g2 O( K/*% D: G: V" c% d
*  ======== Miscellaneous Configuration ========
1 N* D- Q# c& m0 g  o. e# {: X */
8 ?" I, R" j! Z$ \0 B- d
# z! W" a2 P3 _0 L5 }/* set default diags mask */
' A' W  F& J; t. j$ P: _) M. avar Diags = xdc.useModule('xdc.runtime.Diags');: g: J1 B; ?! ?, x+ j
var Defaults = xdc.useModule('xdc.runtime.Defaults');' e( t  S8 t) ^9 `+ d/ Z
! r) _/ f7 v( _  j3 H9 w; D
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" x: E- V; `, J! w, WDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, X3 O' D# q/ M3 ~( u+ cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 G( ^9 r# f; [6 ~6 _; f6 CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 C/ Z* C% ~' [) a" a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% Z% A1 Z; L  |; ?& l! v0 O
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* ~. Q* g1 o6 n2 V% \Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 L* s8 z# K+ i, YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 F6 @+ N* Q" A$ ?& `/ h6 x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, G' w7 `; l' k' j+ R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* E0 J+ l4 B4 A$ z2 x, }# KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  {0 k2 Y/ v. |* w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. {8 t9 T5 f$ k6 tDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) o* v6 \* {2 I1 P7 b. F( v/ V1 l
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( i. M5 S& z, v- F4 A& p

- `; z0 e5 {" }' ~3 o( y/* override diags mask for selected modules */2 W3 j5 ~) k5 c9 s
xdc.useModule('xdc.runtime.Main');
7 ^( y+ X1 S, j7 QDiags.setMaskMeta(
# l6 S5 J0 |: k# p$ H& p    "xdc.runtime.Main",
9 S/ f3 E% M; N3 L' Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 @  ?% v. d* N6 H! ?    Diags.RUNTIME_ON! F9 {- P6 v, O5 ?
);1 G, Z1 ]" U9 T' p. ?+ x1 A- v
7 O7 x- o. c- G
var Registry = xdc.useModule('xdc.runtime.Registry');7 z" ?- G9 A  w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( l; [0 L5 z3 e7 R) VRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) Y' O( d9 A4 Z0 v+ }4 GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! ?6 }5 p+ h3 \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 y6 F8 ^3 Z/ x. q% E

, q9 R2 Y5 n/ K9 ~/* create a logger instance */+ [) c/ ?- Z  o# R; Z' j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 X# j. v; H# F5 V" m' K7 |
var loggerBufP = new LoggerBuf.Params();/ ?3 \+ n6 ^6 V$ J6 P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% z, \: E" G% }# n4 }; S
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( U+ ?6 t5 J3 d; b* E2 G+ Q

) [  N4 |6 _' F( C- ~4 zvar appLogger = LoggerBuf.create(loggerBufP);
- e" N1 a1 P) mappLogger.instance.name = "AppLog_Core1";: R2 n& M- \! d" M# i0 _
Defaults.common$.logger = appLogger;6 I0 S7 O8 a- t
Memory.defaultHeapSize = 0x8192;   
! v) X0 Y  A. O, CIdle.idleFxns[0] = "&LEDStatus";) L4 x! m3 {5 k2 h" H6 I9 J" \
Cache.initSize.l2Size = Cache.L2Size_32K;: X! K# z$ a* b
3 N6 N/ K4 i, n0 w0 {
回复 支持 反对

使用道具 举报

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 */
  R" i+ }4 w$ ~$ wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, m+ W; q" y0 p+ N4 I: q2 H) dvar heapMemParams = new HeapMem.Params();
9 E( Y1 a0 J4 i1 @- T- rheapMemParams.size = 0x4000;
1 e% H' e- i$ o  {) a, O( o% ]( i
+ r2 B2 [5 j9 cvar Memory = xdc.useModule('xdc.runtime.Memory');
5 K9 ^! l! p" s( mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 J8 u4 q' e# W1 a) A" F

* I; d9 U! N* ?' t6 \0 i! g$ d" p, W我大约calloc  每次共计大小为5K*16bits,# l9 x5 R( C( X/ r5 v( h' S
而默认配置才0x4000、需要改大。% Z& q8 h8 D! F$ U% i  Y/ W  U$ L: o, m
. ?; f6 M3 U1 l! d1 \9 c& L' h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& x" m( W. T+ a9 c: }# g3 h
Program.heap = 0;
; Z' l2 J  k/ G2 W8 w5 uProgram.argSize = 100;  /* minimum size */
6 x% m' t1 K3 C, sProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 02:14 , Processed in 0.043747 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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