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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! F1 H! t# y  a. U1 S. Y$ s1 m/ E3 ~& V
1 h+ [" D6 v3 o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" T; l0 N/ k8 F$ y+ j  q, `0 [4 V( M/ Y. M! [" c  v# o' N
其他程序段。。。。。" ]" ^6 K, V$ ^' p" ^* L4 B

7 p5 M- g; f; N. O" `. Q, y. D: {   free(x_d);  c3 U) t2 `5 m1 |# _, `2 v& M
0 Z8 T& l+ f8 G6 [
使用DSP侧单独调试功能,验证动态申请没有问题,  ]! Z4 O8 q7 [& M. F- B

! Q' z/ Y- `8 w: m" z6 I6 z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  j6 K1 Y- V; O5 o
$ x8 {- [# e$ g3 j

. U8 Q+ L0 x- N
3 Q) w0 a3 f7 B* G3 D# r( V
7 t* }6 x- e, l. }) S* l$ r& F5 E+ I8 ~5 E: w

# j3 W" D: T% {* K2 p& X' c" D- [" Y* p" i

- ^0 a4 M4 @; k; m! u0 k' ?# Q; U% @- b9 H3 b* H% e& @3 f. `

" X; n3 n" f# X# L" R5 B8 c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, J. T' R' J  l6 N$ V6 p5 K
Program.heap = 0;
3 [* _( Z$ ?* _( f- UProgram.argSize = 100;  /* minimum size */& B5 c$ v2 b; |, G& o, A
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */$ R( Q4 P8 X+ N+ \( K: q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 n! ^6 ~2 ]. o
var heapMemParams = new HeapMem.Params();$ f; N( V0 t2 S3 A) \0 \" ~
heapMemParams.size = 0x4000;' |% x4 W4 |' G3 _- H3 J9 d0 m/ O; @

5 s& J; u9 e7 Cvar Memory = xdc.useModule('xdc.runtime.Memory');
4 @! K3 ~- p+ v, jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, O2 H( N; O6 F# G& Z

8 N: ~$ O% Z/ X( `我大约calloc  每次共计大小为5K*16bits,( X5 I  O; o& B4 ?
而默认配置才0x4000、需要改大。
) I9 F# ^/ K( n2 L5 g, C9 P
5 p7 Z) X* k$ y0 ?' f- Q0 u% I; U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 t  J* ^% ~5 ~! x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ B* R) {' x  R/ ]4 K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- m/ i) }, b& ]
3 e9 v7 `0 N2 R/ c
是不是需要在DSP.CFG中进行配置
8 P$ y8 T" ~1 x, A3 v6 T( ]. _' B我现在的配置为
/ v2 E2 I/ r+ ?, @8 ~0 y. D
6 I% U: r% |+ y! B; e, Y0 C, a/*1 C3 y3 s2 _8 \- F6 l# n& _
*  ======== Operating System Configuration ========
& i4 z* P7 p  w- F2 S */6 K1 A2 n3 \8 [. H% `) j* W- k
/ H- I; @, o$ w
/* no rts heap */
( t4 ]! j: |( [6 i4 `Program.heap = 0;# s0 A  x/ d3 G" l( ]" u) B  u9 G
Program.argSize = 100;  /* minimum size */
) h2 Q- O3 R: }1 iProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ K# O4 ]& t. Y/ H) t9 l, k1 Z% p8 v0 \6 C5 G# o
/* create a default heap */
0 H% G9 @; k$ ~: v& hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' B7 O1 D  [7 g4 n. ?6 J$ ~var heapMemParams = new HeapMem.Params();
# h* a# t1 y0 t2 l- c2 fheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 c7 c0 E# ~% [( l

% _5 h6 m+ i* R0 \2 l
var Memory = xdc.useModule('xdc.runtime.Memory');
) t4 N$ Y1 v% ~# j' Y1 xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# F5 {: T; S9 T  V9 h& w1 s; T. R/ p. F
/* configure System module */! K# R! Y' m; O$ Q- \) p
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ Q3 Q" G# ?( M) ]+ b) i) sSysMin.bufSize = 0x1000;
: P1 l( R8 H9 C# K& I% T* U, {SysMin.flushAtExit = false;% Q0 z5 z0 z7 i) W$ T
0 H" g4 N. h1 E& H" t
var System = xdc.useModule('xdc.runtime.System');; j, k4 |: W' ~9 E% P" W
System.SupportProxy = SysMin;
6 v) w  Z$ T, S3 P# g) t
' A8 C! J# \* q/* configure SysBios to use the lower half of Timer 1 */4 X- Z$ h! t1 u* O8 ]1 `  R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( r/ \7 n( M/ P0 j4 K$ F- j6 h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 z: m% C) z; Z$ X( o$ f
Timer.timerSettings[1].master = true;+ z7 U4 D  c1 S
Timer.defaultHalf = Timer.Half_LOWER;. A) j/ M/ \. j6 H+ D& U" v* D
Clock.timerId = 1;
+ A6 z3 P; F/ s! }0 P
; F! M$ f$ m! K( P9 V8 C: ?* M2 v2 h! _3 P( H
/*$ t, W1 Z. ^* w8 h. K# ^+ b1 I
*  ======== Miscellaneous Configuration ========
( D2 ^. @& Y& l) ~ */' E4 K9 t6 U5 T5 e

/ k8 i& C$ s2 m. |) U: G( O/* set default diags mask */
$ E' S2 F( A7 `* ?. m% Hvar Diags = xdc.useModule('xdc.runtime.Diags');' O0 ^# J1 O: e  X1 \7 }+ _
var Defaults = xdc.useModule('xdc.runtime.Defaults');, v% R! E) ]+ m( A

* R' c# T# M( H/ o  B) R' v/ KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 A( g, m# ?& o8 f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
* r' y" m! E5 s" w9 e+ {8 O- _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 V3 ?" m+ R9 j2 P% ~9 hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 ^8 M. }# D# k7 s( x+ c& t' p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- f6 a& Z7 G% s# DDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" b, s' @+ r" H% @4 t: SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ K  o- o. L& E  M! U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 N5 D5 Z. u3 k% C# G0 d. q! X; a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 m& |3 M) N5 B4 s4 H# J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( O' a$ W& \9 n9 |: [% q4 C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ s0 h" W$ `4 x! S6 rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 S# S5 H# Y. V# X, j  e; e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, M. j1 L$ r( [$ MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: ^$ P& i) A* N
" X+ c/ X2 L: g1 A/* override diags mask for selected modules */
4 W, t: J% Y2 i/ F$ \xdc.useModule('xdc.runtime.Main');! ?# X: H' p, d- z  {, _# j
Diags.setMaskMeta() \$ i) j! V/ O6 B  B
    "xdc.runtime.Main",& K3 N5 D/ y. K
    Diags.ENTRY | Diags.EXIT | Diags.INFO," A' M8 {! W4 k' E, l
    Diags.RUNTIME_ON" A0 O4 Q2 l2 }$ ~
);6 A) P1 g0 d; g; e. T' ]
3 L/ l  X, b/ e" x
var Registry = xdc.useModule('xdc.runtime.Registry');9 ^$ D; v% T3 z% A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 ~# H- e% U' b$ [  b9 [$ T
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  `- n6 E+ ?" c4 y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% V  N  `9 \5 G  N- S, {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. M% A; o! _  x% V- e8 v. v
$ i# A* a; B0 I( F! X/* create a logger instance */5 S+ {; x" L1 W8 k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# {) s3 w7 |" w1 v+ cvar loggerBufP = new LoggerBuf.Params();2 b: }+ V; a/ z9 p* ]; g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ [! Z# j- L7 ]- X. ^3 ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( M* [6 F# W: i9 T4 H0 n3 L) v0 S# \5 B5 t: C! [$ |
var appLogger = LoggerBuf.create(loggerBufP);  |2 E) d! [+ ]5 E( y* `% R
appLogger.instance.name = "AppLog_Core1";; B* o9 A% J" ~
Defaults.common$.logger = appLogger;) i; r2 {  w- R: I1 R/ a& z/ J
Memory.defaultHeapSize = 0x8192;    * A) g/ K' R; V1 A, ?
Idle.idleFxns[0] = "&LEDStatus";
+ T1 w' b2 u( r2 I6 kCache.initSize.l2Size = Cache.L2Size_32K;/ L  d5 v( J+ O% h' K4 r5 K

9 \2 r: H! v; q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 18:49 , Processed in 0.043390 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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