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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) c: o6 R% V5 I  x; W* ?# w7 h# d3 s* V3 ]' M7 q- J! R* a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; }" h2 ]; B, I! K: H

9 }7 n  N, c" }& `其他程序段。。。。。2 }2 g4 s6 f8 K8 Z$ |6 d! f: j+ V
( R# W+ @6 A8 w; e) |- ^' f. V
   free(x_d);
* J, b8 ?% Z+ m1 j  K' l1 h$ a( l) c- J/ c  l3 O8 s) r
使用DSP侧单独调试功能,验证动态申请没有问题,
: i! v! s% }  x: H& s% g# v" d% J# y9 J1 b( P7 t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 G9 ]' D' Z( B+ `5 k
4 s$ s' ^9 C) c  B" U
( d* U' O/ M' U: j3 b, {# v
% i+ i5 u1 L  y9 A
! e% w+ v1 s6 d8 A) `. @3 I, j
; R/ U" q% N$ _

1 c/ E$ T( e( C- ~6 x* d* L  r! v2 v, A: t" T# V% m

" M8 {7 a8 K/ x1 o# G9 h
) o2 r1 P0 H( n
8 E: c, V% d! n% N0 b. e" Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 I& V( p' ?8 r7 c6 H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 c, L% _7 i2 X. `- ~6 x& h7 T4 D(不过疑惑的是,为何单独DSP仿真就没有问题呢?). ~, i9 x& k  L0 `# }

* l- j& k! u2 ?7 o* @1 H# |是不是需要在DSP.CFG中进行配置
5 x0 s7 x8 Z( r' j. j我现在的配置为( Z5 g# h9 J. x! S( O
$ {5 C4 N+ O& W3 g
/*
% d* q2 F/ x- ^ *  ======== Operating System Configuration ========9 _% v/ f8 P7 |" b
*/( h( Y1 k" ^  ^) z
( r4 [% i8 H; q2 U5 N& @4 v
/* no rts heap */  ~7 U, E4 Z6 O* k6 _4 }
Program.heap = 0;' ~3 e8 @; U4 [
Program.argSize = 100;  /* minimum size */5 G  G) E. R" y1 J3 b* w3 z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 v; N  {8 V7 e$ s' r7 \- ^# a
: `* l5 O8 Y$ c, h/* create a default heap */
5 _  ?5 W7 G3 w8 T7 G/ q' @; S  Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* q5 k" t7 d! J7 x# Z7 t5 L
var heapMemParams = new HeapMem.Params();: c& S3 _8 ^4 c" N5 U* u' ~
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* Z3 y4 |9 T8 g$ c8 n( r
0 W7 }! X9 c5 h7 y8 Z6 h* G
var Memory = xdc.useModule('xdc.runtime.Memory');7 b5 s2 v9 w# H6 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 A, K6 \5 c2 D4 z
1 j6 r, z5 L; Y% E0 l3 E/* configure System module */8 I. I& B! {: u8 g. f
var SysMin = xdc.useModule('xdc.runtime.SysMin');
+ v' p+ C+ S3 G' X6 jSysMin.bufSize = 0x1000;
( ?& E# `6 j" A& K  K1 E" JSysMin.flushAtExit = false;
+ Q2 {7 Z+ \' l2 M& A5 G& e
+ X( Y, q( O+ z; v) t6 e4 v/ yvar System = xdc.useModule('xdc.runtime.System');  k! n6 W0 c* Q5 {# w) V7 f
System.SupportProxy = SysMin;
9 h! S* ~1 j) M# M- V
; K! u$ o# ^0 c, W% k5 c/* configure SysBios to use the lower half of Timer 1 */- b7 ?; x& A7 n- n
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- v$ I7 A. k! d; U- lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
, K8 G, r* N! vTimer.timerSettings[1].master = true;4 Q; @6 I/ E) F6 W0 [
Timer.defaultHalf = Timer.Half_LOWER;
/ E0 d, p6 w& H" EClock.timerId = 1;
- `" P  ~7 c* b5 {; C
/ D( M6 O# @- f
0 ^: g7 k. N! F: y1 M" Z/*" m" Z6 b! \  a$ I
*  ======== Miscellaneous Configuration ========4 `, P$ C8 X" {+ K+ ^9 G
*/
! s! _0 k/ r9 v4 y* [* n! x* ^+ o: f7 K0 f. a
/* set default diags mask */4 _* {$ x8 K. z+ g5 H. n
var Diags = xdc.useModule('xdc.runtime.Diags');: N/ z7 o& V1 ]5 g  D
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ Y8 Q5 u) w0 Z% f" c, m! t7 E. M' t" w& T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* l/ }7 ]2 h9 m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 ^' }' P: {/ QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ x$ v5 E- W# q- X& Z' @" y$ ODefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" ~# |# |' g% N5 ]. U3 Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' ?9 M5 J6 ~, l" {, Y) SDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ |! }- d2 z7 E. i4 b: v5 w$ _% RDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 b: m# L7 z/ HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! A' o9 m9 g/ j3 t; H8 M) D3 C0 i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 f2 d$ |% i; N9 S: N( `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" P. ]. S( [% ]9 ~5 H# aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- A" ?4 s$ f& w& E& V: k5 ~2 i9 O
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 {6 I& C5 ^1 KDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 M4 B! E0 N2 ^8 Y" oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) A- P% w4 T  U* G, C4 N. h: K

- S. S4 D/ _$ L! }% \( Z6 L/* override diags mask for selected modules */& }# k4 q9 P  I% P, W% B
xdc.useModule('xdc.runtime.Main');* Y4 z) {: h% J: ~% D4 i
Diags.setMaskMeta(
) |% F1 l# w% f* L    "xdc.runtime.Main",; }. j9 p5 d8 W) q1 i0 ~$ u5 I& N( A
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 i& y* ~! z: `& n4 j6 {* S, F- M9 N
    Diags.RUNTIME_ON
* i' F+ j6 y1 V);  x4 v$ y4 t$ s* x0 P/ x1 |; `

4 f6 R+ n# J) v! c7 Lvar Registry = xdc.useModule('xdc.runtime.Registry');+ Y; `0 V' h: j# a, s$ y; i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 [  h# b$ K2 d! |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 q3 l! w5 u, t6 o0 tRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; [. O5 A+ Y' a( g' yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- V3 K) P, R4 U  B, [9 k5 V; e9 E- i7 f5 I# p6 H
/* create a logger instance */* B- x9 K9 p$ d8 j4 T3 ^. M& D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& f5 v' ]2 ?1 g) x3 @var loggerBufP = new LoggerBuf.Params();& o+ H  J; q2 N2 P$ i0 S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" N2 F8 Z7 i( d  A# ?4 E- _% AloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 N, p2 z) V7 x+ _6 |! A0 y+ ~) {1 y9 J2 [* h; Y' c
var appLogger = LoggerBuf.create(loggerBufP);
/ [0 }& L7 f- k, G+ [6 d$ iappLogger.instance.name = "AppLog_Core1";
& C" ?6 @# d2 P2 X, F( b. SDefaults.common$.logger = appLogger;3 p" G4 h4 r9 h* e( q, u/ _
Memory.defaultHeapSize = 0x8192;   
' U( d! }2 S  y. h0 pIdle.idleFxns[0] = "&LEDStatus";
3 L; n5 f2 X- I+ BCache.initSize.l2Size = Cache.L2Size_32K;$ S. r' Y- D- ^
" b' d- t, T+ H
回复 支持 反对

使用道具 举报

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 */( {% t9 w/ V; v7 v1 Q' ^4 N+ ]1 f2 i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  q  m* p3 l( R* rvar heapMemParams = new HeapMem.Params();/ y+ J/ z- s( ?( y  E
heapMemParams.size = 0x4000;# @4 M7 d& ?, s5 H. m
9 ~/ L, g0 Q1 v3 z+ ~% o& p  M( z5 t
var Memory = xdc.useModule('xdc.runtime.Memory');# v& t, ]1 m* s9 c" P5 L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 Y5 ~4 [- l: N. J+ P- _8 {
6 H9 U( `; Y, h- F+ z1 |我大约calloc  每次共计大小为5K*16bits,1 a- W+ f8 [4 W* J4 B
而默认配置才0x4000、需要改大。
, T& n% T4 Z4 D4 b4 a1 p- w, e7 o9 w1 d0 w; V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 y- `+ I" b7 A
Program.heap = 0;
7 C& [2 _2 ^" q3 j% D0 l4 YProgram.argSize = 100;  /* minimum size */( G& D% z7 K5 x/ f( \( r
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-25 08:09 , Processed in 0.042534 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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