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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' M- H. C* _9 a
" m% Q5 _$ p$ @3 _: I  S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 @) u5 R5 G, d! ^6 c6 {' w  V4 V1 ]) l# X: I. c" T
其他程序段。。。。。
7 y; r5 b7 F2 K) k. Y; \
, i& u. S' E/ f, k; R   free(x_d);
) o# F! e2 n  `& Y6 G
5 `" X: q/ ?- I6 y# j" E: \+ @使用DSP侧单独调试功能,验证动态申请没有问题,
: C$ r/ `7 }9 ]
; P: t& g3 g$ a& q  j+ Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" [$ J8 ?1 }6 e9 p( U" d7 B1 Y- o
7 q. z5 t2 j+ a

0 l7 k9 A8 O$ ~0 }7 Q
9 ?% }1 m6 W; b3 v( l4 S# B$ X5 A8 K; K. X. N& Q  p) L; F
- p) ~. ?$ s7 v& i) l6 C

4 J, X4 f- g* [; c7 V" k9 f: G4 _( x
" I; c4 G- O1 v) i' ^( X

0 @' x* g* h4 u: \" N0 [8 V' l* q1 u5 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 _3 G- F# {6 J- `6 X& R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# U8 x. c7 V. v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): W' M5 Z3 x$ z# X* Q' o& h
3 q) y# S5 a! ]% x% e/ O
是不是需要在DSP.CFG中进行配置+ t6 j% [: `. j$ R, m
我现在的配置为2 X2 ?5 ?7 j6 S- M4 t
" {0 c! k( W2 k" Z/ \; G
/*
; y4 r$ g( F$ P  c$ ^  Q *  ======== Operating System Configuration ========
3 p; g- z9 n# N' E */9 e" U/ [2 _' M! m* p  {9 @* P0 g" |

  A, b! B) @2 Q5 x8 y6 K/* no rts heap */! U! F5 _! `9 ]9 [# o) y0 [
Program.heap = 0;( H- }! Z! I" q6 |7 V( h
Program.argSize = 100;  /* minimum size */
: R, o  w+ J- a+ }0 _- F) ^  }5 {Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; c$ l+ @* d1 H9 L# |  D
* s- y/ }& U4 G& c  {' m
/* create a default heap */: v8 N$ P) M5 i1 v& _8 E0 v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* L  p$ G9 E0 a6 ]! R/ f! wvar heapMemParams = new HeapMem.Params();5 w( r' X$ L& s
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ p# l- Z+ I& T0 W  Q, ^. Q5 a8 p  b3 A2 U2 [$ u
var Memory = xdc.useModule('xdc.runtime.Memory');
3 D8 K1 k# W0 Y% M' b& C- _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 e2 `, \4 K' k7 y; j5 r0 q
( o9 T$ x9 H$ u/ U/* configure System module */& A! h3 F: @0 j: z5 q
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* O3 l2 |$ Z# x2 J- Y$ j0 qSysMin.bufSize = 0x1000;5 C8 M) D0 J' n$ B: \+ ?3 y$ L
SysMin.flushAtExit = false;
4 v# t3 D* i. q* u2 Q9 g
" n, x# T: t1 R1 J3 j$ O1 Rvar System = xdc.useModule('xdc.runtime.System');
+ A4 {( M6 I0 W* S) t9 t. ?System.SupportProxy = SysMin;
$ k9 i5 F- l# Y! Y6 I; s
9 y4 R6 x; X9 |* B% a/* configure SysBios to use the lower half of Timer 1 */% L3 L6 f% n4 }; ?' F4 X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ e+ `$ T+ T% A. k* F) R2 Evar Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 U* P" E+ R9 J& Q9 o# w! f4 ~Timer.timerSettings[1].master = true;
4 o# `8 a! i  W* {8 ~$ n/ ^Timer.defaultHalf = Timer.Half_LOWER;
  W9 {" M9 C. X9 S" ~% \( JClock.timerId = 1;
& m, n% S) q4 U3 [/ e8 ]. F# C1 x& i8 Z  H' U
. |3 a0 Y" k) l1 b+ \
/*
" @' Q  U3 @" e/ b4 b1 J *  ======== Miscellaneous Configuration ========
# f' ?9 \/ S* V */, v0 F! g8 A$ s$ e- p& |

7 y. H$ B  N4 i' z/* set default diags mask */' C% p  x9 |' m" F
var Diags = xdc.useModule('xdc.runtime.Diags');- `, p  B* i, N  b, r  y' a  d
var Defaults = xdc.useModule('xdc.runtime.Defaults');: B3 y9 k. Q: l! m  F5 V

- ^4 _; _) U& T1 ~  s2 kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 O1 t7 b1 k" [: r- S1 v9 jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( W& Z; Y4 B7 c+ QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ @# h7 f& D! C) N* _+ b. ?Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* F+ Y2 p$ j' d) J3 KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 s4 L$ s  I8 q- E- e4 ]; f6 p6 sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 e& |3 Z6 S& r, @& v3 wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 ~, ]: K: a4 I& A2 r' WDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 U/ P/ V3 z+ }  z; b  x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 Z( s; d' W8 M1 e. ZDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ X4 m- A1 B' [. t9 dDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- v) F9 X1 {* c8 A; z) r8 O1 H" H8 f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# e! o, g) g1 W3 h, b: y) y3 ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. t- N: q8 }5 L9 ~5 |/ L. ^# [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% X6 P( s6 q" H' b( f

% \4 Z" n0 ], b) }/* override diags mask for selected modules */
( N- l+ _; {- \! Q0 {1 r* W0 Mxdc.useModule('xdc.runtime.Main');8 N# @4 C' D7 U& W2 w  M: {
Diags.setMaskMeta(7 V4 ]( k* b* e* }
    "xdc.runtime.Main",
1 o' [' B& T6 `3 u    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 W6 [7 ^6 p* O5 g, r
    Diags.RUNTIME_ON2 \; b. @  R7 e7 L
);
- g0 I. \0 R- C' x' H
% x4 ]' ~$ B7 E7 ^* x$ m1 s* ]/ Zvar Registry = xdc.useModule('xdc.runtime.Registry');, R: H! b5 u3 F8 x4 {6 y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 |) L4 j% r( o9 fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( z5 i; X: D- v% F" G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ v* d5 E) e, F1 O+ n4 lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;( N0 K& e( o: L1 J3 P* Z: h( }' b

* G( z3 i4 ?- C  o6 p# S- O4 {/* create a logger instance */
, o5 M* o6 H3 J. w& kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& I+ a. d; T4 q/ z
var loggerBufP = new LoggerBuf.Params();* W/ w$ d% f& K3 j" S$ P+ X+ z7 H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' \* }2 Z$ `9 W( j$ O
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% _( h# U/ N4 C: p( A4 z

, P( E& r- h6 Uvar appLogger = LoggerBuf.create(loggerBufP);
4 J% P$ Q3 A1 m) P* O+ happLogger.instance.name = "AppLog_Core1";
, g+ l1 `8 H5 S! a/ s( Y" g( vDefaults.common$.logger = appLogger;; q. {0 L0 ^) i: ^2 F
Memory.defaultHeapSize = 0x8192;    ) P* I& Z" E+ [7 J, Q/ T; z% s
Idle.idleFxns[0] = "&LEDStatus";
/ k/ X8 J+ V' {Cache.initSize.l2Size = Cache.L2Size_32K;
3 G9 c9 @5 x5 j/ z& P% B8 `% O
. Y! m' r! w6 g( M% V2 d
回复 支持 反对

使用道具 举报

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 */
" n1 c$ H! c% Q3 y7 Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 j7 k+ x% O, V# Z5 B9 d' u2 Z
var heapMemParams = new HeapMem.Params();
/ O) H! V8 F  p0 x. bheapMemParams.size = 0x4000;0 |" h9 x+ S/ Z8 m) y

. n. `' T* r7 [' r" ovar Memory = xdc.useModule('xdc.runtime.Memory');
2 d  _) l- [7 e2 h+ |/ {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 U0 M) B& S  D9 t  G# {7 ^' Q8 f0 }2 o$ g$ A2 h+ y
我大约calloc  每次共计大小为5K*16bits,
8 b" W' ?) s3 w: z而默认配置才0x4000、需要改大。% }$ z* J& y# n0 V
/ @8 B6 ~0 ^( ]2 W7 \! @& G" H. ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  q( h& V( U+ A2 u, V, O5 a. I
Program.heap = 0;$ P0 `  w& K* X: Y  D' W
Program.argSize = 100;  /* minimum size */
- C6 i) q% i9 SProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-27 04:29 , Processed in 0.046714 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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