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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 K+ \3 Q% f' [% t( H

. m% P, p' I; T# `    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ }% C. W! f8 Y3 |% D  T
% J6 _! k# ~: V! l! c& d% U
其他程序段。。。。。
& [* X/ r7 f( c2 [- O5 j* j7 h 6 @6 ?8 j6 @' Z& b$ L
   free(x_d);
  a3 P3 i0 A. G. E8 n  A5 [5 {- N" q) }( k
使用DSP侧单独调试功能,验证动态申请没有问题,
# G6 b, D5 B/ \$ I& g- I% {; @
* t6 {* V) |4 A% O9 T* R  U3 n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; l8 |4 z+ ?/ T

* y$ q' f4 G) k0 b% r, k4 [* @! N. F( ?9 E1 I% [" p$ j% j
) }% U& u4 F+ i$ m; m# S) ^

- d3 k& G  r; M5 V: ^- }. E$ Q- {& `3 z# P
& [9 o: _+ L7 m/ R+ C
8 `" `6 c/ ^3 i8 U9 G* L
1 E2 ^9 J. U- f( a1 H$ S
1 i8 ~3 `4 w% u9 ~& z: E- r
' c5 h9 ~5 D1 f) p0 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, q& s: v7 @. i1 j( e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; A" j, v2 i" Q. }(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 j5 k+ J3 f% b  h1 M" Q
7 a+ r1 s" Z+ J3 d
是不是需要在DSP.CFG中进行配置% x% x2 C7 W3 b" ^
我现在的配置为+ b, a4 g3 i2 K9 X  N
2 A$ e+ n) F6 I3 b# N
/*
' @$ N  ^( V7 e4 f, P, v" O% @% F4 p *  ======== Operating System Configuration ========
) i/ Z4 I; M( \4 [6 w  X */
& O0 X& t* [8 n. K* R  m) h6 E
/ V4 K5 \2 v+ B, c& {/* no rts heap */! P5 b2 `: K. |. J( f. D& u% t
Program.heap = 0;3 O1 q) {9 p+ c; H8 k/ \; o' h0 B' x
Program.argSize = 100;  /* minimum size */
  O  b$ g! {% }1 f5 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% S( \3 d, ^, A" k1 Y/ v

5 {" K7 h: {+ X; a/* create a default heap */* r/ E, W0 G% h2 \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 G8 r" D- C7 C, X! Nvar heapMemParams = new HeapMem.Params();
" ]2 ^# A% V) X) T7 XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 ~; X( O; _, h: M
% T: h. s- ]+ e, G: L
var Memory = xdc.useModule('xdc.runtime.Memory');
3 O- b9 ?7 B1 W! E5 rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 `$ ]. g9 q; h# p$ P
# ^; R7 @& {. A6 K2 |* E* w
/* configure System module */
! y5 [) W7 ^4 K  Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. ~6 i' G: n' f, ]- ISysMin.bufSize = 0x1000;3 D5 w  l9 W" M/ ~. M
SysMin.flushAtExit = false;/ h1 v' w; W. a! o8 @
; m! _2 w' |7 q: q5 n2 b, w/ W3 I% p
var System = xdc.useModule('xdc.runtime.System');. G. q  Q/ v3 r* I" F; J
System.SupportProxy = SysMin;4 S8 i; ?1 I2 l0 N# S  z
" `5 d3 ?0 @/ A/ D% B/ l
/* configure SysBios to use the lower half of Timer 1 */
# E" C  \% W' @8 N0 ]% p  gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- ~9 r( i$ u6 m) w. L# U4 ?& J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' R; R2 x' s$ W0 j( A6 G
Timer.timerSettings[1].master = true;1 r* @$ }7 x1 v* o7 i# ~
Timer.defaultHalf = Timer.Half_LOWER;, Z6 f" S- W% p. W3 @
Clock.timerId = 1;3 C# w3 U% n7 I' i& x( ~# v

. f" t" A. N4 I& D; t; q% f  A4 ^  t+ ]4 D
/*
/ l3 B  O7 V% {! g *  ======== Miscellaneous Configuration ========; p0 D; x5 m: a" U! B( p4 X9 X
*/
" l2 I2 |9 r4 I1 b$ K; g: h; ?1 E3 V/ K/ t3 s$ E6 ]
/* set default diags mask */
5 R3 n" ]; d# W+ }' ^8 `8 Hvar Diags = xdc.useModule('xdc.runtime.Diags');. u2 ]: o+ ~% n
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; L: Z2 h0 t. ]
* s+ Z, U! b9 ]+ jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ y6 H$ E5 X" ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! B" N3 p* O' l; |* m+ PDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 N; v7 N) ~% ~  J8 l( K5 u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; b, r# Y" J5 P) T3 t% zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* o* f  x7 j6 i( Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 B4 b4 q  `9 k. ]" t4 F; W
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' M# B7 a$ c# ~) e4 l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 U7 x: {# j) N5 FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- c5 Y1 z9 I& c6 E& V% M" XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: b5 k' d  c! ~/ W9 }& W! [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  y( s! q$ M" ]6 V: ?0 V# oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 Q& N; [6 z6 |9 d1 Z6 w6 wDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 S; d1 i8 F  l  N$ ?0 q9 ]  _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- Q, N" U+ C0 z, v0 W
6 c8 y4 V, ]8 y2 i: s! p/* override diags mask for selected modules */
4 `4 r9 v& `1 L" f7 Qxdc.useModule('xdc.runtime.Main');+ E% i- Y+ @5 F2 V4 _" x2 ]! H: b% I) c/ f
Diags.setMaskMeta(7 V! C7 _. H3 Z* G0 {3 l
    "xdc.runtime.Main",
- w+ s5 |3 F/ W3 W  C7 R    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 N8 O) I% i' v( k( w    Diags.RUNTIME_ON5 [4 L% Y' ]& c  k$ p7 g$ s8 Q; O
);
) P* C2 U6 e- A( _) _2 f3 f$ m2 T0 i$ ~% }
var Registry = xdc.useModule('xdc.runtime.Registry');6 i- V5 j5 k; o) s9 I5 R: ~" Z  J
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* c# H; j4 n: P- s0 E8 LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( @5 n& n/ Q7 f3 W' p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 l2 L/ U6 m- _6 |9 U/ _0 T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 T3 L$ \7 [  O0 x
" m# Q/ K9 d, `! k0 l/* create a logger instance */
- ]# b- l0 A& s6 ^5 g3 f# Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% N; ~, H8 c7 f) n5 D' Ivar loggerBufP = new LoggerBuf.Params();1 {! h$ L! F4 J( A, l+ ^. D. J
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- u, v- @9 h, M3 y/ l* z+ p, nloggerBufP.bufType = LoggerBuf.BufType_FIXED;" s- j! L9 s! b' L
3 S1 B7 t6 \# i+ U* }
var appLogger = LoggerBuf.create(loggerBufP);
# H+ Q6 G4 c( S/ Q4 F5 FappLogger.instance.name = "AppLog_Core1";* J( R/ C  P! \9 o
Defaults.common$.logger = appLogger;" l% |! F0 F& J; i$ R4 z
Memory.defaultHeapSize = 0x8192;    7 Q9 N) u# S. h2 d, ?( Z6 ~
Idle.idleFxns[0] = "&LEDStatus";5 H/ e9 _  O3 l! M6 L/ Z
Cache.initSize.l2Size = Cache.L2Size_32K;
+ X/ E1 t% M( s+ Z' H+ |0 s3 g" @1 F3 R# b
回复 支持 反对

使用道具 举报

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 */
8 _. L& m+ t, e+ f* g- fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 B! @. G6 P7 c+ Q5 Yvar heapMemParams = new HeapMem.Params();4 M5 X6 z  G6 b8 C* l
heapMemParams.size = 0x4000;* |* f+ {; t8 z, k
) P' w$ h% O9 H/ p" w' `% D
var Memory = xdc.useModule('xdc.runtime.Memory');
5 `% k' F* G7 l* w: pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- D% N4 |4 P. a' H+ {8 |2 C- D5 v; t& \) e) O3 H4 Q% r6 f: @6 H* X
我大约calloc  每次共计大小为5K*16bits,
! l+ w1 u  ?7 n4 x' X而默认配置才0x4000、需要改大。
: g+ I( O% W5 ?% d8 m% A; Q; H3 ^, u1 r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 z  O" h0 ^4 w' z  H8 B$ t% M. vProgram.heap = 0;
$ e( |3 u( \: Q! X- h. iProgram.argSize = 100;  /* minimum size */
, n7 z2 |9 d* ?3 y" T' q- GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 12:18 , Processed in 0.041725 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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