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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

$ |, F/ C& u* W. E/ s  `4 x4 y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 C6 S+ e$ p* D* X- G# x' N

8 W' Z5 H' j) s; Q( X其他程序段。。。。。4 a3 Y- p- P8 Y" q& F; L" R: {

7 V( W: B4 N5 F" L. d   free(x_d);
5 V# B% u% E" m4 G
& Z  S+ b6 T. w! X" L2 N7 ~使用DSP侧单独调试功能,验证动态申请没有问题,
  U7 f: Q9 r0 y9 W7 P1 i& y7 e% o- u' Y* c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- K. W" G/ s3 o( {
6 n, b0 }0 N1 U5 C1 D

/ a! a0 R$ N: f  s! e
- K* x' o0 x8 b8 g& K5 r
+ f* W8 \) U# l
6 ~1 ]3 }) b9 f- A9 e% o$ Y, S: G) B+ k- m( n+ w  a3 [' u1 ?1 @

" |7 T6 @. ]) i4 Q: B% z
. y* d+ f6 d; l9 x7 A* O
1 a& C( c6 f! Y6 R0 F: s/ V% Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 T9 O; q( l; ~/ K. l! a+ b我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 h/ v) R6 Z( w: j/ P+ p% A2 ?* A
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 V& q1 q! d2 k- @  Q2 d( J
: \' P$ U: T! i/ M3 k- E+ ?/ ?
是不是需要在DSP.CFG中进行配置& w8 N6 t( x9 D2 ]
我现在的配置为
# O/ ]$ y7 V, `, z- ~; X0 O. z# `9 t; {* u
/*
* p8 q7 X- h  z9 z" ]' }! @( W, E5 a. C *  ======== Operating System Configuration ========7 g/ k1 b  j' ]! D2 v
*/
  a' y+ s& H3 I7 K9 j& n+ K' {* g/ p
/* no rts heap */3 g3 g5 U" L1 {: K, k
Program.heap = 0;
; a4 F: C/ s: i9 ~* {Program.argSize = 100;  /* minimum size */  y2 N8 ?% X) ~; i# s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( @% i/ Y7 H7 t: r

1 M: n# \5 f, c$ Q/* create a default heap */) L1 Y2 x( I! h5 Y+ J4 k5 A3 j( {! P/ r  E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 [+ w# k' P5 }$ S6 K$ c
var heapMemParams = new HeapMem.Params();" L4 _( x% ^6 _6 E+ }( ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 U3 y( d, O3 p/ L
; }3 Z2 m8 P) |& Q. `5 y3 i# G
var Memory = xdc.useModule('xdc.runtime.Memory');: j" L4 L" Z1 n, A7 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 f. T! b1 @+ o0 k0 G; f) [# P9 ]' f6 L# N7 j, v4 ~3 E
/* configure System module */
9 P7 r# x2 t% V7 x/ x+ _var SysMin = xdc.useModule('xdc.runtime.SysMin');* W+ n9 g; t% U, H  y5 Z
SysMin.bufSize = 0x1000;6 N1 N: p( O1 o$ K, F
SysMin.flushAtExit = false;# {5 X, ^9 _, E$ x! L" {

$ h9 M1 f) l3 S* l& q: kvar System = xdc.useModule('xdc.runtime.System');
: {+ f' V% Y8 cSystem.SupportProxy = SysMin;
5 s7 m. e1 s7 @  k. G3 h0 t) X* ^! P" [- _( _
/* configure SysBios to use the lower half of Timer 1 */
$ H" c2 Y7 B$ d9 @4 F: lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& f( [1 y) \* |$ X2 r& O: y5 nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 f4 j, D: z: `, H. Q6 _& x' K5 g6 c% mTimer.timerSettings[1].master = true;
7 H8 a% D1 \+ R2 _: b2 ~Timer.defaultHalf = Timer.Half_LOWER;, x! B1 @; x0 x- Q, |7 W/ r: D
Clock.timerId = 1;
- S/ h3 P9 }" G* l4 w# K9 k4 [4 ^2 U1 B7 S: o
% l. i; F, _) D' _* S
/*
: W& s" {/ U& {$ F# g *  ======== Miscellaneous Configuration ========: o$ z7 o  M: M1 e- C
*/$ ], V# R0 {: g/ a, E( |" j

' {  h8 C( Q# O# u/* set default diags mask */3 S7 u* }8 Q6 `6 Y# O' {
var Diags = xdc.useModule('xdc.runtime.Diags');
- G9 ^0 o! \: y# Z# ]6 @' _; l7 svar Defaults = xdc.useModule('xdc.runtime.Defaults');4 |  r0 P6 z$ M! b2 U
; I' u1 _* c  v3 R8 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" w( s. H' U" t
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 ~; c2 y- x, Y# S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% d; `4 ~9 ?9 l7 }/ i- N4 xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 u4 q. ]$ d0 \1 HDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; h3 q/ @3 B+ a0 Q* @' Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 x( L6 M! E, H! P: E# yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' Z9 W" [8 N& f& L  u, VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" @1 D' Z' q1 D2 rDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 N- f4 k% Q! w* _Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 `& O6 t+ U9 i* F" sDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: p% `* \9 g& k/ G* ]4 s
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 A/ C5 F1 T5 o+ q! e) q$ m/ aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 f- e8 P* L- L1 f) t  E7 |
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 @. {' I& \/ A" b& {$ u! n
) X) A9 H$ |* L4 A/* override diags mask for selected modules */
: a9 h0 s6 P  ~* @  e. O' I0 V$ Uxdc.useModule('xdc.runtime.Main');
/ l2 \! j2 N  W+ C. WDiags.setMaskMeta(
/ R- k7 q& F) k/ A    "xdc.runtime.Main",
- D& `$ |% k; n! U4 V/ p: d0 ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,: ?7 V( r0 O, A  S$ C
    Diags.RUNTIME_ON
2 O5 |& b+ s9 m7 G' J8 r: w$ v: W);
0 l8 Q" L$ x* K5 k0 j. |/ o" W% t4 p: t2 o) J/ I& f" v
var Registry = xdc.useModule('xdc.runtime.Registry');, i% D0 H: H  T/ h0 V
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( H  z$ ~# G5 W
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; }1 L7 \$ P: H9 o& G# O) R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 V$ {0 w  m2 O+ w4 E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ Y, n  P4 c5 w* S" d! R

6 o: G! U! p1 T0 G4 P# t3 h, Y% [/* create a logger instance */, z/ N$ v9 X; T7 @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) Y. d3 Z# n. F2 svar loggerBufP = new LoggerBuf.Params();
, Q5 w9 u1 P/ g) ^6 {loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. v: u4 {$ y3 S1 YloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ A. N* i+ f8 e. E" ?) ]; a. u
( }: m/ N' O& dvar appLogger = LoggerBuf.create(loggerBufP);
4 M/ }- I* P+ e  `appLogger.instance.name = "AppLog_Core1";
! w% t7 m/ W; B2 {9 A, WDefaults.common$.logger = appLogger;
& c+ h, [: b+ q. cMemory.defaultHeapSize = 0x8192;   
7 s7 d  s* l$ {2 h3 g2 }6 RIdle.idleFxns[0] = "&LEDStatus";
! _1 x" ^) ]1 S9 MCache.initSize.l2Size = Cache.L2Size_32K;
7 f- u. q: C5 s% D1 p  G' ~" @
6 A# p) z( x- O4 d% Y
回复 支持 反对

使用道具 举报

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 */8 \4 w# S2 `, @* k! P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 J4 M: f: f. O" N
var heapMemParams = new HeapMem.Params();, w- v: i5 A9 \# D( w
heapMemParams.size = 0x4000;* g/ p+ \4 A2 A! h6 G: b
/ p: Z( i5 g* l' ?7 K9 I# B1 v
var Memory = xdc.useModule('xdc.runtime.Memory');
; y+ m3 I5 ^4 PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 ?6 H+ R$ u/ y

6 \: s6 K' f( R' L  n! P+ s我大约calloc  每次共计大小为5K*16bits,
9 [" p% N# X) g而默认配置才0x4000、需要改大。/ y$ J1 j* S* x! \  ^6 \$ x

! g9 M9 A# r+ r5 c" |4 }0 a' k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ f3 k% {& v$ n* k7 v1 U1 q& X+ k6 CProgram.heap = 0;
. J3 a# d3 y9 J: o$ XProgram.argSize = 100;  /* minimum size */5 `7 X+ C, b& _2 V, e3 M* k" `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 10:44 , Processed in 0.044137 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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