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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 O  Q5 X& W* T3 ~! e+ X, Q3 \2 K+ G
9 y8 W( a. l, N/ N$ |    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 f) K2 t7 e+ D6 S4 T; \0 a- Y% n3 @! L* w2 q, C* M8 G7 O+ E
其他程序段。。。。。/ S! y+ k% r4 O( B6 t

. r% A; ^- D9 j4 ~   free(x_d);0 l7 M, v1 R, E) f# L; j% n

5 e' M+ p8 B6 X9 V, v, f使用DSP侧单独调试功能,验证动态申请没有问题,
  N( m. K8 c5 W, g$ x+ v, [1 x" G: @8 \, E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 O* F9 C; [( Y5 X

" \& _* z4 R9 R; W; b( T6 D  a! |1 b9 i1 }/ t
9 S# i0 B3 |- R) C( S+ U
  w7 {3 d& u+ E$ X
' b" n: L8 S1 K

) y8 g, s$ ]) s& m8 A7 u9 ^1 a+ [! q$ s. I
" C; f1 Z2 p+ |0 |2 p* k

* y/ e! v# i& L: \- `% \! [
: @' K$ d( R( ~( K8 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ p" a! Z& E' `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  g7 @& K: h6 h* ?4 t/ \/ w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, j* o3 a  L2 s1 |( C- J- b
4 i- \: |) n8 ?4 d3 D! Q7 Z
是不是需要在DSP.CFG中进行配置
: E" D& X8 ?3 d我现在的配置为0 r; |5 x$ L) O- _  j! [/ \
# ~/ M. |0 B( F! k& X1 T2 A+ W* L6 P0 Y
/*$ r4 B  t, y- }0 ~5 N
*  ======== Operating System Configuration ========
8 n) X5 ~2 |6 F0 C1 y */
3 r9 d  j  J. U- i4 p# _# t# d5 ~5 d& U5 R! o+ `
/* no rts heap */
' M. l8 }$ r2 oProgram.heap = 0;+ O) t, i4 h7 {) f2 U$ Y4 `
Program.argSize = 100;  /* minimum size */2 K- ]9 |- X# }) ]# R
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 P' Y' ^7 E4 r6 `5 b
* o( h0 q' `% M% V/ ^: D' j
/* create a default heap */3 C6 `: t! U% o0 x) X; _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; p8 l7 D! z: g6 pvar heapMemParams = new HeapMem.Params();
: i: Y# y$ ]& U  o5 {4 UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ j" d% a0 i8 }! D1 H  t
4 \- }3 ~4 F/ m4 H& P1 D. v
var Memory = xdc.useModule('xdc.runtime.Memory');
9 k( F/ ~5 O! y# ~% u* jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ Q4 s2 ~, {2 R, y5 W- l! X
* c! c# q. L9 S5 T# M/* configure System module */* ?, D+ s* m7 K
var SysMin = xdc.useModule('xdc.runtime.SysMin');) u5 X3 y: b, j" B
SysMin.bufSize = 0x1000;& q+ b9 }0 o% u+ p" r; N) X& _
SysMin.flushAtExit = false;/ ~. [# f7 M1 A! k7 `3 D
- P5 x* ~. z* ^: D
var System = xdc.useModule('xdc.runtime.System');# j. N" H# ]/ C2 C, M* }0 d7 t  B, t' B
System.SupportProxy = SysMin;0 z) |0 ]* c* y1 I/ r

3 J' K, n7 U0 y: u4 S! s/* configure SysBios to use the lower half of Timer 1 */
! Q4 B5 }, f! ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ t( c. [: p( o* ^! R/ I7 U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 _# l* d9 _" |$ Y% OTimer.timerSettings[1].master = true;2 l% t* j, i7 o5 q# g# ^
Timer.defaultHalf = Timer.Half_LOWER;
' W# I$ J0 M4 U5 P! fClock.timerId = 1;
4 f/ p9 O0 d+ _* M8 V# L4 O
$ X. K, A$ G) ?
, i/ ~. X4 M9 m2 I5 k/*
6 H" r8 \. O; Y *  ======== Miscellaneous Configuration ========8 J! Z9 `2 z1 \" b# V
*/% \/ y- c: C# P, F( v, X8 C
* m5 _0 j1 h, L7 Q
/* set default diags mask */) r' t# o' @8 \$ p
var Diags = xdc.useModule('xdc.runtime.Diags');
2 |& n* S: {7 c* Wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 M: p/ d+ Y' e* W4 L
" r! }  y* Q' I3 e, E# l+ XDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; z* i/ g/ G$ J, V( W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 a! F: x6 |! E" x+ Q$ o2 u* F# i" C
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 N# D) D0 e% K  hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# U2 r% K) x8 h4 v8 e9 T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! Z4 n; p6 f, r- T& ]* CDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  d' j6 a, B; |/ v9 k* }2 Y8 |5 {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 R7 N3 u& D: e% W7 N; S4 D6 EDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ @0 W" S% B/ b
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, A2 E5 H- B1 b! s- s$ F5 N# lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ i; h, K9 \5 d4 ODefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! x# d5 V2 `  }, \4 L0 h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ M2 {. b, Q3 wDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 p6 n0 |; m* E% ]+ d. r8 U9 ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 U3 d1 H8 e0 b" U" u4 n) ~( w

2 b$ p+ K/ l/ D: Q! m/* override diags mask for selected modules */
# ?: v" r. y: i+ G9 x8 z4 r0 ~( Mxdc.useModule('xdc.runtime.Main');
/ j& D3 G: b: A6 J, gDiags.setMaskMeta(, J- z, U5 K& T; D
    "xdc.runtime.Main",* n3 @0 p) ^+ F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 m/ H7 [3 Z! A( I' ?8 G: A  ?* L    Diags.RUNTIME_ON) E( |* ^# u/ |' J% g) w
);* x/ q) `; ]$ @& I

* h% i* ~( O2 G0 ~7 Nvar Registry = xdc.useModule('xdc.runtime.Registry');
" F% c! w4 X9 T( {# ?' S1 p. jRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' L/ o  S6 B, D( NRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: f- p5 ?' m* ERegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: W0 v6 k; w( n1 c* L' i, ]  I3 C
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ r7 r* i0 O" p% `# _2 Q( w* p

' v, w3 b2 `3 G  r9 l2 r$ V6 c# l9 _/* create a logger instance */. D4 K  ?' M" e) K8 ]- X
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) ~* [2 U3 n, Z; C: U  F  U$ Yvar loggerBufP = new LoggerBuf.Params();
) H: P* S' G8 \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% P& |) b6 M7 F  D) R7 v
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- b% }; a3 x7 |3 ~( u! v2 K% V5 B$ x' o8 X8 g  h4 E
var appLogger = LoggerBuf.create(loggerBufP);
- F/ j1 S. J4 OappLogger.instance.name = "AppLog_Core1";
" m# L: R5 b& ]; N7 yDefaults.common$.logger = appLogger;$ ]  `: x; n% H* d) {" s9 u! ?1 e
Memory.defaultHeapSize = 0x8192;    1 P( |; x! F8 j% A2 S
Idle.idleFxns[0] = "&LEDStatus";
, Y$ {9 j/ ?3 K7 aCache.initSize.l2Size = Cache.L2Size_32K;3 R% ^8 _& K( F; J: l8 Z

) s5 Q; J; ^- G! g9 S0 W2 a
回复 支持 反对

使用道具 举报

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 */
* ^. i/ Z+ D" z% fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! N9 n. W/ D; l
var heapMemParams = new HeapMem.Params();: \" N7 C  o$ \. U/ L5 m' Z
heapMemParams.size = 0x4000;. ]) _* ^5 |. f6 |

5 z" G  q1 _' }# ^; Pvar Memory = xdc.useModule('xdc.runtime.Memory');( y1 E( h- ?6 L6 n' |" f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. \3 \9 w. a' g2 O. }
' I% {# e2 P, u我大约calloc  每次共计大小为5K*16bits,7 e8 F7 f7 W8 A( R% y# g4 B
而默认配置才0x4000、需要改大。
" F) C& \8 Z+ R
( n1 P0 C( s$ i8 j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 F4 \+ K" f' h, {1 W, M" JProgram.heap = 0;
+ F( U" R8 L* i0 E8 l, t5 dProgram.argSize = 100;  /* minimum size */
% T6 d, @/ E+ X1 h+ aProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 02:31 , Processed in 0.043527 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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