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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ ^* R" b7 v: @1 R7 j' N1 |5 N" K+ ^' X) y1 ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 z1 b" `) h( V9 ^
% q% x0 U7 v7 e; h) g其他程序段。。。。。) ?5 s6 j7 d4 |" B3 P2 T
9 n" _3 p4 D: ?  d: X
   free(x_d);% i3 d1 R% {) `! q2 U$ f2 R
$ ~4 A+ W' E4 b, q4 a
使用DSP侧单独调试功能,验证动态申请没有问题,
2 i$ i- S8 i3 Q9 e' m$ ^" a, ?2 ^" |& W# N, c- k; u4 _! S
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 E( s1 t9 z8 U, ?  w: ^4 X$ n

: z6 K, O! A3 o" x" f5 z- x% Q6 |& b) q. Y( q) i9 V6 l

7 F3 Z4 I, b+ }( G
( S. l* a3 U. J$ u* h; J' {$ d9 h, N+ @
. M5 o! O1 ]( m( h' E+ k& W2 g# o' X# b
) @" a& ~7 v2 `9 f
+ S& K0 n9 f8 b9 O6 }
4 ~$ |2 d. k* c8 Y- E  X3 s, i; J1 I

7 U2 Q5 a8 L7 V7 H3 A. k( j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 c( S6 o9 x- O/ P6 z" U1 K3 c, |/ i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, H/ E0 E# t5 r1 y1 l% ](不过疑惑的是,为何单独DSP仿真就没有问题呢?)( B7 w* @( O. v; ?% I
/ i+ T& \' z( J3 Y- |! X+ {8 H2 p" J
是不是需要在DSP.CFG中进行配置7 G9 X/ x3 h2 g3 f% {
我现在的配置为
3 L" j% N9 u# `: C
5 ?( l% ^$ c" h$ H/*
! B: W. m% ~  R2 Q *  ======== Operating System Configuration ========+ [6 T0 w5 y6 q
*/* [) Z; ]3 m2 Y

' p! k6 s; Q- f! k/* no rts heap */
4 Q# K7 f4 U8 a) l2 C3 L/ ~0 x$ FProgram.heap = 0;$ `) J7 }! y9 f  e" w' [/ [4 w3 o" h
Program.argSize = 100;  /* minimum size */$ y4 J) e  P1 h/ R  p2 u4 P7 |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- j. s) R9 v9 b( f& D- h
$ N9 I! ]$ ]" n8 }+ L
/* create a default heap */3 K' t% m! P1 d. m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- o/ ^7 v( }6 X8 S! u
var heapMemParams = new HeapMem.Params();
4 H$ D+ e$ o2 }. Q8 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. l# {" D  C- G7 x- X
- b5 Y0 d0 `8 H( p  L
var Memory = xdc.useModule('xdc.runtime.Memory');
3 C' S* k1 C4 o+ L& g/ sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  x5 R7 H/ t( a" ~. J

/ @3 ^& n2 n! u% B* N2 z/* configure System module */8 T  R' R  V' Y7 ~
var SysMin = xdc.useModule('xdc.runtime.SysMin');
; j6 o8 o$ T  t1 c9 d. NSysMin.bufSize = 0x1000;5 J* \/ _# }3 ~+ M" D. v
SysMin.flushAtExit = false;1 f0 W4 _- t/ z! a. u3 e
* Z1 G  t6 X5 j, L; h# ^
var System = xdc.useModule('xdc.runtime.System');
3 m' B, |* e& |0 SSystem.SupportProxy = SysMin;
8 m( A1 O$ w8 V. Z' d
5 u7 p# h5 D3 o7 |1 Y  G/* configure SysBios to use the lower half of Timer 1 */
  m% G/ u& I! |9 wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ H9 c; r+ L2 c1 j% F9 svar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 D  m2 Y: r( E
Timer.timerSettings[1].master = true;1 l; ^& o) r1 F; C3 o- o
Timer.defaultHalf = Timer.Half_LOWER;
5 k$ U8 f- J* @- n& d9 yClock.timerId = 1;
' k/ c' _1 x5 Q! _
5 @1 M/ U2 X/ o8 _' p) {8 |: p! ]/ G7 j# H7 L$ U( m- Q
/*
: z) e9 Q$ j( e7 u *  ======== Miscellaneous Configuration ========# Q7 R2 D% Y( j4 q
*/
$ g2 W; Z5 A2 R' @  a+ W1 ~1 g  K6 }4 T/ P
/* set default diags mask */( y6 F9 t4 _% s* [
var Diags = xdc.useModule('xdc.runtime.Diags');
& R$ U' x6 ^5 K$ N5 ]1 G7 E! @: K4 yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, D2 ^/ J* H- @* j3 i) |3 Q
# A4 E4 q7 B# O; u6 jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; E; p3 Y) @) b% \. t/ A0 W1 C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 y# A) V( i6 l0 w2 h
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ X4 G# ?/ V9 W' w6 j2 a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 W, q$ U1 r; o2 {5 b  ]# N7 XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 F7 I) h. q+ l. Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ n1 E) F4 ~% P2 T# P0 p( o+ v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 f3 i5 m  l3 C% oDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 \+ d8 H* a- ~( [, P' mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; N! |+ h8 s/ F, t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% S5 n* l  }0 R0 e9 S
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 a- H) g" w* t* O& e2 W- zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 h8 o/ C" B) D7 D% v; r' I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% O+ f( _# B7 ~: x& p; jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 o) X8 J/ Q) P0 P2 U( K* ^- e
  |4 A; k/ W% a9 N! `8 i* x# A
/* override diags mask for selected modules */% B' _6 o3 b9 N! Z! ~: v" t9 r$ g
xdc.useModule('xdc.runtime.Main');
. I$ M* j5 H+ P9 dDiags.setMaskMeta(  M8 ]+ q2 _% d* T, D9 o( h
    "xdc.runtime.Main",6 f% ]" N* }4 |3 r* z" b9 J/ I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& q( A# r1 \/ k& r0 v, N: n    Diags.RUNTIME_ON( Y' P3 z9 x8 |
);
" |( {( ?# V7 e' @
/ ~( ^9 q- h& X( E7 |) m. Avar Registry = xdc.useModule('xdc.runtime.Registry');
: Z% B# V; u+ pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 p" g6 E& e; i  }( G; mRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! V; j# A- L/ T  d
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% f& ^* o# U3 V1 c9 t: C7 H$ kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 k$ {& b! S7 C! }0 d3 b1 o- P' l5 Z9 r
/* create a logger instance */" r: O3 l, W6 l; U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: T/ \( i" X, ^$ n$ d& k# c  dvar loggerBufP = new LoggerBuf.Params();
$ Q! Z- I' x, ?5 }: V4 T8 QloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 S( R' P- `5 N5 v1 D0 N5 T2 Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;7 }1 R  [' R" W( g
/ P9 Q: W! U- e/ V+ w8 j
var appLogger = LoggerBuf.create(loggerBufP);
* B3 y% Q; m7 a" CappLogger.instance.name = "AppLog_Core1";& p* J+ H% E% E4 x+ @5 m
Defaults.common$.logger = appLogger;: e; G3 s' I/ W7 ?4 }  |7 `
Memory.defaultHeapSize = 0x8192;    2 t1 m; S( x2 a  Z6 K
Idle.idleFxns[0] = "&LEDStatus";4 s$ p) e) K* C
Cache.initSize.l2Size = Cache.L2Size_32K;/ x% ]- Z6 U( m, Z& ?* B  ~

4 x1 r; K6 c; Q# b
回复 支持 反对

使用道具 举报

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 */9 L; ?; V/ t/ v7 P( h0 _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ I: |: K8 a) I1 bvar heapMemParams = new HeapMem.Params();/ A8 m/ ]$ ]6 J0 i8 ]) y3 F
heapMemParams.size = 0x4000;0 G% V6 q, h& V! w, w; D5 ~( Q# Q
, C& N3 q, ]! U; S) `9 G1 `5 Y9 P
var Memory = xdc.useModule('xdc.runtime.Memory');
4 _7 D3 z. K8 i6 l; d5 kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* k; [* ~( o- W( j2 }9 y6 u( \
) T% R% X$ J4 u& I/ v# P6 Q
我大约calloc  每次共计大小为5K*16bits,
: d; }' o& T0 h而默认配置才0x4000、需要改大。. n0 w- D3 p* `' W+ A  N
. w4 K* x; c% [8 I0 `& W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) l/ B5 E# ?1 L: ]' s" S# rProgram.heap = 0;
. j0 d8 f9 E# dProgram.argSize = 100;  /* minimum size */4 T  P8 w8 U. o6 o4 N
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-6 06:08 , Processed in 0.039994 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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