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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 W2 m; }  @8 v3 l6 P! p
# ?. n( `( t! P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 p6 O) v+ o) s$ R( ^- }. z  L; D2 ]

/ ^) |* H- x% B5 ^" M7 M  I其他程序段。。。。。
! o- a: i0 [8 B& s' V1 G - Y: I: D0 F  a5 `5 K+ O8 D
   free(x_d);' u7 \# s& R3 x7 d* u
0 ^8 w/ ~. Q$ n6 L
使用DSP侧单独调试功能,验证动态申请没有问题,
: `9 m0 s+ A) ^  r, p' Q
, G1 I) I& @7 q; D$ E7 s; ~但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 Y; I4 c8 A, O* n

  _% `6 Y; ?2 b5 r' w( |
2 P! I6 }7 @* q& d6 z& i  F5 a: d
8 t+ ~, u1 f# }' P' x' C  s+ V- T$ r4 ^; u4 B# P
9 d/ F# M: \8 H: R/ a9 h  Q, y2 Q
' s' ?* @0 O5 L2 h. T
4 o1 V4 C7 x1 O6 \; V- _6 d2 ]

4 _% H. `2 w5 x' N- |6 }* r) }: \/ a; B

5 {- T: X5 d9 ?2 l" ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- u- s) O1 L: D1 W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 c/ s. _' l) t4 U
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 J) X6 Y. q: P2 N/ q* B
7 y  T: p! Y+ C' i; _
是不是需要在DSP.CFG中进行配置3 G& w6 k1 l( K4 c" C, k
我现在的配置为; B' \+ g5 e: C% u

2 B9 Y2 o# t3 |1 x: C" K7 R$ J3 |/*8 c. q/ b  h/ I  J6 u- u5 p
*  ======== Operating System Configuration ========9 x: n# c3 T1 D1 v1 I/ S
*/8 h! N: q( ?6 R
2 A  }/ U. u8 `% ?& j2 d6 ~9 u' o
/* no rts heap */
' P, s( A/ S4 ^: D6 hProgram.heap = 0;7 G/ A% Z9 [! |# K  P0 ?+ Y' d3 J
Program.argSize = 100;  /* minimum size */  @6 T) J6 w/ \: a/ B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- L2 v/ {2 j, z. e

* T& _$ W0 g+ Q/ M, Y$ Y/* create a default heap */, ~1 e% G0 |+ R) @7 r; L" x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ L7 \' e7 @! j# F8 Tvar heapMemParams = new HeapMem.Params();
9 b$ \( ~! P. }- ?( Y7 MheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% W8 f5 k, Y- i4 W% K9 D9 }

8 g8 i# q% J5 ?; n
var Memory = xdc.useModule('xdc.runtime.Memory');
) Y* @1 A# ?# E0 M- bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, j  m1 W3 P7 f0 K# U- \+ J/ H

) r3 U0 E/ ]  \3 T/* configure System module */
1 L4 ~4 [$ K7 s( h  Y! Tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 j8 o6 V' A+ ~" x! Y, A8 \SysMin.bufSize = 0x1000;, X2 b2 T; t7 ]- B4 v1 _
SysMin.flushAtExit = false;) G: o- p( P$ R& [, c; i' q, I7 e  L+ e

5 P' ?! Q$ f6 {  |* B0 Ivar System = xdc.useModule('xdc.runtime.System');
5 v2 L9 y/ q5 A  VSystem.SupportProxy = SysMin;
# M" y+ h4 h; o6 t) s0 r
1 [9 Z' ~" f7 R0 q5 d& B/* configure SysBios to use the lower half of Timer 1 */) V& u. A% \3 O* {7 V; O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 x+ Z! E8 X9 S6 {$ N/ Z6 n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( R( S0 P+ i! T, ^
Timer.timerSettings[1].master = true;
: r& w0 O2 L  K( v' y" s+ E; JTimer.defaultHalf = Timer.Half_LOWER;
, Z- n: i2 C3 |0 o" g8 r1 CClock.timerId = 1;. P/ A3 _7 H: O- ?3 v6 p5 X

* D( q1 D' q9 ^7 r% N6 \
+ K( @3 O" ^2 _( E4 V# F/*
+ F7 O. g$ F& d& W5 {0 W7 M *  ======== Miscellaneous Configuration ========+ M+ |9 p6 y& H1 d  @
*/
" J  q7 T7 f# b9 Y
! `$ x4 s9 ?) x) |9 C/* set default diags mask */8 X% O. x+ ]! [  q( {* Z" k
var Diags = xdc.useModule('xdc.runtime.Diags');
2 G/ ^/ D- b7 `" W, a* I1 cvar Defaults = xdc.useModule('xdc.runtime.Defaults');& P) N8 @+ n* G  r; Y
+ c( c7 z, b2 I$ A
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 M# M3 }; X. t- S* g8 @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 k5 e' V! R  w! G& @# ]Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% h0 o3 @4 w3 z9 L- IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 s/ u- N9 F3 k  |! \
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 H5 Y/ P$ a; T2 Z/ C- I" o" k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ B% L( O/ H9 s( [1 ], v& x
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ Y: G; s7 S4 r$ G) O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& e+ m! ?8 [5 b* \3 v5 m
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# V: j# d! Q9 z6 ?: o: S5 GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: ?, h7 O+ S: \$ G* B7 V% x. t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" d% |& P% Q! c! mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 T$ g) \4 |7 KDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 |2 X9 U( {- X9 j1 t6 uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ v, I0 L, X" N, h* w4 q
6 w  Y, w+ S3 L! m/ {9 S% j3 s/* override diags mask for selected modules */% u% `: U& K. O1 y. u, e  l  Q! h
xdc.useModule('xdc.runtime.Main');/ N' k8 h9 Y; [8 I
Diags.setMaskMeta($ |! p& S7 N& f* ?
    "xdc.runtime.Main",
" B$ |+ b! `" I) _; r8 F    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 c# A; g3 a) b) ~
    Diags.RUNTIME_ON, I9 i8 G0 d9 r& ?* P, L2 [
);' v$ f6 e, P0 \6 Q

; S) D1 }0 [5 A. a% M9 ?, f0 i8 fvar Registry = xdc.useModule('xdc.runtime.Registry');
' B& R, ]0 C/ D: y! o/ J2 NRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 k/ Z) c1 X% o, U2 Z) G- u7 WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ U% X# x$ A# L( y. p4 R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# }) s* c) e, ZRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: e. b) T: j# w4 Q# g. _$ Q
9 [% ~" Y- i& f  V) z1 w
/* create a logger instance */
$ T2 k0 J' ]6 o# fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ r0 H( D$ F$ _  |var loggerBufP = new LoggerBuf.Params();
+ r+ b1 _6 P7 d: k9 @loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" ]# X- v9 q" e7 ?% H+ l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( G9 ]( [6 U8 j4 X7 d& n- S/ _5 h+ n
var appLogger = LoggerBuf.create(loggerBufP);; @1 C- T( q3 I& O( B
appLogger.instance.name = "AppLog_Core1";
2 N  d. o6 A% TDefaults.common$.logger = appLogger;
8 S8 r7 B9 w$ K8 D3 v6 MMemory.defaultHeapSize = 0x8192;    # h3 D% Q0 H1 Z- h( U1 c! h1 P3 f
Idle.idleFxns[0] = "&LEDStatus";$ G$ z" Y: C" S; S. |
Cache.initSize.l2Size = Cache.L2Size_32K;
) w& h( u: E1 Z# o/ h% [# m6 B+ v& P5 Y9 n7 [( W* I
回复 支持 反对

使用道具 举报

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 */5 R! z* n8 c7 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" J4 ~# _$ H4 G5 V# G2 L" U
var heapMemParams = new HeapMem.Params();2 \# y% C  O" Y. n$ b" `# ~# u! r
heapMemParams.size = 0x4000;$ r" v- S$ w0 [+ A" z

8 f, M8 u/ P- l( V5 s5 s* vvar Memory = xdc.useModule('xdc.runtime.Memory');
, l- I4 V# \" i. b) [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ ?- l. y3 j5 S$ b) F. [; y3 q, I8 K
我大约calloc  每次共计大小为5K*16bits,3 @; ?) b  }* V# D$ N9 t, p- g
而默认配置才0x4000、需要改大。! X' {0 O$ g6 C) D6 W) d0 `; r

% L" w3 m, x: T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 n  D- E: I4 o6 l# B% R8 q( IProgram.heap = 0;  o. s' e5 [8 Z# N
Program.argSize = 100;  /* minimum size */
; ]4 V3 C7 S# z& pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-19 22:36 , Processed in 0.041187 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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