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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

, p0 L; U5 y9 N    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ f% U2 I) U+ X
3 F' ~, v( ~  _* m9 H8 ]其他程序段。。。。。
0 M7 U- d4 ]9 x( H& t1 F! J( Q
+ \7 ]; ?: N: K$ S3 Q* M, C8 b   free(x_d);2 n& Z; V, V; ~& Q/ f
$ }: U0 n8 f( Z0 w. D; R
使用DSP侧单独调试功能,验证动态申请没有问题,  x! {" L7 F9 _2 A
/ v0 v% l8 l* s+ G, H* j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 f( o  t3 j$ I7 c* B' a

7 I/ B. n5 l7 t4 x$ N% q# N
, i( j4 d: A+ ]0 [0 `7 {' S# I/ |) {
8 Q4 q* ]+ Z9 n+ K# G% ^+ J5 V) h) L
9 t. R, I( I; V8 [3 R8 h1 y

3 p" k% q& J# o6 C6 ?3 |: |! W4 l& J: C) U6 ^+ {) K
- \$ W% U% j/ o7 E
5 n$ y& z& E2 a; s6 _+ O
; J, l' q. f5 p5 R, {# _! I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& T; p( i2 p# ~# {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 O5 e* V8 }0 O5 N; v1 G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& M5 k# ~3 R. E0 P" i5 s2 k
' [( B6 r6 A1 m1 `. |
是不是需要在DSP.CFG中进行配置8 }9 J) ]* t. y; b  g1 c
我现在的配置为3 [+ T$ E; G. G" j

7 X$ Q! I0 ~/ c. }1 c# P/*3 z& c; s9 r7 A! l2 ^
*  ======== Operating System Configuration ========2 M' u" D5 l$ ^! T1 G; O
*/
* p9 B" V  l2 C3 o; X" V2 c" w0 V' U
/* no rts heap */
% w, {6 X2 F( y' n. jProgram.heap = 0;- `- @# g  F: I! D+ o# @
Program.argSize = 100;  /* minimum size */
8 H7 q% D: S2 l# yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 L3 x, n; t+ m$ A5 u7 w& w0 r5 j; O/ t* [4 k6 |3 x
/* create a default heap */) P, Y6 I7 _' w! e( q* {  O! h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) n, |' t* x4 G9 I: R  A6 m. D
var heapMemParams = new HeapMem.Params();
3 Y" M% J% Z; g. q; ?2 W- ^. |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. f( ~" |3 V0 G; v- n' Q) I
1 C: I* u6 K+ r/ P5 N
var Memory = xdc.useModule('xdc.runtime.Memory');
& f6 Q' @5 z1 {0 FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, D. R7 p! Y4 {" g+ L8 ^' ?  y) {/ R" `2 e% r3 |% H. {) S' U: Y
/* configure System module */
( r$ ~' c; c4 L4 Evar SysMin = xdc.useModule('xdc.runtime.SysMin');2 c# _/ S* D  D3 ~
SysMin.bufSize = 0x1000;
$ z; A- m& ^; H$ P' `1 ESysMin.flushAtExit = false;( [& |% j1 _+ Y% x( j

' B& S* e1 x0 H: Vvar System = xdc.useModule('xdc.runtime.System');! B- H0 e0 P2 V" `6 Z9 b
System.SupportProxy = SysMin;* P; V' O3 E1 x9 l& ]  @3 g

0 e/ i) [, O8 z' Q/* configure SysBios to use the lower half of Timer 1 */
6 t# c( V  R/ x4 ]% E# Y6 J( n- Pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& Z1 o2 p/ ]+ q" l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');4 E: k0 j6 }& f. J' k
Timer.timerSettings[1].master = true;
; F( O- _0 t/ l4 B% {# qTimer.defaultHalf = Timer.Half_LOWER;
2 \5 G5 {, B. X0 h2 _" uClock.timerId = 1;
3 o0 E' @& |. D. w: `: h2 ~* a; P0 I. D3 w$ V! f
+ a" ~5 R# K* g$ @0 `: Z& ?# ~. A3 m
/*( D% H" h' @! @3 i* H0 R; A+ ]
*  ======== Miscellaneous Configuration ========
" t' E, ~3 ~9 T- u- ? */
& p: f: _& r5 y( s3 v+ x$ {# O( S( T/ S4 _7 N( E5 `
/* set default diags mask */* R$ I$ _5 T" n! B  W' G7 j* p6 a
var Diags = xdc.useModule('xdc.runtime.Diags');6 \  R$ l/ D8 h2 k
var Defaults = xdc.useModule('xdc.runtime.Defaults');! x( h  T6 v  v1 c

* Q! M0 J& `; v+ t; ~8 u0 r  P5 L. qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 r5 d2 g/ ]+ |# rDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 d3 b) B$ |3 s; k
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 }  u& d. x2 ^: K7 B+ J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" g5 D1 I. F% H2 b! _9 uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( f1 i6 c: {4 L0 C* w' ^Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 |& G+ |+ P% ?  v0 `Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 ?$ p* C( ]2 y9 \; q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* g, ^( ]$ W# O+ C0 Q9 J! Z1 i$ \
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. m$ N% n  E: ^/ p8 I& Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' B" k9 d  j& `- H: t5 Q8 z7 p/ ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 y) G+ y& x* \4 ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 [' G0 I- E) EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 o7 l. c3 U: i. E+ T3 [: s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ b$ t: p1 D. c1 I. X
  v' @9 [" x7 l/* override diags mask for selected modules */1 S0 A; S+ a" ^# W* t
xdc.useModule('xdc.runtime.Main');
6 V) x" j' n* k+ M3 E. A$ N1 ADiags.setMaskMeta(
8 ~& C! S* V% J+ [4 N    "xdc.runtime.Main",
1 o( d: r* F7 ^" I: R4 b( F) W    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* W& @* ?0 Q) O5 Y- R/ X    Diags.RUNTIME_ON
7 E  n) ~3 n) j1 C% X+ f);$ j1 r- W; J, M* _# u% Z6 J

3 Q5 {5 e- z3 B# Fvar Registry = xdc.useModule('xdc.runtime.Registry');8 t( b0 @, E7 f; J- d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! g0 `& a: g* e" J
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 W$ n/ ^8 j3 W
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 M/ R$ q' G4 B' s2 |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 k/ m3 ?: l9 _
  w3 ?8 E# W9 g- A  e' @2 T
/* create a logger instance */" {9 w. Z. s8 L0 d
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, H0 t$ X0 _7 A! ~/ K% Lvar loggerBufP = new LoggerBuf.Params();% y% x$ p& W8 I/ H1 ]
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) F% n2 H+ L4 Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;2 d" @& z3 a- t8 m; j9 C
9 }& ^0 |( d8 f$ L: T3 d6 S4 {+ q
var appLogger = LoggerBuf.create(loggerBufP);2 ]( g, e; M! c5 w/ i
appLogger.instance.name = "AppLog_Core1";
: z3 m" S" X; v  RDefaults.common$.logger = appLogger;& c5 N" |6 n% J- W
Memory.defaultHeapSize = 0x8192;    0 G3 @+ \+ ?9 w$ x( U" S
Idle.idleFxns[0] = "&LEDStatus";7 m; N- |( B8 p* B0 ?
Cache.initSize.l2Size = Cache.L2Size_32K;
% t+ ~5 u" T. V$ c; w5 ^8 B! X' r$ _+ f
回复 支持 反对

使用道具 举报

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 */
  j( Y2 p4 V9 V8 pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' t- V+ D* p0 n+ `0 C! F' w
var heapMemParams = new HeapMem.Params();
( g- T, |1 Q6 w/ A2 O; iheapMemParams.size = 0x4000;: F  O! G2 T( |
! N% e+ v5 x& i, h* e
var Memory = xdc.useModule('xdc.runtime.Memory');
( K+ q* P9 u9 P6 B8 Q1 j3 s% bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% U# @  m. W. @! @0 N

, ]6 c. W6 \- q' s$ F; W2 W我大约calloc  每次共计大小为5K*16bits,
5 w& c* h! v6 R2 p* j' g而默认配置才0x4000、需要改大。
: M) L- f2 F$ ]- q( K6 n  J
( M5 M  Y$ q* _5 t$ m5 I/ C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 ^+ V  D' d1 q6 W: U+ _Program.heap = 0;
& E) g+ y, d4 t* R: KProgram.argSize = 100;  /* minimum size */
7 S# k  A+ A4 V8 B7 cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-2 18:13 , Processed in 0.038766 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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