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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 u, u( X, l& I5 W$ E- @: Q
& q% w6 ]* c4 S8 X  y. b$ i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 F2 z, Y. c5 N( ~- |1 O, r% ~5 v  J$ G; t9 c/ Q
其他程序段。。。。。
. J) R: }& m5 E6 c, _ . L6 Q( J" S+ l, ^2 `
   free(x_d);
! n8 z- z# j) M  X$ @
2 E; Q7 K# A! E使用DSP侧单独调试功能,验证动态申请没有问题,
. c1 E% @/ k" `- }/ \" W0 L4 U4 s9 }! r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 ^5 o" k6 @! L: g. c

- ?; a7 p0 m2 E3 R2 F' o; l( ^6 K* g' d8 r& z

; g& `6 p& k9 k
2 {# L. ]5 J5 K5 Z8 R) ]4 {$ x
. z9 c6 g# c- g2 x# H! j/ L
: m; J' L: e+ o
! _# y: y& S$ O* _9 w# M% r. v' V( W* D

! w& i& ^: n0 B* R- j3 v+ v, m5 T0 `- t# r* e+ Q& n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 R% K! @8 l; x: \0 j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 ]3 G7 h1 \7 p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# Y0 R: O. s3 c& l1 F+ a

2 h* ]- T) d$ D  g0 U! u" E是不是需要在DSP.CFG中进行配置
- Q# e4 ^+ `/ o2 r我现在的配置为' r. _- \) g% s- l, Q( N, j: `9 h6 v
, L% m" u( K4 h. @- H0 y, ^
/*: w- y; Z' m: X
*  ======== Operating System Configuration ========7 y6 W) Y; N- k4 A+ M/ E2 ~9 l
*/
4 X* m* n4 {3 B2 G; y/ a# X1 _% E) G: W  q& ]- x
/* no rts heap */) w& B! B2 S$ x! H5 B, W. H  \( C
Program.heap = 0;3 E$ Q, ^' k2 [, y. g
Program.argSize = 100;  /* minimum size */' o5 o) D8 T6 }! |( ^2 W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 y+ `5 J5 H' E# g+ q- C# q& n, e" K0 |- m4 `
/* create a default heap */  i. }) w! Y5 B5 t. w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 m3 `" E- O( f' [  i  Jvar heapMemParams = new HeapMem.Params();
' _% K, Q, `; K$ C. d; b, YheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 b4 }6 \9 {( t( ]
1 K. W$ N! V. h, C. W
var Memory = xdc.useModule('xdc.runtime.Memory');
2 k* A+ Z1 w0 K+ b8 _# YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 n6 b& ]2 Y1 A/ g6 j
& f/ I& R. V5 a) X5 D# ~" g
/* configure System module */( U0 {, B- f4 M8 f, T7 i1 d6 Z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 \$ K! O' j  v2 o' F: V: Y" TSysMin.bufSize = 0x1000;/ `+ ^- g2 ~; \2 a5 J1 t* p: j! L! l. d
SysMin.flushAtExit = false;& R9 J2 k1 |7 r/ H+ k3 r
+ }, F7 I9 _+ j5 r6 e
var System = xdc.useModule('xdc.runtime.System');
* _! H% x& S, X  k  R: OSystem.SupportProxy = SysMin;
/ x, p5 d( n# `! `3 S
6 ~0 r6 [& |0 y! p, J3 X  Q3 e/* configure SysBios to use the lower half of Timer 1 */& \- d% b- ~. ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: W' S/ f( w: T/ G6 V  M3 M: C/ L8 H; p
var Clock = xdc.useModule('ti.sysbios.knl.Clock');# z8 K) |- ?3 B* P) ^5 d
Timer.timerSettings[1].master = true;. q5 v% y9 q9 P' q' G& t1 v
Timer.defaultHalf = Timer.Half_LOWER;4 y3 T2 B( V. \: b7 s2 U* g' W* ]1 U
Clock.timerId = 1;
- Y8 s$ v% J) a2 S
5 d% Y5 z) ^% y; ?& p$ j) P6 }- a. G4 K
; K$ O; h2 j- T$ b$ T, Y* v/*
3 w; H$ l, Q# j4 M- h# K *  ======== Miscellaneous Configuration ========& b  V4 ]# I5 s: e
*/
, W. e# r' T7 ?- R1 W
) M8 h4 x+ L- `( @/* set default diags mask */
) G5 a0 b. I& T( |; ^' tvar Diags = xdc.useModule('xdc.runtime.Diags');
; N1 ^) o% S4 H% R; b# ovar Defaults = xdc.useModule('xdc.runtime.Defaults');
( d# @6 h' d3 s3 b1 x' {$ y* a6 Z" P, v" ^7 f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: j: G2 K6 X8 \; ^: R5 F3 }+ XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- R7 b+ t, M0 M4 G' T' s7 qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  L" @. @6 l' D. [, d8 W( G* X2 O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& b- {. P* w& o  V- `$ tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 x$ m: m9 i: r& Y7 nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ H' ~+ x" g) R# m( ~
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 g: x' l5 \. O; B: j; FDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- g" r) L6 R* L: U7 ]6 v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' Y  c' ^3 a! {
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 Q" T# p/ P( _, u- V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 [- p# A8 O- d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% [/ D% W" E: Z% V* e  [# YDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 ]$ c5 R! v0 a7 _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% j- e0 M: m+ k& `& v

4 T( ]8 U$ P7 x; t/* override diags mask for selected modules */
, d' I# G) T2 G0 ~7 ?- Txdc.useModule('xdc.runtime.Main');  t" T- Y3 ?' B! A3 v4 }. E
Diags.setMaskMeta(1 e% g+ M! C" u/ ]# G" a
    "xdc.runtime.Main",
/ {% m7 l, h6 G% @8 ^/ C    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 e6 T  s. ^8 p. j$ J
    Diags.RUNTIME_ON2 e2 y+ v/ a. G+ s) x
);
9 L( c7 e+ a, \3 `9 Z" ]4 v4 M. c# H- V8 Q0 b0 ~
var Registry = xdc.useModule('xdc.runtime.Registry');( R; a: H! H' I* }6 u" s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# [: A' u" Q! K' m% |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 h) b' b. J5 W) E& b9 P- O# y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 M" Q$ Y2 {( h6 qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* \: d  w; I, B$ [/ y% ^, N; a. m3 @5 ~
) ^  i3 g7 F) U3 {6 I! G8 A0 E/* create a logger instance */9 i( S/ T, c! u5 Y* o: o! ]  \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- P9 V% u! O; P4 v3 H. zvar loggerBufP = new LoggerBuf.Params();, {  e# R7 O: |7 w# b
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: g! p4 X% e) I- W) U; @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* v6 G  D7 I$ m8 u7 L
/ _& J! ^1 X* ~) rvar appLogger = LoggerBuf.create(loggerBufP);
* G/ ^" O2 A7 U/ B0 Y. c' x1 qappLogger.instance.name = "AppLog_Core1";
+ F' Q& W  N" `; X* Y- ?+ @5 LDefaults.common$.logger = appLogger;
) x2 I, V  w/ L! E& T% ~Memory.defaultHeapSize = 0x8192;    9 X  t# I" o+ g/ ^8 T0 _3 J" f
Idle.idleFxns[0] = "&LEDStatus";
, P- e: V, f* S! n2 TCache.initSize.l2Size = Cache.L2Size_32K;
# Y  _9 A$ L. R( |2 B! K
" y; w/ O8 c5 x
回复 支持 反对

使用道具 举报

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 */
; u6 l$ w4 X. U7 J7 rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 H) m, f$ i$ X! G) N4 J, I# Evar heapMemParams = new HeapMem.Params();& a( V5 }/ v/ A
heapMemParams.size = 0x4000;
7 R! ~3 k) E1 A, Z8 T* m6 ]7 h8 i! @$ l. `
var Memory = xdc.useModule('xdc.runtime.Memory');
, _4 Y- E& D1 x) Z; D5 j* t) VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. W6 q# ^. H$ J7 r/ v, e$ K8 g" \; @% v- _6 v9 k
我大约calloc  每次共计大小为5K*16bits,
' c# C, S  `' z% n而默认配置才0x4000、需要改大。
% L# V/ i; z; V0 Q! t, ^9 ?9 u3 N1 [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 {+ R. p' q% p& l" xProgram.heap = 0;/ j: y# t+ H* Z" D/ [9 f
Program.argSize = 100;  /* minimum size */
& q3 ~& P, M$ l$ t) 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-9 01:39 , Processed in 0.043736 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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