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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' _" M" f' y9 Y' H( U0 \8 B$ \4 K1 k- I8 ~' @' U! n% e
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ L, B8 Y! x% j9 ?' r; t2 d
& x& s0 f3 K- ^8 @* N- ~; O
其他程序段。。。。。
0 K- S/ @' ?, L/ W 5 p1 a1 {0 O6 U3 [( m
   free(x_d);
7 b; u  R0 a! R1 x9 E: P4 b
. z5 J# V+ r+ u( b, j% f使用DSP侧单独调试功能,验证动态申请没有问题,, K7 J; `% L. S4 U, k5 a- i
/ W: U  N! V$ p4 e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" z! g# d# h# U

% ^) W: b: T! }) e
9 E& z1 e; y: D! d, A1 H+ x  }5 e! H! j) }' I

& t" D5 y! \* ~! ^# V4 j
' a' V1 g( m+ Y1 G
) `4 t$ t1 r6 ?5 F  a) o! \2 X3 @0 f9 N% G( m6 d
0 |# Z. ^' e; G7 r1 N. G, Z9 F

* d: \- U  }/ e7 p9 c, J# |
& ]1 r- z' i, ~$ v
分享到:  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 */0 ]1 L, U% x" M3 M
Program.heap = 0;- b: ]3 F$ d% l+ ~3 ?* V
Program.argSize = 100;  /* minimum size */: C8 V+ k! l# J) ^7 e
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */! e5 Z8 Y" [  R2 Z, O: d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" n6 c, `& \5 e- @var heapMemParams = new HeapMem.Params();3 P2 e. z6 |2 D$ K
heapMemParams.size = 0x4000;
( {" G+ \% i2 n3 Z1 s6 N1 D' s
0 i5 h" {" ?) G: J: W; }, H1 Lvar Memory = xdc.useModule('xdc.runtime.Memory');) o7 x9 W/ I# I, G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 j9 o: V- z3 m- C, C3 h& p0 j
我大约calloc  每次共计大小为5K*16bits,( O0 k1 f; D3 x. M" X* Q
而默认配置才0x4000、需要改大。
7 N+ x' a- h2 p4 M( R0 w8 M% E( J
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
. x2 l, U+ N! M- H, B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% Q; N1 U, Q: p: ^6 X
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 o2 F* r) b2 K
% k2 `( c$ Q$ j" D( ~  `# \
是不是需要在DSP.CFG中进行配置
0 v: Z9 z  @# n3 u. n) P我现在的配置为
, w. e0 \1 E" x, v! d! v8 _) o9 ^
: D3 j2 s0 H# F/ m: m9 S' T* v/*
6 E2 S3 n. @, w! K *  ======== Operating System Configuration ========
7 p4 F% _" F2 l) C( j& D */, w4 h2 I3 z# T$ J) f  @

  ~( J& f* e3 b6 b, {; S/* no rts heap */
9 @6 ?& g. G- ]; SProgram.heap = 0;! `9 n5 ^, M5 P$ r$ T
Program.argSize = 100;  /* minimum size */) B/ R$ B* a5 n4 G3 C8 f5 `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" F. E/ U+ g/ t) v' f2 T# U
7 A2 x7 d! K. e  m* \! v
/* create a default heap */) S4 ^* M# ?7 _8 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. i3 j* D& E0 ^" \7 t% K
var heapMemParams = new HeapMem.Params();# F( _+ ^& ]4 j% B8 C' f4 u
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: C- K; X5 E4 n  M' j/ l9 ~1 y* [( f+ H. S) L, B7 t% e
var Memory = xdc.useModule('xdc.runtime.Memory');7 ~% P9 h( A4 P- [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 `4 x. A) C" v! w/ v7 }9 s# P* ?- h, ]: {8 F
/* configure System module */
* W; }: s# Y% P% G! x% Fvar SysMin = xdc.useModule('xdc.runtime.SysMin');: Z- W1 ]6 x0 o$ J/ V$ M! K9 q
SysMin.bufSize = 0x1000;
8 K4 ?5 ]: f% ?& @/ X" [SysMin.flushAtExit = false;
8 r+ f/ Q: ]+ i& H1 \- q+ H9 g1 I# u
var System = xdc.useModule('xdc.runtime.System');/ X2 @5 v* \2 w! `* Y. H1 M6 U, j
System.SupportProxy = SysMin;8 r( D9 z7 r# F1 t
% y# y2 F& ]0 i: j/ c# t; ]
/* configure SysBios to use the lower half of Timer 1 */3 i' Y! }4 ^0 k1 }# d
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( o/ _- u0 g8 x0 `- f2 J: i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 _' Q& @( p: S" a% lTimer.timerSettings[1].master = true;
' d% ]2 j' v8 V/ I* n% lTimer.defaultHalf = Timer.Half_LOWER;# F: r4 e$ r  P: Z  j( L
Clock.timerId = 1;
4 g; I& w+ H, _% X
3 }) J  ^$ x/ }- M9 c0 c0 `9 z* ~' ]" l" k9 V' C
/*) ~% x: m! n7 a) J5 v
*  ======== Miscellaneous Configuration ========
& n% w, n# t! X, e7 g% b8 a */
5 @* z8 |$ l' b1 D" a, Q  w  c) J7 Y  r& h1 K
/* set default diags mask */2 K  G' M) }% J. `
var Diags = xdc.useModule('xdc.runtime.Diags');
4 q" m$ ]4 S0 y, m: \1 r5 u# m: `var Defaults = xdc.useModule('xdc.runtime.Defaults');" n5 a! \& O( ]3 i4 x  h
1 _  K4 |; p1 B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 I; d- s! K, g! S$ H4 NDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 I- ]% I, B" V* hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; j& r1 i+ [2 i3 b, ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// c4 G6 S- _0 ^
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 ]; d% c" ?$ W' F
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 a' }; o: F* V" ^3 M2 x( H! j/ c2 S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* K8 M. V* [0 D0 O- v% x( |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& e/ R2 _" t" p" YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: p: [; e/ C1 u" e& y# ?# `: b6 Q1 EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ B5 i+ M) u; \6 U4 i9 K" E. `
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" |9 U2 X% y0 r, K/ l" S- R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ a' O8 t  Y5 ]  {! u: WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 i* k2 U+ q, q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  w, N$ a- S9 n6 j9 q

; v, o# M: _) P) K5 s/* override diags mask for selected modules */
0 f7 \, n& n* txdc.useModule('xdc.runtime.Main');
4 `: b0 t$ G; Q; B: {" u. m; VDiags.setMaskMeta(9 ?* B( @0 y% @0 X9 z/ v1 b2 F3 d% f
    "xdc.runtime.Main",6 c5 [3 |4 V1 f2 X( i/ p0 w) q2 W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, \1 Y) M6 |' o% k& p' P$ g    Diags.RUNTIME_ON
/ E) \' J) K# H- ~( b; E& r3 i5 F& T);
1 P; R6 G) n& |4 F+ f' ^% M: K0 U( h$ ?3 U. \
var Registry = xdc.useModule('xdc.runtime.Registry');
& {+ @. X3 ^& \, X( FRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# Z$ _+ t- Y% h2 S8 gRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! }( L  X- g; o" |2 ]& n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 a% q) [$ T* o: _' s
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 G6 ~8 [8 x( D3 ]& \, V
  o3 U5 l, o* n6 ~8 r/* create a logger instance */0 H  h% `9 A" R/ E
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ s/ p9 ?  _- |
var loggerBufP = new LoggerBuf.Params();6 |' O4 h/ Y% L% I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. U3 [$ Z0 K0 x6 F3 Y- Q3 U3 D8 `loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 C: Y# l# r: V4 {1 a; w7 V+ x4 _; _5 W# Z2 e: Q: Y
var appLogger = LoggerBuf.create(loggerBufP);
! A! y8 W0 X; S% |9 h  RappLogger.instance.name = "AppLog_Core1";
$ R2 K9 ^) Z0 A2 C# A, UDefaults.common$.logger = appLogger;4 ?7 t, v+ N+ P! v) x1 b
Memory.defaultHeapSize = 0x8192;    $ _/ z  v. K' z3 D
Idle.idleFxns[0] = "&LEDStatus";
9 m4 N6 G' a) YCache.initSize.l2Size = Cache.L2Size_32K;
; b* n- S" O( U0 {9 z# n5 ~3 f( N5 K; R
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 00:51 , Processed in 0.041775 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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