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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 g( P& K: \1 N" T# [
) @) F) K$ {0 K3 C; y) R! P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 D) h: x% s6 S% L) I- p- x
2 A# f2 O/ I1 F: H1 X其他程序段。。。。。
- p* C: B9 X8 Q( K4 d
0 y5 l$ v4 Q4 y8 d) H1 r   free(x_d);
, j+ b+ l$ k& U( l" S" p/ g7 U6 e0 m# s3 m5 G7 E
使用DSP侧单独调试功能,验证动态申请没有问题,3 U* x, ?4 p3 e( y) V

' i. h" [  h! L5 ~但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- e3 G) B) i1 ~* |5 A; q

( J  v' w' J7 Z6 B" |1 J# R* g
- h+ ~+ [. D! h8 ?% D* V2 r) C1 X  O1 T/ y

! U4 }  P0 Z, e7 v3 ?$ o( u( m4 r; D  Z& _3 j  p, \
. Q! H* z. \6 A( L1 m. U& e6 w

3 G6 c* L+ U0 a, O
! O4 v( k3 z/ D, p
6 t! h% E. R( W; k3 B+ I" n- b" U8 x0 a( Q6 q2 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 a, b0 L" y$ d! H/ v) F% h" N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* Q6 N  b8 j. n# S0 f, m9 \: ]" F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ }- G1 {  `. G* M; a4 @

$ _2 |. l9 t6 G# R9 `是不是需要在DSP.CFG中进行配置
) x/ p6 g$ e5 V6 X我现在的配置为
  [2 m; b5 I' p" C: ?% W: T! e
0 p$ c4 P& D  p; V* r- j( C3 T$ d% E& W! s/*6 i5 i# \1 }) v8 F) C- S( T- g
*  ======== Operating System Configuration ========
! V1 W; ?+ |/ _: P& g1 _& G+ K1 C' R */" Q) w9 g( X+ E# k- t2 w# [
  w* Q7 b8 _1 A7 G
/* no rts heap */
8 @5 C4 q$ s9 lProgram.heap = 0;; H! y: d! w7 I+ X
Program.argSize = 100;  /* minimum size */
9 f# s% z1 j. n, ^% fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 x+ Q3 v/ z! k' P& \1 A
6 }' n, _1 A9 I+ K8 h6 _; J$ z
/* create a default heap */( m* s/ W1 P* t  ?. t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 B& s# l/ r/ s4 X: u. o9 Zvar heapMemParams = new HeapMem.Params();/ F2 r/ t5 R0 |$ A2 J
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 i! x( G1 f1 o& C8 e3 T0 _; Z* T- ^# i5 Q; `) y
var Memory = xdc.useModule('xdc.runtime.Memory');5 F" L# F7 T+ G8 h9 g: z; f* q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& d. [' v3 v! V# u1 J

3 L2 O4 G2 \, }" Y/* configure System module */- r* Y1 y& P2 y% l0 S( V
var SysMin = xdc.useModule('xdc.runtime.SysMin');) t# R0 B: S5 R2 V- t2 ^
SysMin.bufSize = 0x1000;
) B* T! U1 q4 ~7 o$ NSysMin.flushAtExit = false;
3 d" S9 e0 i3 d" Z6 N
# P" F8 ]* _6 d9 N# ivar System = xdc.useModule('xdc.runtime.System');
) N$ J6 c  z1 m& R% \System.SupportProxy = SysMin;
" c; Q) k# Q& @6 E9 z. A$ l+ S4 x  z, {9 K6 m$ v
/* configure SysBios to use the lower half of Timer 1 */* m5 ~0 d8 x6 y0 Q/ W/ M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 h! I6 E$ l) d2 Z" Z7 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');! h8 E- I& D$ y
Timer.timerSettings[1].master = true;/ y6 J0 \! @2 [6 D# h
Timer.defaultHalf = Timer.Half_LOWER;  G9 q) W7 m' h+ l2 Y
Clock.timerId = 1;) k+ u# z2 m4 a, e9 R$ X% I+ s
  z; f( d- k, x8 g" n3 Q' B% T

! C' t& e8 R6 Y& M0 W. Z; `/*- T: \* L/ q/ {7 ?2 {
*  ======== Miscellaneous Configuration ========0 k- N5 G4 F6 n' y! f9 f8 i3 Q
*/
% A  N$ D! s" e4 r5 o& f2 t" k
9 e0 l6 r# A$ d! p5 v. i/* set default diags mask */
* [& |- {7 k$ m/ Gvar Diags = xdc.useModule('xdc.runtime.Diags');7 _  J4 q, V; x0 Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 ?9 `) k5 @, d+ P- S6 x

; `/ @0 c2 l# d% J" I0 vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* o: _: W/ Q3 E0 Q( `# x- ^) S, D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( D6 X8 B/ R7 O, F, R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) G% ~  o) X& U- Z9 v. N1 @Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* n( [7 |/ A& ~6 e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* x0 ?3 i) {( H2 \! M8 C. F6 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 }( U5 _( ?7 RDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 U, X' e1 i6 v% K# b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 x0 R  ?/ n$ m7 H2 H) ^( BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) j, _! q% W0 M6 n/ A7 N& e$ I1 YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 D* g  v/ p. O* y; K4 ]Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ m. G1 N( P+ L) c/ w/ |$ A  j
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 a8 P+ `% P6 o' Z5 T5 x& gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) a$ l  r5 F. v. t
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* z' X) {% o1 D, V/ V. n6 A/ `6 y3 z% P* _1 H( P" e1 Q
/* override diags mask for selected modules */
7 {  o& r+ i4 F( d9 ^! cxdc.useModule('xdc.runtime.Main');# s6 E7 {3 J0 N- J2 l/ H
Diags.setMaskMeta(- u: {& n& w- _, U9 t5 P. v
    "xdc.runtime.Main",/ I5 S' F. \- }7 w, X0 `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 W" w/ @# s. O. s& d  X
    Diags.RUNTIME_ON9 q& n* D. A4 r- x1 W3 c' G
);
5 R. r; a0 q1 h$ ?4 V+ I+ d2 \; U" D+ p
var Registry = xdc.useModule('xdc.runtime.Registry');- Z: y& `% w6 D0 I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 U, A9 ?9 u2 R% ?* u
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# z2 ?# K- Y- [/ G+ X1 g2 `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ A$ S1 O+ u+ }0 `9 l) ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# o0 w0 _1 B  e% J" o
+ U  ]. v" X3 w/ z7 e1 E! m4 I4 s
/* create a logger instance */
9 Q8 U. n# H4 v4 H" pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" h8 g6 b2 G) T  E: j- z8 ^
var loggerBufP = new LoggerBuf.Params();
$ E( _& w  [" K( d0 V6 rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  c9 ]# |- }1 \2 {6 bloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 C2 |; g0 M9 |# c. `6 T. x7 b
- @* j$ ?& S9 B- yvar appLogger = LoggerBuf.create(loggerBufP);
3 Z8 a) k& z' Q+ jappLogger.instance.name = "AppLog_Core1";2 _; l" a3 r# {# y; [, ~  o" s9 e
Defaults.common$.logger = appLogger;  N9 ?5 r, w9 Z+ X8 t
Memory.defaultHeapSize = 0x8192;   
3 b" \$ r0 t3 \& {+ h6 h' ^Idle.idleFxns[0] = "&LEDStatus";
9 T- t7 J" n& s& j# w. cCache.initSize.l2Size = Cache.L2Size_32K;
* Y* G/ K5 |* ^1 S. H6 M8 \1 z: K0 X9 U
回复 支持 反对

使用道具 举报

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 */  e5 D% X* ~6 D6 b4 C" k. M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) E6 l+ `* k1 P' W/ j/ c* V( Bvar heapMemParams = new HeapMem.Params();* s7 U3 d5 Z+ B+ q2 G( t; `8 |
heapMemParams.size = 0x4000;  I" @2 V  M& o; K" h: Q, Z
1 T/ B* S% E9 j4 L$ _. s
var Memory = xdc.useModule('xdc.runtime.Memory');- g' o3 B" O8 @2 y4 B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. G, p4 C: U) @8 x8 [4 _; q
6 _' S7 b2 h" J" m4 l
我大约calloc  每次共计大小为5K*16bits,
! Q: `6 k  ]; A而默认配置才0x4000、需要改大。% C+ v+ E4 c0 f
# I: i# `( l' ?0 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 n, A; ~' ?4 z% f' x$ m  u
Program.heap = 0;% h. U, f- I1 y
Program.argSize = 100;  /* minimum size */, ]# l* E' ~) Q, i4 {
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-13 22:32 , Processed in 0.042211 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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