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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# d4 {& x! z1 h  V2 `* \% r* x# `

' O; c) W) Q# A3 L9 f! m1 b; {' J    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 _; K, W, U) r
9 F1 ~# e. v  `其他程序段。。。。。
$ S4 M! V" P- p$ V, d. k 1 V  D2 R) h3 O) G; M& h6 z- }1 r
   free(x_d);
! c" q, z$ Y+ N$ l1 h' H3 Y; L! O' E; C
使用DSP侧单独调试功能,验证动态申请没有问题,3 t2 q" q) T8 b

2 |2 l% O( i" ^; P8 f# f+ p: H# c2 T但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ v# x# J7 x$ Q
9 j/ `9 r' M9 z4 e

& A8 |$ g; s; D( d7 {5 n* @4 L8 E( J2 p. D
. o1 O! z6 V. s, I) M! x8 I

  v3 ]  ~% e9 v, |
4 V, \2 \4 y: ]! H7 Z- A
" W2 T7 D' [- Q
' Z3 v4 `2 h" }5 |# r
* R) P* ?8 T4 J" j- n: Y$ s) i3 n3 Y0 Q7 P& R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 I: r' a8 |! ?' M4 E4 W& O我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ t  x# N2 m0 G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 ^6 T! n  l) s# `4 b9 I) E3 G
* m; U- I% y. N! e8 o8 @7 r" `+ V+ e
是不是需要在DSP.CFG中进行配置
6 c- g: i9 V& L9 j% \我现在的配置为
, b6 F" B# o) L  W
. H+ t5 a) D4 e3 p8 L9 f: k7 ~- |9 |  w9 R/*
3 v$ S" d3 [2 p' D/ S *  ======== Operating System Configuration ========% k' Q' {% {1 m# Z. _( o/ {0 g
*/( x; e: a3 K. L/ z- l5 x5 n
0 F( Q6 o. k0 a2 \- P) [, A
/* no rts heap */$ i, j4 k) M: U' r: _
Program.heap = 0;
" Z- o( W7 R0 U/ y) OProgram.argSize = 100;  /* minimum size */( H6 t) b' V! p# @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) m3 e# v7 M; ~$ S. d

! I: w7 P3 g* N! P$ K/* create a default heap *// w/ k2 |! K) d5 n& k7 D+ |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 {6 k6 T. r" [, w! d% \3 @var heapMemParams = new HeapMem.Params();" z+ a! l; _: {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 w2 r% W$ N7 ]! g# [6 }

) `0 r& L; F% U! K, c$ D% ]
var Memory = xdc.useModule('xdc.runtime.Memory');7 A4 e4 M5 ~: W- j  w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& J4 ~: x2 |% j  z
. E# ]% B5 Z+ X0 j
/* configure System module */
& [2 p9 ~8 c! A/ d& Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');, }8 e; N; h& A( D) j
SysMin.bufSize = 0x1000;4 O* e  @9 N: q" N
SysMin.flushAtExit = false;
2 u2 W' |8 z. w4 u0 r
# q' {# j: x9 @  rvar System = xdc.useModule('xdc.runtime.System');
8 S. P6 |# j2 p: HSystem.SupportProxy = SysMin;3 t! S; b0 d2 Q! h, d
7 |: b2 E6 X1 ~6 |7 F9 U7 R
/* configure SysBios to use the lower half of Timer 1 */
$ Y5 k& {- k" vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 C8 s* Z) G" I& ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');6 ]9 Y9 D% u( y6 l1 B
Timer.timerSettings[1].master = true;
( S7 J" r7 v% d7 PTimer.defaultHalf = Timer.Half_LOWER;1 e2 i* `5 H& [" W' @4 b
Clock.timerId = 1;% l2 a% `/ K% g4 ^0 v

; c; r: t; T; @, C: V) }* B6 V* g9 }3 |# @9 `  K
/*  V( [/ u. W$ W; T6 b( E, x
*  ======== Miscellaneous Configuration ========
. }" T2 K; N. R9 M; |9 l+ o5 e7 B; c. C *// l7 P1 T% D8 b) r; P$ `; [

5 c& k0 g! [8 ~6 D- Y/* set default diags mask */
. ]: H( H; x0 Z7 \" C7 b7 Nvar Diags = xdc.useModule('xdc.runtime.Diags');
# E& g  e( O1 T1 N6 j+ ]var Defaults = xdc.useModule('xdc.runtime.Defaults');, i: q6 \# x' O

3 w' w! P  }* h0 h/ QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 N8 Y0 F, ^- a8 ?+ nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  d, f& H1 E" Q0 w5 a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 U" i" Z" P. f6 S  W% g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ @& E0 M6 Z6 v8 z0 c
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 T. _5 D8 @3 B" J9 IDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ _- m+ c+ Y8 M) T, K/ ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 y8 C% J- a) r* ~# `8 zDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: G- B$ H2 Y( U" _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 t" Z1 _4 ^+ Z, E# m
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 o4 H2 }* R* x6 h! J$ P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 X* o- X) I- l6 G+ H" O& cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ ^( o/ r5 f# K- m7 j4 w6 s# r: W
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% g1 r; r2 V" M7 F: z4 V5 ~Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 s. M4 g+ `$ o: L( U

1 X) R/ u% e0 c$ X2 {* H. G$ I5 g/* override diags mask for selected modules */* A3 k0 I* c9 L* g  H( k. Z: ^
xdc.useModule('xdc.runtime.Main');# u0 L6 N4 L3 k: ]/ _- K% }
Diags.setMaskMeta(
/ ~& g6 Z' B/ S$ _5 {, y3 R# h    "xdc.runtime.Main",
; B% \1 v3 z& k" }% A/ Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 _# d; Y3 n- X/ ~' U5 f1 A+ V
    Diags.RUNTIME_ON
% r9 O7 x  h0 O);
! e8 R; |/ G+ K! Y
  [8 q: v; i  _; h- F/ x: Xvar Registry = xdc.useModule('xdc.runtime.Registry');, K1 S# b' Q) N9 e& C" |! T( p! ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 }0 E* H/ `  E5 a" q8 j, [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& _8 t* h% k1 t5 _( `+ m# [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ A2 f5 w# w3 U: ]1 @" B5 rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 T) v; i; P$ T8 P- T$ ]: ?7 v2 G5 Q# a( C
/* create a logger instance */7 h/ X! p0 a' ^+ R0 }: n  v# U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( v1 o& @% X- z. J4 j' t- {
var loggerBufP = new LoggerBuf.Params();; Q0 F& t4 [2 d" |% n& X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 c, H: c% ?' V# V& qloggerBufP.bufType = LoggerBuf.BufType_FIXED;) w, E- `" W( |$ e4 B
$ N# L. |9 z3 G, B1 I
var appLogger = LoggerBuf.create(loggerBufP);; o: ~8 {: K! @# O( C; Z5 s1 j
appLogger.instance.name = "AppLog_Core1";
' z0 m% H( ?% I5 ^3 Z7 q+ l9 JDefaults.common$.logger = appLogger;
4 _# H5 j5 E) [: \. T1 R) _: jMemory.defaultHeapSize = 0x8192;    : r$ b7 u  ~* N- J
Idle.idleFxns[0] = "&LEDStatus";
& _4 {; D# {$ m8 b# RCache.initSize.l2Size = Cache.L2Size_32K;
" O) _' ]& M; T
) m/ h0 C- P. _+ h
回复 支持 反对

使用道具 举报

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 */
9 ^* |% v  N) w6 Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. b1 u4 ~; j0 }+ x
var heapMemParams = new HeapMem.Params();
- d$ O( Z3 l, I1 k$ R3 xheapMemParams.size = 0x4000;/ M+ l* N% G" r- k4 U

& l5 e" p( d8 ~: ^1 ^! ovar Memory = xdc.useModule('xdc.runtime.Memory');
0 ~% P0 a. k1 E! R$ T+ nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  J) a/ j% ?; L
0 ~2 y1 U' h% B  M* g/ w0 u
我大约calloc  每次共计大小为5K*16bits,1 H4 V7 k$ j2 Y1 u5 t# k; E, j7 J
而默认配置才0x4000、需要改大。. C# k% a1 Z) Z
% o& E, F0 [( _% o% N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& m; a& _) S6 G% g2 A8 K
Program.heap = 0;
3 m6 a6 {1 K5 R- ZProgram.argSize = 100;  /* minimum size */
5 U) ]3 w  B1 N1 Y- X! u6 f1 DProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 20:59 , Processed in 0.041815 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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