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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 B- d8 X1 L# B0 b3 }1 R/ W

% j! s% \% A7 a% s* [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ Z. S7 c* n  |! b' O& z5 Y' E
' T8 o  `  S% s1 W其他程序段。。。。。* @; Y- w  G+ _0 ^+ x
: }& Q$ J, y1 b% I; |8 M
   free(x_d);  P$ s* R" n( Y9 A
5 B# c9 S/ T# S: w! _+ S8 G" A/ w$ P
使用DSP侧单独调试功能,验证动态申请没有问题,
5 x9 e; c+ q: k7 Y6 P$ v& o6 ~* ^' O$ R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 H0 M) x- E  q0 L9 B. i3 ~; M
: X. Y. l* z+ }, Z7 Y/ l

2 s/ C4 u, B, f& ?0 z% h: w0 V5 y/ }- r% x0 i

. ?. W/ @' _# }* j0 ^- D
, E) G5 f4 ]1 Q' [  x
% U# m$ K2 o4 m- Z& l" z( W9 a; C" T8 p! Y6 O7 H& f. c. {

  B+ a, D: G8 _: p! ~1 g; a) e
7 a# V' ~" V$ u* P% k  @: M( ~; k) r5 w9 _4 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 B$ x9 L% G; b& U2 T0 h4 E3 \4 B' ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( G* S( i. C. u5 y4 I4 x. ?9 D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  E( P( ?) k2 m. ~4 g- `& |

- ^) w7 n2 z7 a/ t. |5 b, y是不是需要在DSP.CFG中进行配置
) {( d' P( f/ D6 i: G- V我现在的配置为
! G+ t* r$ x& h0 s/ N; \; J; Q! O) {. [4 N, S
/*
( [. N  e: k/ U, v. h$ d1 |' ]4 T *  ======== Operating System Configuration ========0 L' x3 h! H3 t0 I, y6 j. P& R( D
*/
9 u. @6 G; F+ R1 u7 S0 c$ K
8 d4 h. X) K  @' X5 S+ p# \3 m/* no rts heap */
) A7 p3 C! y- b0 ^) F3 i& Q4 V5 fProgram.heap = 0;
4 N# x- R/ f( E5 U! z/ o: X! p% [Program.argSize = 100;  /* minimum size */9 X- W; W# Y' J( f5 u' [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# a4 ~2 a& y3 q# o6 E, h% }

; J  k0 g0 H. a/* create a default heap */- i+ k4 p4 ?. C; m; o; G& A) L) x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- H. x! u) N) k" Q$ L1 lvar heapMemParams = new HeapMem.Params();
3 W# Z6 y1 {+ iheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% I0 R( F$ W6 H! k$ z
6 A+ @8 Q! H- [! {
var Memory = xdc.useModule('xdc.runtime.Memory');$ |# S( Z. t4 t# j- |& Q% J4 h# \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; i1 S2 a$ s1 ?( x- J+ e6 t- o
* e6 O0 q* m% I( Z7 Z- X: _% v/* configure System module */
8 Y, I0 g6 K8 Y3 Y6 S4 u" Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');
! z: f8 {1 k- j: d( ^4 ?$ cSysMin.bufSize = 0x1000;
4 f5 Y/ w7 W, Y/ X! F9 B9 S3 {SysMin.flushAtExit = false;0 G, R; a! ~6 U1 y" @1 Z  H
/ F6 a. |  U2 T; P+ b3 `
var System = xdc.useModule('xdc.runtime.System');
: C# x* j# Z! b5 F& d" M9 cSystem.SupportProxy = SysMin;
0 d  f! g# i1 `+ y4 i' N$ J1 J, b
/* configure SysBios to use the lower half of Timer 1 */3 }$ Z3 y) o! z, M0 R1 V
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; x: b9 M5 a" ~: T
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ ?, Y" o2 h! F/ Z
Timer.timerSettings[1].master = true;$ Y0 L! e) v3 D
Timer.defaultHalf = Timer.Half_LOWER;) G# A) x' w1 w) l$ r. O; ]% H
Clock.timerId = 1;
7 @+ O  U7 [9 o7 b' a. c- H( k3 a
, G) u$ q/ U0 D% E$ j9 E1 S
/*
0 c; F  R/ d( q3 G  Y8 M2 k *  ======== Miscellaneous Configuration ========
% t9 ?$ [8 l0 X) K0 k6 u4 N */
4 }3 u5 Z# R! G
& k5 B( p& o2 R9 ?0 x/* set default diags mask */
! M5 m" [7 T3 \) Mvar Diags = xdc.useModule('xdc.runtime.Diags');
& C! z5 C# M8 i/ I, p9 i# y% Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 Q9 K4 i4 b6 G* c4 b1 ~/ t
/ P1 w; F7 C$ a' f: ?7 N; [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! u& U. F! L+ X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 d+ H0 X& f+ f2 Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 A7 y1 g& S7 D, g; XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 [. a5 s6 p* D% |1 D
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' P$ C: N5 w8 SDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 N4 @2 E/ N& y! ?2 c7 F" i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 j* M3 c/ j: ?$ v( L/ W6 rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  e, J. T' W% p3 VDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 U* P  c* H$ Z9 T3 N) k: O. t# K( rDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 t, ]. F2 _9 T+ \3 |( D: FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- v* W' W' {5 r8 |( K3 k1 L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 W1 c' X' f7 M# w) }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% ~5 N4 S. l: H8 b. B$ KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  ^3 m7 @' d4 d; v1 Z9 d

8 |  p9 N" s. l% s! g/* override diags mask for selected modules */6 M, D+ v2 j# c- Z) u$ P
xdc.useModule('xdc.runtime.Main');
/ j4 w  R# G% q, u/ bDiags.setMaskMeta(
' ]1 w5 o. w) p' f% d. |$ s    "xdc.runtime.Main",3 L% i+ C, |3 O, q, h5 H
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 i+ N9 H% o4 e4 E7 ~    Diags.RUNTIME_ON
' `$ e* ]3 N& F);
5 y9 y: c5 T6 u4 F7 ~6 b6 a( J$ o8 O& n1 L. R/ D8 s; ~) ^
var Registry = xdc.useModule('xdc.runtime.Registry');
0 Z& h' n5 N* o5 _& rRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 I: N! ^. n) ~3 q) J/ KRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ {! {9 j! ?& H4 N$ G, V$ A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 k5 d8 h# v' I8 DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! W3 B; J4 k9 p6 q( T* Q) k! o4 X! ^: P
/* create a logger instance */
1 e4 i* B% m9 R# G5 m- Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 p$ d' i) r6 f6 P% A! \4 Fvar loggerBufP = new LoggerBuf.Params();7 n5 x- N4 p$ v4 @$ z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  @& Q, f9 W$ [9 `1 }) f+ SloggerBufP.bufType = LoggerBuf.BufType_FIXED;! E4 T# H1 q: D; s! D
7 v! Q4 t" q( V. v9 w9 v
var appLogger = LoggerBuf.create(loggerBufP);: Y0 ?( e. _4 T% c1 Q
appLogger.instance.name = "AppLog_Core1";
3 e0 G' g  C+ p! z" q, R5 |Defaults.common$.logger = appLogger;
1 \1 C" O5 B+ z; U/ ~4 VMemory.defaultHeapSize = 0x8192;   
# `" R6 d8 ~4 T0 J0 jIdle.idleFxns[0] = "&LEDStatus";
8 |( C" S' b7 S" JCache.initSize.l2Size = Cache.L2Size_32K;
8 s% _; h6 G/ V6 n0 A, m
& g% g7 f! u5 ]
回复 支持 反对

使用道具 举报

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 */
& C& g) F8 z; r! m) o" ^$ wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 w, P- _- p% d, b* L
var heapMemParams = new HeapMem.Params();. B( r1 U9 ^- J5 E
heapMemParams.size = 0x4000;
* I) q3 N4 J& [% b# S9 K4 W' S$ m# T
var Memory = xdc.useModule('xdc.runtime.Memory');
$ d! Y5 F% u: D- ^4 R, nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 f8 z# o% @* k, U7 _5 J/ n
2 N( D8 M9 B# `: Y) U5 P- W0 r5 D
我大约calloc  每次共计大小为5K*16bits,
2 r( V% v+ y: T! E4 O9 J而默认配置才0x4000、需要改大。5 w- T; Z& Q2 O4 j4 z8 l
9 w/ k/ j6 A& y, h/ Y# ^( Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) y6 @7 \/ o5 k5 o# e
Program.heap = 0;
" }$ Q: N  A) v( ]5 t$ f, k7 [6 wProgram.argSize = 100;  /* minimum size */
# u: x/ [* ]9 hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-30 13:31 , Processed in 0.040709 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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