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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) ]/ Z( e) }/ t! }- l
/ c. y& x. ?. g. B, m) _7 Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* t: X2 L9 y) x, K0 x" q9 Y. S0 s! i: n9 O, t# J: \& |1 M
其他程序段。。。。。1 T6 }( G  n; {1 ~8 T/ @6 o9 V

! G4 w' T* I+ ]5 Y" {   free(x_d);- m- e7 N/ I+ G+ Y  y1 I- C/ Y

0 n3 z1 Z0 Y6 I' I% S& k6 K使用DSP侧单独调试功能,验证动态申请没有问题,
+ V+ p7 U3 n8 z7 {2 [: H8 p, W6 Y5 M) \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  K9 C4 Z0 @( z4 C0 _5 [" R' `

9 n) F+ z# `, u' r# z) X: n. K/ q3 O! Q
6 @) r- Z  h0 }- h9 O3 s* F% i& c) Z/ {: i& |/ R

2 u$ a( a% M9 B
) N6 }2 o# C; o: R. O9 \' I
1 f; w, y9 j) v2 C, Z8 i: b& ]& L+ L9 @; T8 H) m4 y, u" R1 T" P) x
" o- G# \+ z  t
( h: }- z& S- X9 i: L
% i, a! {& e) N0 B% j( Q
分享到:  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 */
5 K; c# }" I' wProgram.heap = 0;9 O* n7 q7 X) t+ E' N2 E0 a
Program.argSize = 100;  /* minimum size */
" ^: ~/ g. H! q: m& |Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */8 U; Q+ P: B3 Y) R$ d1 _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 F/ \' J, o; w5 L: B+ r
var heapMemParams = new HeapMem.Params();& j! u' P" g) s& C" C! Q) l0 M
heapMemParams.size = 0x4000;& k1 g; b3 V7 \1 o  R

" L1 t, k- O5 Q9 Cvar Memory = xdc.useModule('xdc.runtime.Memory');
3 a$ a. ?% \. S+ jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, [5 m) ^1 x8 w) ]+ u8 b$ w/ Y+ k
* C6 [" _2 \6 \! ]' \3 A我大约calloc  每次共计大小为5K*16bits,5 r5 q: ?( |* e3 k7 I
而默认配置才0x4000、需要改大。# P) `6 B$ P7 ^8 Q, I: \7 c
, Z& m) u  H" M6 D
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明* ?, m' c5 }5 S7 a1 h3 d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" l7 \) L9 h# D% p(不过疑惑的是,为何单独DSP仿真就没有问题呢?); h9 p  H! s+ P- I% o  [4 @
- H7 [: W; m5 s" \& f
是不是需要在DSP.CFG中进行配置
$ \! l& D' I% f/ z我现在的配置为
) v" I- h1 ?, |( j# e4 h$ ~
5 r) }4 g5 T5 J5 s* O2 Y9 B& D( ~/*
4 U$ Q& w( t% I9 l *  ======== Operating System Configuration ========+ {1 ?7 w( ~" ?, A8 [; P/ \1 |
*/
" n) B! x  r4 O# ]" g5 s4 N
7 N  L* {  U$ G1 C* C/* no rts heap */) r3 G% W+ K$ ?/ f: |
Program.heap = 0;
4 a- q- h# ~+ N$ W8 H: {Program.argSize = 100;  /* minimum size */
& ~, M+ {/ J& C8 g2 n. OProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 D; I1 I# S1 D0 {' l1 Y

6 z. ?* T- h& j7 z8 L/* create a default heap */
6 b( ?8 D3 l) B; n' {( j4 n- E5 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: W8 O" Q- [, Y) p, z+ Y% Uvar heapMemParams = new HeapMem.Params();
% y. }1 h( _3 e. J( _/ w& }% u' hheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& m. d, d" I) K$ ]" q8 Y% o9 I9 ^2 d" }) {3 f
var Memory = xdc.useModule('xdc.runtime.Memory');
- |1 W  r6 e, j6 L, E0 FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. I8 Q1 b/ N0 u3 x" ]- C4 R% S4 i4 W% r

% }* ^4 n( ~0 P5 ?% k; y/* configure System module */
8 V5 ]4 ~  o+ @/ p; l2 j, g5 Nvar SysMin = xdc.useModule('xdc.runtime.SysMin');! h4 O% o/ x9 K
SysMin.bufSize = 0x1000;1 O  Z/ G% f! X6 B2 F
SysMin.flushAtExit = false;
& V( T; ?0 |: z1 N, H. J' t7 j" \/ w0 y5 P+ {8 D
var System = xdc.useModule('xdc.runtime.System');4 f9 U$ K$ e4 Z% G9 _  _. _
System.SupportProxy = SysMin;
: v) k% ]" p" N( |( s& ~& P$ u& d* ]1 M+ C
/* configure SysBios to use the lower half of Timer 1 */
7 m3 G) k) n7 k# V8 y; rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! d) Z4 @* G1 }9 ?. [4 ?+ Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');/ J% W, M' B$ p* P
Timer.timerSettings[1].master = true;
" h+ _& u8 Y& i, G8 [' m/ p8 p, }Timer.defaultHalf = Timer.Half_LOWER;+ r5 S. m- \8 b# l
Clock.timerId = 1;# w( a* J7 t7 o" H
5 T% p! a9 j$ _/ D0 V
. y5 d. E: J, K# n& g$ E
/*( Q/ b; z; n4 w" F% m- m; Y& y# n
*  ======== Miscellaneous Configuration ========
& C6 {% H) B( Y$ t */
* D; I8 `1 Z% B+ m% W0 \$ {
- ^8 x- L1 X4 e/* set default diags mask */
* o6 J2 b9 z' xvar Diags = xdc.useModule('xdc.runtime.Diags');/ b  ^8 _8 M5 c6 h/ M
var Defaults = xdc.useModule('xdc.runtime.Defaults');
" `' [0 C4 p6 e1 v( B; n
1 k& j8 J* A4 S/ G2 }, _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, {- n8 E0 [4 }/ M- bDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  O5 ]# o0 Y* S( I2 b4 n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" G4 z1 T7 N) ?1 T+ {% n6 eDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- s. i! a3 s5 m2 kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& e, a1 Z% n9 ^6 H* t8 ^Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 _1 k7 D! o) b/ H4 j6 j" K& LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% {* q/ p4 E, H, nDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 N" |$ O8 Y7 ~+ f& \: f) ^
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 e% V" f# l' p$ H. i
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 z. [7 \& _8 @2 V, Q. U$ r  r: y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; X( X& t  P. R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. h+ h7 s1 ]( z' o  B. vDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: l) B$ g9 b* q9 {& x; x3 DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ \2 x0 U6 i! s. ?; A; v
1 V& `7 o# n7 O6 E1 M; |/* override diags mask for selected modules */9 c6 c+ g8 V2 D8 J0 E7 T
xdc.useModule('xdc.runtime.Main');
5 \; K2 J! K1 A4 C4 K1 {6 VDiags.setMaskMeta(
4 z& W3 `0 O  b$ W    "xdc.runtime.Main",8 }2 `$ @4 X; `/ H+ X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 u8 U$ p) [! ~  Z& i7 {    Diags.RUNTIME_ON9 E2 D$ P/ B0 I/ u: z
);8 t% u; C6 d& q2 l* x5 y
, k8 r* f# C  l6 E0 }
var Registry = xdc.useModule('xdc.runtime.Registry');
. O5 @  o( Y  G' c- S8 C/ ]! f% cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 H: L- C; o! ]  K! mRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 b# {" n5 F; i5 \5 ]; a( w% f: I1 x1 A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 _7 I8 }* V! S1 u5 k% n7 ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: n" \+ i* F) P, s  N: p1 A
) t1 z, e5 A: W4 [+ W! C2 o/* create a logger instance */
  _" X5 N4 i! E  ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 J7 g/ x3 j" q) \7 w1 ^8 ]var loggerBufP = new LoggerBuf.Params();' ?; w4 b9 X& F' s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' d: m5 r3 a0 i: R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;  H: u5 F) T$ c: q4 a. M
/ Z. u; E% c4 Z/ D' _& p; h
var appLogger = LoggerBuf.create(loggerBufP);1 C/ t6 C* @" N0 y
appLogger.instance.name = "AppLog_Core1";$ G$ L0 E5 i1 I! P: ^5 Z
Defaults.common$.logger = appLogger;  _& a# |- {, j: H1 ~
Memory.defaultHeapSize = 0x8192;    8 F' K" q  L8 I! ?9 K
Idle.idleFxns[0] = "&LEDStatus";
: h+ n0 ~/ j* G0 HCache.initSize.l2Size = Cache.L2Size_32K;" A/ ~/ u8 j8 X3 \: a0 T; q
: v/ J3 t' a; F, r1 `
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 19:50 , Processed in 0.039902 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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