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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 B) e( F: h6 J4 o1 h2 z' ^- Q/ `2 J7 t; e
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' z( Q4 b" Y) ~8 A* i- h' n, N) a$ Q
& m2 Z5 d9 K  p" @# e# p其他程序段。。。。。, U! g, ?3 n  l7 h- ]' w' N

. ~  ^5 p$ ]3 V. P2 ]; N   free(x_d);$ \  F, S# L3 L: r1 R
+ p/ ^) x7 c) e6 j1 c
使用DSP侧单独调试功能,验证动态申请没有问题,4 K1 f+ w- c- X2 X7 k2 u8 ^& l
: E+ B/ k! `$ l% q- [3 d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' D* C( Y: t9 x' r7 }+ u4 p. _

1 G. C3 j* n+ G) L/ L, r. t
# L( N2 o5 a1 |6 S  j1 K  v, Y
, t% R6 g6 q% z- F6 b# l' p1 s2 `; u+ a9 U
( m' J8 a" x1 B, u7 L
+ \8 H$ B+ _2 r4 W7 R* j
/ L/ X7 y1 L4 b, @1 s* @% x

' f3 G/ Z' [/ q2 g8 m6 p
5 g/ n! t& Y8 ~: V8 a6 y
1 [1 s$ [- s% V9 @' U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 Y% B$ }* u5 N/ q8 O& j4 D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* Z+ s' z1 P# Q) e3 A9 ~+ ](不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, o) z" e. X) c* _0 g+ [

- H7 K  f1 v5 v! u. ?是不是需要在DSP.CFG中进行配置
4 a- o0 D3 p0 ?: s3 u& ^0 {4 {我现在的配置为  _5 y! {; ?4 W9 q
! Z- g, N& }3 H0 T  J- H0 l  {( I3 b
/*
8 |0 H: n% f  ^6 N; v" k! N *  ======== Operating System Configuration ========
2 E0 C  `2 m  g3 v( j- \ */- D3 {% Q. o: _
9 b) O) {+ O; n1 y% @. U" i$ k
/* no rts heap */
6 `- c1 M- ^3 \7 b7 T/ yProgram.heap = 0;$ j$ H; p. z* @. F+ W8 J
Program.argSize = 100;  /* minimum size */. q1 E. C: E. D9 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 o' Y3 @/ i# d% p. x9 T7 ?

2 t* Q4 J5 B, n4 \- t/* create a default heap */. s' @  X! _' ^$ v( B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. f% a0 ?  W: ^var heapMemParams = new HeapMem.Params();4 ?$ d/ G. L7 Q2 T' ]
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 u  I2 I+ C% R4 \

' A! a" g# u' ~
var Memory = xdc.useModule('xdc.runtime.Memory');
# p  a; }& G4 j+ j( k! GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' r, ]6 ]3 ?( Q, P( v* ~/ m
! `/ Z% O5 \+ W6 l9 j4 q2 ?/* configure System module */
7 u; G6 I8 `+ Q; K) h  m# _  }( ivar SysMin = xdc.useModule('xdc.runtime.SysMin');
9 {: p& t" J/ \: G, c6 K$ wSysMin.bufSize = 0x1000;
2 B; t% ~- g; F! I" {+ n, _& @SysMin.flushAtExit = false;7 d, ~# d# V4 Q7 ~
7 b' f: f; e% d
var System = xdc.useModule('xdc.runtime.System');# f8 w; U" J0 h! k5 ~1 e
System.SupportProxy = SysMin;
! o% j& a# n0 F; `3 w
3 C8 g! o7 [  I  G' @! s. Y  A/* configure SysBios to use the lower half of Timer 1 */) [7 V+ w6 o$ v, O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( o  Q3 A+ R) f6 A5 V
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' o* B8 i* q/ W! w9 [, k: d
Timer.timerSettings[1].master = true;
  u* p$ \3 ^/ l' E' Z3 Z5 `Timer.defaultHalf = Timer.Half_LOWER;
  s) d3 n; l7 K7 E+ d. Q1 tClock.timerId = 1;" x7 S" v0 {6 M& B3 G8 r2 }8 M: J
( k, t% j" k  v
$ I  Y/ i# @  S/ v& U$ e8 x
/*
" [. N; L; B/ E7 F0 _9 |8 X *  ======== Miscellaneous Configuration ========( R0 m; r% }- w6 [- z7 x
*/
8 ?; L0 g/ @2 D# T8 \( I- x9 f  M  o* b7 j
/* set default diags mask */
: ~3 l6 l4 c& p% f- Lvar Diags = xdc.useModule('xdc.runtime.Diags');
' C* t! @1 Z0 a0 }; U1 Svar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 _. [; Y5 U# P# ?, ~
# F, q5 g' ]$ e, V6 y1 U6 dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. F7 O' P4 N& s& w* B/ ^; e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 y1 j: D2 O7 z2 U; U0 R) b: kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. x* h) p3 ?1 FDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% I$ d5 a4 r0 _# J7 K2 CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% \- J0 N& R5 E6 j) L' U; `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 H% u2 d9 g6 Z9 q: N# oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 E) I) t9 k2 F. C9 @4 |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  W% R+ b+ N9 U! Z- l/ l7 v  ~Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 w% \3 G' M- U# [8 N1 [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- @6 |0 ^$ O2 GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! p7 g4 \: X" d9 I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 D6 x1 h5 t, C9 c7 z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 J8 y1 h  z7 g9 X, e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 G* b% F2 ~# {: d7 D
2 n! V+ T/ A1 W4 y( x0 F
/* override diags mask for selected modules */8 G% E: r2 s9 d6 D2 M
xdc.useModule('xdc.runtime.Main');
( G1 d5 p9 O& ?  V! M& ~5 eDiags.setMaskMeta(
, A3 B' Q& x7 X/ c" H. N    "xdc.runtime.Main",
2 _4 K7 T2 S6 Z    Diags.ENTRY | Diags.EXIT | Diags.INFO,% q6 i' Y5 O) S! \3 ]& s
    Diags.RUNTIME_ON
2 i  a; j: f8 {4 W6 x& X);
- v1 b  K4 R# C& g4 h5 L% x. ]7 I5 h
var Registry = xdc.useModule('xdc.runtime.Registry');0 \* x1 L; p: X  H2 B  d; u3 u
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  X0 K9 S1 c" K% q" M  T5 r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 j$ I' C+ B- N3 R5 hRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ R. R5 q* {# b" U* s( F" D# s
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ q- f5 ~) ?+ ^7 v6 v# g, l: y% k$ H0 a( X* k2 p$ m8 O* Z2 W
/* create a logger instance */
2 U8 s, p! d0 p0 r; I! ]* j/ a) mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 `" w& @4 ]; e. o; ~& zvar loggerBufP = new LoggerBuf.Params();
& U! E! `' H6 K6 i  ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. a, |0 k* g0 d9 K: i8 Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ a6 t  M' ]' n& C9 T, u& C7 D. X* K+ n
var appLogger = LoggerBuf.create(loggerBufP);9 `$ ?$ o/ G2 E* [/ f+ i( R7 V
appLogger.instance.name = "AppLog_Core1";5 A' n7 C, J( ?. f  D8 S% h7 o
Defaults.common$.logger = appLogger;* w( {( X$ Y+ c, p
Memory.defaultHeapSize = 0x8192;    # P* G+ V2 Z6 R6 T  L
Idle.idleFxns[0] = "&LEDStatus";
, p9 n" Z9 o/ b' w* \, E+ {8 mCache.initSize.l2Size = Cache.L2Size_32K;  u* `0 G- |# F5 k( W. l
7 g1 I9 Q7 v9 U6 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 */
. g" o* H, A; K) Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ g/ y3 k2 ?$ a+ `) L1 Z( l
var heapMemParams = new HeapMem.Params();
# n$ i) `1 ~" theapMemParams.size = 0x4000;, `( S4 c8 u' k2 e& J

% U* a7 b8 t  D+ \1 x3 {var Memory = xdc.useModule('xdc.runtime.Memory');
% o2 `( ^1 s0 n) XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 ^: M5 [* A9 Q+ Y

! B- P5 j- v  N! q7 s+ S' u! Q我大约calloc  每次共计大小为5K*16bits,( C9 [0 k& k/ g2 g2 v
而默认配置才0x4000、需要改大。
) d1 K) s. h# g- @, S/ r3 O! G+ q& X# U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 V- y3 ?8 R* b, h
Program.heap = 0;
* T/ \: P; M7 l& a, a6 \8 Q+ c5 jProgram.argSize = 100;  /* minimum size */
4 G9 ]  ^, P+ {7 H, VProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 23:04 , Processed in 0.042792 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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