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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 i: l4 ]( N$ }4 q, y, I/ j
* i0 ]: r1 k* X* Z: t$ h
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! e  ?0 u$ T0 c% W6 Z
; j% u- y: Q, l0 U* V. }9 P6 G; w
其他程序段。。。。。6 a' o4 I* v; c5 O

3 f: N% W2 W% v6 Y4 C4 i! p   free(x_d);
6 d4 r0 }( ]/ P  T4 r' D, p% O. ?1 @9 w% T* s5 i: D: U
使用DSP侧单独调试功能,验证动态申请没有问题,
  v; M$ L8 p( O$ q4 l7 R) s! O7 r7 ~# P. T
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 x2 g; I( h" P" e8 G4 G* |
' `3 D4 t, j9 P) L

- y! l: Q8 r3 E. P8 `/ O$ m
1 ^& u3 k2 X7 q' j; Y8 x) U' }- Q8 |6 [: s% B2 N# X( g7 q, O
* C, `5 y2 Z: \) t) D  X$ Y  Z

( y5 d4 d6 W  N7 V
0 Z- ?% E4 n% C1 `# a1 K2 Y
! P0 ?" Y. G0 f( C, z. J/ S& H
5 ~3 \: b. D2 l$ N4 U+ J' k5 O/ G8 I2 K# t% v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 I( {" \, c. e+ d0 R0 ~5 E( u3 `7 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 ?! I  y; I0 m% D& R+ g5 t6 p: N
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% k1 G9 G' g+ f6 K

* P8 ~2 [# K* S/ X! G是不是需要在DSP.CFG中进行配置
+ G$ C5 v) k) d9 C我现在的配置为
+ k: Z8 V3 X+ x
! [5 a0 I. [% F6 m9 D& `$ e/*3 \1 s3 s, _6 m: l
*  ======== Operating System Configuration ========
! f9 f' z0 Q% P/ n2 h) {( N* @5 X */' v4 F3 a4 }, ~# e

3 F7 R) \2 V0 M) A0 b, g! q/* no rts heap */6 l/ {9 G8 N# I' A: o! t1 n! Y
Program.heap = 0;) d) s5 b" \  c
Program.argSize = 100;  /* minimum size */+ z! y8 o) _; F" g% G' g
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 u+ z! g+ R9 t  I* s* a8 W2 h9 |4 E
/* create a default heap */4 w% p9 J* U8 o* U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# j$ [9 p& B. x
var heapMemParams = new HeapMem.Params();
: [- [, g' @' }- [8 H: g4 mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ s2 U1 S# E; |! G3 G/ I: Q
" k: d4 v7 e* W# o) @1 j! [, Q
var Memory = xdc.useModule('xdc.runtime.Memory');8 G9 K8 I; i8 j3 {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ N! B6 `1 N' K1 Y: W
" c2 X" d" d8 V  V" Y( P
/* configure System module */  E6 d2 o' R$ }: }. a
var SysMin = xdc.useModule('xdc.runtime.SysMin');* _+ n$ R% o$ V) S
SysMin.bufSize = 0x1000;0 m7 i  m) V' x+ G
SysMin.flushAtExit = false;
( }% }9 H; A) Q& K
  l& t3 t; f5 e3 Y6 hvar System = xdc.useModule('xdc.runtime.System');$ |9 h  y- Z5 ]0 @; M1 O
System.SupportProxy = SysMin;4 L# X0 k4 j7 i+ g9 V! d  b  |' I1 W
) Z+ V+ o; Q0 ^
/* configure SysBios to use the lower half of Timer 1 */( Y" r: {# ]/ m# W- S! S& y2 s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) s, s  t( B& y1 i, ^! Q& F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" f" o! V5 I/ m4 R* k
Timer.timerSettings[1].master = true;
3 @" l+ H# j( J9 Q* ~+ z1 e. rTimer.defaultHalf = Timer.Half_LOWER;+ @; {* \' t% R1 D: m* j2 U
Clock.timerId = 1;
2 L3 z& J2 ?: C4 t: j) L3 _  t' g3 N9 i4 q6 A
5 Q! V8 ]/ Y+ C' \4 a- k2 V
/*
( p, m$ S9 `0 ?+ T *  ======== Miscellaneous Configuration ========
: V& o6 h' V& m8 v! E! ~5 s */
, P) r; t7 I' M: H6 w7 Z  {$ c' h$ B1 {/ X+ q0 e( ]
/* set default diags mask */
, n9 b) p7 F1 f( rvar Diags = xdc.useModule('xdc.runtime.Diags');
: \* H' J7 @  B- wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
$ Z( ]3 n. t# G9 x( J
9 L) L9 R% m  e4 fDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- g0 W! d5 G! G2 z1 qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 w2 |2 z+ n( @( q1 c7 D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 x; Y5 v5 \6 }" M8 b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// Z$ [  b; U, y7 R( o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 j: e8 r& V( j  ]
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# A4 \7 p7 P6 fDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& c( `0 h9 G: q3 D' VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 o: `$ N" V, {/ x; a; y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& T8 F0 E5 G! S2 c# i
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 d3 }+ i, q8 j" u" GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, S9 H8 g/ j' x; F" @Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 p  d1 q; G4 D+ |7 s2 m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* w8 B: v8 u; q0 @8 H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& u6 K0 F* H1 v- p
' I$ H5 S+ M. p* R2 g& J; K
/* override diags mask for selected modules */
4 d; k, @4 V% V4 T8 u1 |( w; Exdc.useModule('xdc.runtime.Main');4 |; j& |% w7 {
Diags.setMaskMeta(9 e* t4 Y( o: l- C
    "xdc.runtime.Main",7 i0 T  v2 p9 t  J! ~1 ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,, Q) F7 m) T0 {7 r3 j4 w! z$ m/ S
    Diags.RUNTIME_ON+ e" E( w5 ^8 O" @$ Q2 ?
);: M" N7 d. m& v7 ^9 g
- `: z- q3 t* G( ^
var Registry = xdc.useModule('xdc.runtime.Registry');
% \& L- B3 O$ oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  S: q& H( i* L7 Q/ A; b# M2 k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! G: n- K6 H5 ~3 H9 }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 |+ H' W7 d% ?+ L/ Y1 [
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' k1 n( Y2 V" v) j' }6 V) f

) Z- N- M% o4 ]) l/* create a logger instance */
# u6 N5 F* K/ W& T8 Z. U( Wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 x4 U3 {7 C" C5 G" g' @
var loggerBufP = new LoggerBuf.Params();  m$ U& Q9 {+ }! w' J3 z! r7 O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- K7 S7 |7 s  u2 ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 E/ k7 Q; r2 L9 E
# U2 T1 B6 G% }# z9 R  L% ivar appLogger = LoggerBuf.create(loggerBufP);# E# P8 m- a$ d
appLogger.instance.name = "AppLog_Core1";
& I6 }: B1 p) v9 F5 s" c) q6 UDefaults.common$.logger = appLogger;. v  W! t' [* k1 c& P6 X
Memory.defaultHeapSize = 0x8192;    # U9 O* |8 N& a
Idle.idleFxns[0] = "&LEDStatus";
; L4 [" q  N) M8 VCache.initSize.l2Size = Cache.L2Size_32K;
$ E& ^. F$ ]7 i2 ?! }9 s
( I1 N+ g3 e; E  S8 F
回复 支持 反对

使用道具 举报

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 */
/ T; m: R+ r& Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 n2 n' M% y# @& `# r- `' Mvar heapMemParams = new HeapMem.Params();
' i& K: q4 N0 t& q8 J9 l1 eheapMemParams.size = 0x4000;
  Q; c. [/ v: R/ C
1 F3 I) ?) q. d% lvar Memory = xdc.useModule('xdc.runtime.Memory');* v9 S+ O. m: l- r( ^( h+ h; R" w2 X; w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' N& N/ N/ R6 H* i* I9 A  O
; x9 N  u5 `0 ~+ ]  d+ i我大约calloc  每次共计大小为5K*16bits,: ]4 Q: }; m" s% K$ {
而默认配置才0x4000、需要改大。. e! V' h' y2 N: _' c
* j, q4 z! q* a1 y8 ^  R3 u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 W4 A& G; A& Q' c$ bProgram.heap = 0;0 [! }! s3 e, }. X- L+ w
Program.argSize = 100;  /* minimum size */& W- l" \1 {2 W) b; U
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-14 15:52 , Processed in 0.039020 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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