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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ i" @+ a  c# K5 X$ [) d: X  X" w; u7 y( b! W' `
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* `9 ?% q0 b% B& Z; A, E  H( n) N$ t1 b. L7 G8 z3 `/ _# g
其他程序段。。。。。. {* N! k0 [" W5 Z% n" P' p

, b8 _* D9 _' R3 U# j9 f8 {   free(x_d);! {6 o0 G: d: X8 F  o

; F' r8 C6 c- F, |1 S6 x4 x1 f) O- h使用DSP侧单独调试功能,验证动态申请没有问题,7 I+ T; A% l% q7 ~& g
# k2 p' m1 Y2 K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ y# ~% H( x( j/ _
, a% w5 m9 q5 k1 \$ h: P
1 p6 ]  ~3 E* [1 \9 r& k+ Z

7 s( A/ L8 g( X. t" o, z4 v( s/ L( r- _" `
$ B& Q0 z- ^6 k9 w! K6 e

  z7 t8 M7 S6 O0 F$ E3 t- x& M: ~" Z$ n" v2 N

8 d* y) J9 ]+ I" G! B9 L* N
5 A- V9 i7 E! d- g# c5 ]" b
- O$ T& o+ K& M& _: g2 S8 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ n* r) d( g2 D& k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( |$ E+ c& R5 H' J# r9 X
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), @5 l7 y* {5 y! q  r1 U2 ~( x
, y# X  V/ p8 l: L8 D# ?
是不是需要在DSP.CFG中进行配置$ o' D0 m; k9 n0 b) \  C$ W
我现在的配置为  b$ I6 k( d1 J

% k& L! ]: \0 L- \/*" f! F* E% E0 R6 e; }
*  ======== Operating System Configuration ========* K! L5 @: P* f$ Y9 o, n7 ]
*/
% N$ ~  B  O' N/ T2 F' ]0 L" b
6 N" G4 j, G* z  P: |( W- L/* no rts heap */
" j, a4 a3 {# @* k" \Program.heap = 0;
- t/ B! {0 ?7 d& `+ f! u8 YProgram.argSize = 100;  /* minimum size */1 {4 L: ]# k- k. w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. w) k% U3 n2 H+ w" m% }% r$ ^# Z* P. N& x9 l+ {6 P2 _
/* create a default heap */' |/ r8 J# ^0 m1 r& I  H+ d" y# W9 t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' Z6 M5 q  Z) {1 nvar heapMemParams = new HeapMem.Params();
! K0 R8 u9 p8 L- J( O- FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 W# X) ~, Z3 M, p6 I7 v: q& ?! i

! T0 k/ f: w3 j* B& J' j# d
var Memory = xdc.useModule('xdc.runtime.Memory');7 @/ x  Y2 Z% g& X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, }/ [2 H% {! D5 H' x" e

1 P4 x/ S; g# d* O5 M3 D1 B" }- [/ K/* configure System module */
2 p. D) I& \4 t& E" `& L3 V' S% kvar SysMin = xdc.useModule('xdc.runtime.SysMin');
: Z' F3 W' j; D. t1 \SysMin.bufSize = 0x1000;" B8 U! D- A2 v7 g5 H, K
SysMin.flushAtExit = false;, S: a7 E5 ?3 _- Q3 x& @

! x; e# m6 i1 r6 w1 j$ N- G8 [var System = xdc.useModule('xdc.runtime.System');* R- |4 f0 Z/ m
System.SupportProxy = SysMin;
% g* m% |5 I& ^$ I- [- N1 c% i! m$ v5 L
/* configure SysBios to use the lower half of Timer 1 */
, P) [5 i/ J$ `  G. J  t0 `9 o1 @var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% \( x+ ^4 @$ r( {0 m; Mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');! O5 [3 |/ [* S( N+ l! m/ T" E6 N! p
Timer.timerSettings[1].master = true;
7 D$ `6 X- v; v/ `  I8 eTimer.defaultHalf = Timer.Half_LOWER;
  i+ W. z. l$ {5 B4 KClock.timerId = 1;
0 W( ^! }6 ]- o7 d, m6 }- h
$ A3 y2 g/ p- f) I* Z3 T* |4 P4 _' [  p5 v9 V; H
/*
- o+ T  R- i- [2 A# ~. Q+ _ *  ======== Miscellaneous Configuration ========! H" x8 S& r# V3 _0 K4 _
*/
& d& N) s  L$ n. u9 c6 z' k
/ z+ X6 W8 [, T/* set default diags mask */
7 Y" s+ \  R& Z: C: B! B/ a3 T) L2 pvar Diags = xdc.useModule('xdc.runtime.Diags');: s. G' E$ y- Z5 H
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 J2 ~5 a3 N+ G9 Z# x; Q& s* c* C, n
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 F0 }, {1 i" s  _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" g0 n9 F, l/ W+ V$ ]
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- I! {  `3 b( {& @- H8 R8 r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 @2 x) s) E" A2 hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 d, j2 ]2 n- a. [0 NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" g; J* ^3 ]% H% F3 T( G
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! |2 S* j7 ^2 F
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* T; a! a  Y. o% |* b4 Q% h& g5 V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 E; N3 \+ Y' E! |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 h) o, k2 x: H; b1 @0 \# I, u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( d$ K: u- `  O! z+ f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 K$ l9 c+ w( {3 A0 A& CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# s8 j) u7 c8 Z& Z- l8 A0 vDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" A$ J9 V. h" U
, c. \9 r! r+ {
/* override diags mask for selected modules */
3 ~& V- f7 L5 H0 U7 B6 Dxdc.useModule('xdc.runtime.Main');' u2 b: j6 A0 A7 _; P( P
Diags.setMaskMeta(
7 o% C" P8 U+ z+ s$ Q* {# z: I' w    "xdc.runtime.Main",
7 y; x! T$ Z( r- M    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ m( ?$ w4 z! Y) s
    Diags.RUNTIME_ON
  @) U8 B9 C- R! y+ h);/ C+ C) g$ V; [# }- k' k8 k
. G. k2 m: v$ V: X6 k, ]$ o1 t
var Registry = xdc.useModule('xdc.runtime.Registry');
4 t9 W+ a1 b0 F3 n! ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( d1 j- D0 S  d) {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) E  W* i% I) P0 p* K* h2 kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ T* @: K9 u: [6 JRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;% l" A# W$ t, Q  ]- N% o) L

* V  R5 C; l- [* w  x/* create a logger instance */
* z0 o* b' \) V& ]4 A5 ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ ~: f* [2 s' J; p" J. T/ f8 F5 t
var loggerBufP = new LoggerBuf.Params();% N7 _- M% I1 q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! u: j+ e( U3 c+ ^$ {0 V: X4 W; QloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 K* o& e% I) p  B* K! P
8 j" O3 n5 u) W5 ]$ o1 c* Avar appLogger = LoggerBuf.create(loggerBufP);8 q' K* Q0 `6 |1 t0 S
appLogger.instance.name = "AppLog_Core1";# ^% X: a- Y8 Y) D5 r  a
Defaults.common$.logger = appLogger;
8 @% s! K/ U- `3 s1 iMemory.defaultHeapSize = 0x8192;    4 q/ S: B8 r5 A8 l+ t, `
Idle.idleFxns[0] = "&LEDStatus";& a, ^# B' Z( Z6 F) }
Cache.initSize.l2Size = Cache.L2Size_32K;
) _2 h" N# A3 a: D' Q$ g9 \* A. W! b0 _1 C6 M2 R% _
回复 支持 反对

使用道具 举报

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 */
3 Q) y: q4 H- X* E$ M/ `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' \& i  d- U0 H# M- M8 a
var heapMemParams = new HeapMem.Params();, \4 o4 ^9 x4 ]' ~4 f
heapMemParams.size = 0x4000;! P, o  c, W+ ~& m

6 ]' j4 R* o3 U7 i! T& i6 G& bvar Memory = xdc.useModule('xdc.runtime.Memory');! P& X! q7 h/ E# ?2 N  |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' h* L' @  k2 ]: O

' _2 a  U3 \8 E3 v9 a我大约calloc  每次共计大小为5K*16bits,
' I" V& X. _! {0 z' ?而默认配置才0x4000、需要改大。1 m4 i5 I& i  C9 J0 T* V

8 h' e3 e1 b2 D/ K9 g0 X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 c. v4 y& D  h& _6 p) i1 w
Program.heap = 0;  x2 v& e8 R1 B1 [0 ^% y3 x1 @
Program.argSize = 100;  /* minimum size *// h* g: @- X7 A$ o9 G
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 18:36 , Processed in 0.053020 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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