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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 G6 k/ S6 v& d/ E/ j( U" V6 [/ Y0 D8 n$ Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; F0 A! y3 k' w! g  u! N( F: {

2 m1 W( R& U$ b6 B& O其他程序段。。。。。
$ ^6 x# \0 p/ P$ s+ \
9 P/ j3 V6 P" V, ]# T2 w   free(x_d);
$ s; [! x2 |+ G2 r3 c6 K: B% V5 |
$ u! d" g; W1 c. d3 `4 }, x使用DSP侧单独调试功能,验证动态申请没有问题,5 B. r  G0 y  T& R; |0 w* |

: s- C3 G+ I8 I  b但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 B: b& V5 ~: Y0 J, i  e
0 L7 h& S8 T! [8 K" F  p7 d
3 i* W" a; n, x  Z- ~
) a0 R' d$ S+ t  G+ j6 {$ Z

: E, f# n* A  y9 P' g* X+ P( ?: A/ t, h- ]2 a9 K, U
0 M! m3 C& A1 t# |* b

, D$ I' y! r1 l: I
& V9 c3 \, ?6 ?9 A: a4 ]. l4 H8 Q% l; }  s/ C
* G8 k" o6 L6 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- I1 B* g4 z  w# t. X8 N" n5 u
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ M4 n8 n' t' Y9 j" B/ C
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  y# o/ n7 G& o4 \$ F* h. e

& ~# g/ f! V: e. `5 R5 W. s  h是不是需要在DSP.CFG中进行配置
  [/ s+ @& R5 }3 M' }我现在的配置为
+ [/ o. e  k, x; h; a7 x4 E
3 u/ j# |) \2 P1 G) @3 I6 p$ w) z2 j/*9 y. C1 y: W- p" y; ]
*  ======== Operating System Configuration ========( R" F3 o0 p( G+ Z* w  O
*/
( v( x6 w  e  v: m% o, V
/ y8 u8 }$ T" q: z7 J8 m) y2 t/* no rts heap */
( T& P# h* _4 \4 ZProgram.heap = 0;
: W4 `7 x% K/ r+ x: K$ s! L/ X! JProgram.argSize = 100;  /* minimum size */. M2 m; D7 W) O- N& g
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 b5 \2 b" a3 l- t5 [' s1 M1 Q$ a5 K$ f8 k' R5 N
/* create a default heap */
/ Y& j5 R/ G) ], h( o+ _# b! W5 Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 L( v. `- G9 Rvar heapMemParams = new HeapMem.Params();
. D8 Q, U: q( M& _. DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% v/ w' ?" `+ ]2 N5 o9 w. q3 u: z3 l! I+ O# S
var Memory = xdc.useModule('xdc.runtime.Memory');
9 d2 I% [( u3 c, r( z7 ^+ M% p, XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 o& F0 p9 Z1 E3 i. `( n( ?% w8 i! n5 T: i* e% \- @0 m% g
/* configure System module */5 L7 N4 U) V; ?+ U$ ^$ A
var SysMin = xdc.useModule('xdc.runtime.SysMin');, U  U5 R8 q% c0 Z& D7 m9 r
SysMin.bufSize = 0x1000;, n* G. H) ]2 S& L5 Z# ]
SysMin.flushAtExit = false;% J" X$ i8 |. s2 M

! v5 f( y, l$ @/ x% kvar System = xdc.useModule('xdc.runtime.System');
) y5 d0 [( m0 I& m- a. LSystem.SupportProxy = SysMin;
: N% K* L  w% Z- ]9 r* O# o! a6 E
/* configure SysBios to use the lower half of Timer 1 */
8 v- g2 g# h3 F  hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 I' ~/ n3 l7 M* x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) U$ s* t, B0 x! b( g# TTimer.timerSettings[1].master = true;3 K0 Y7 b3 @- |* O1 f# L* `4 s7 J
Timer.defaultHalf = Timer.Half_LOWER;& Z, G" S# _; z1 v' I- e& @
Clock.timerId = 1;* g7 B3 h7 y+ K9 v" y8 d
4 h# K1 S0 S  T7 e9 x& d

- z: R8 A( R/ ]6 t1 K/*
  S% M" K/ h! [, F1 x *  ======== Miscellaneous Configuration ========
/ r* J; K6 b: S4 \ */
+ I. O2 A5 {% m
# Q5 B$ I2 P# B; N6 ?/* set default diags mask */
$ \5 |& C1 t7 V" Q/ S  U& a) }. ?, Qvar Diags = xdc.useModule('xdc.runtime.Diags');8 G+ _; H% N& C. `* N2 n5 b  r
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 X/ O1 j4 M' h! C8 H" ~% @; V
: `7 Q' |# T. R/ k# p' K2 NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 w4 N: p/ K$ c1 N& _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 l: G2 v* o0 [2 d/ oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 v4 \0 Z' O- EDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 a8 Q) B1 X) W. W& \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, i1 K% @+ u' O) W$ ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 [" ^. Q$ l  S& ~/ b& kDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, R; i* K6 h: g  I7 `0 G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 |' ?( q# `9 J5 c* b
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! e" v9 s8 E. C5 KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ d+ e, u1 |! U! H8 C; FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 a0 I% F, Y' @  T& k2 ?, M
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 V  D: l. p  d3 ?8 h5 S% ~: L* |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 z2 [% |6 V0 V; a5 B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 h" \% U+ D7 s: R7 l& L% o

& Q- w5 u3 N% P6 Y4 A- \/ O1 p/* override diags mask for selected modules */4 M- V+ ^: L2 B' m
xdc.useModule('xdc.runtime.Main');1 |! @  d7 {3 |1 V4 p3 R. r9 Q
Diags.setMaskMeta(
( P  L6 |2 K7 ^: u, {0 r    "xdc.runtime.Main",
3 g8 R, u! q! a/ t    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 I$ g# J/ E: Z$ R1 U) \    Diags.RUNTIME_ON
/ ~3 j  m9 S) K);4 ~- {4 n# Q6 X6 _" }3 l

9 g: m6 l& h' S0 y4 P- l; xvar Registry = xdc.useModule('xdc.runtime.Registry');
4 k( f5 D* d2 B4 vRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  N& |: O0 l# V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. _0 P' q$ J' s# K; h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- n) y; ^' A. B4 p' |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 S$ P- z' n' H, h% X" I/ B' M1 Q
5 F/ _% y6 B+ L% Q) D/* create a logger instance */
; t. G! }5 ?: U/ G5 z. qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 B4 ~" K9 I0 L* v: W/ ^2 Yvar loggerBufP = new LoggerBuf.Params();6 x6 q2 t" A  m0 J% E/ u% }
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 N' s+ B5 X8 h% Z1 J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ i! |' ]/ ?% l5 j

/ U2 o6 r0 V/ ^. uvar appLogger = LoggerBuf.create(loggerBufP);
) q6 p  K7 S4 r+ UappLogger.instance.name = "AppLog_Core1";- T! T5 \( I$ D8 ^; m- p3 d9 m
Defaults.common$.logger = appLogger;6 z9 ?, @5 Q4 y% Q
Memory.defaultHeapSize = 0x8192;    8 D+ m: r9 X+ j8 ^
Idle.idleFxns[0] = "&LEDStatus";+ \  d) K- I; L; p2 J+ e
Cache.initSize.l2Size = Cache.L2Size_32K;
1 Q1 O. w6 ]9 C  M  d3 [6 p. f: S# V3 Z* e; N! 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 */
* G6 d$ \5 u+ l+ ^( [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 X. L. h2 c4 |( ovar heapMemParams = new HeapMem.Params();
2 {- E* F! F: K1 c* ]heapMemParams.size = 0x4000;6 p9 R( r  Y8 v4 W
8 ?7 m) a2 J; \$ R8 s" y
var Memory = xdc.useModule('xdc.runtime.Memory');2 P% J  s) \, W+ A2 C( P/ Z) V! i# Z! b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ q0 q6 q( U$ Z0 @( X8 y" G! m* G% T3 L" x* d5 j& [: v* w0 _
我大约calloc  每次共计大小为5K*16bits,
8 E) U8 x4 f6 j) i! p- r9 Q! O而默认配置才0x4000、需要改大。
+ Q" D% Q, x& @7 G8 R# Q* B  O
, q) l( }; R, U1 {& T) h+ v- K& n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 a2 x& h2 L; |! o3 U
Program.heap = 0;
7 [2 f" {  e( W3 s# R, u; K+ hProgram.argSize = 100;  /* minimum size */+ n/ B% _. I" Z/ j/ K7 ~9 _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-16 01:28 , Processed in 0.044004 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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