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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  o& B, ]# ^, @. D1 J. H% N
4 Z7 j7 g7 U, i  I# E8 L" P  f, K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: m2 {! t+ ?4 B

3 b0 E" i7 X" d( J; \$ _- [其他程序段。。。。。
6 e) H) F) t* C! s" @ 3 \  J& e) W4 J7 Y
   free(x_d);- [/ O, J0 ]7 ]* x

6 E( n$ o  x3 o7 t使用DSP侧单独调试功能,验证动态申请没有问题,
, p0 Y( Y- n( k; C& ^2 H$ h& B+ y: s/ O; ]: [3 i+ ^
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 e+ _* W8 |' k) o. F5 u

' Y3 ^! O( l6 |+ @9 c5 j$ l, _' P% ?' W. ~6 J  U' _
% O  Y# i" t2 W, f! |

2 o- K1 X+ i! i2 K  K  c2 A" s( a( V" I1 ~0 k) A  `( |

6 D% h" ^/ F; M- z5 a! X; `1 S' r4 [& o" O1 v' ?3 z
6 _: e0 N$ O# C% |7 L4 W: }2 C
4 M7 N/ o3 t" f9 S9 E/ j4 w
2 m1 n) P* R* X8 b$ L8 L
分享到:  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 */
9 i, z7 W: g" j5 SProgram.heap = 0;& |+ ?0 ?0 h( K
Program.argSize = 100;  /* minimum size */
0 a) @& o+ K+ m' DProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */: t, ?$ n) L% q# o, x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 I" [4 v- K. }8 Kvar heapMemParams = new HeapMem.Params();
: O& Z: w( ~& Y0 X, f2 z& LheapMemParams.size = 0x4000;
: A2 l# H8 i: L: r8 v3 `  N% ]/ d, K! F" F- n
var Memory = xdc.useModule('xdc.runtime.Memory');
3 p0 `: u3 ?. G+ N' A: NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ |1 ]& h% j/ L3 E8 x( v
. o# x" ]5 E9 a" i我大约calloc  每次共计大小为5K*16bits,2 \5 L( v- E# P
而默认配置才0x4000、需要改大。
4 C- X* {+ {" Y1 G- y6 ^! p6 `6 ]# D4 \9 a" l6 S
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, ^; j# T+ [  T0 `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 A" r3 I5 l/ l# ?/ b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' p1 C" H3 i6 b# |: L! O

$ j+ E8 v* z5 y, z( P- H是不是需要在DSP.CFG中进行配置8 {( E4 X& k& D
我现在的配置为
6 m2 C8 \! u0 B: D5 z9 Y- Z% F5 T# K$ K* i: C" {& O$ G
/*
8 P% C' B' F4 _ *  ======== Operating System Configuration ========
. |8 F% H# }: g3 C */
0 X% l' d# ~1 {& A7 A2 Y9 }3 K: D4 F3 I5 [4 N/ N
/* no rts heap */) l, _: u: P+ h4 Z% X" `9 z
Program.heap = 0;
: P$ [6 f  D" @8 |1 r2 t7 YProgram.argSize = 100;  /* minimum size */
# s) r; L" U# x! s" e( sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 \) x% A+ N: v
/ I. F' D2 t5 R% @, E$ M# P4 Z
/* create a default heap */
( r/ F, \# w$ c4 z* e' A& uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 p! S/ E% _$ _& ^0 h
var heapMemParams = new HeapMem.Params();
$ B+ X5 u6 J" \$ @: ?+ |9 gheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ G: G/ s5 u1 Q8 f

0 k% [2 R( Q6 }  k% b! s) L
var Memory = xdc.useModule('xdc.runtime.Memory');
6 J4 Q( r. ?; _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 P2 i. n% {/ K$ l! t/ L
+ s7 @7 }1 S! k4 K8 {( z
/* configure System module */5 H0 K# Q( o1 Y% C4 |8 O+ U0 K
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, G' p& Q0 `0 Y2 J, ~  `7 K5 HSysMin.bufSize = 0x1000;2 V2 i3 g) P# T
SysMin.flushAtExit = false;
' w7 ]6 Q% @. D8 A
7 ?, Z6 U# ~% g6 w4 A( j* S0 R8 \9 Tvar System = xdc.useModule('xdc.runtime.System');" V$ W/ }! g( D3 F0 v  x: N  v
System.SupportProxy = SysMin;+ d6 _7 T2 S2 K7 H1 w+ r* P- C; t. W
$ ?5 O3 [! c  t" Z
/* configure SysBios to use the lower half of Timer 1 */
5 X5 l7 H+ f& f+ G5 gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 r' [# T; [$ i* h7 ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 r+ W. g# ]7 BTimer.timerSettings[1].master = true;" ?+ J, O+ ~4 M, ]' ^% U  z
Timer.defaultHalf = Timer.Half_LOWER;7 U7 x: S- b2 l4 J+ i; x
Clock.timerId = 1;& ~0 z1 K8 R( ?  j

+ N7 ^9 I. Z) y/ |3 q# t3 f2 ?9 X  f7 y+ ^' I' l2 @$ o8 D4 s; _' j! }
/*
6 F/ _0 D9 \- m# q1 v' Z/ K; q *  ======== Miscellaneous Configuration ========8 ^3 W- I9 ?1 m% y9 c+ n. N# ?) y
*/
( }2 E0 z" u# i4 C
4 X9 M3 A& p& e* U$ }/* set default diags mask */
3 P; C# A+ R6 Y0 O0 \2 A9 ^var Diags = xdc.useModule('xdc.runtime.Diags');8 n( |  P( |# X# w5 Z0 |
var Defaults = xdc.useModule('xdc.runtime.Defaults');
# g0 L+ h0 X/ Y4 K) K/ a& S- ^
  ?4 t2 F1 j& [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ k! |2 O% R4 d* p) ?8 `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. x, p  H8 `9 Q6 R3 C( P+ ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 ^1 K  Z0 K, Q4 q3 ?Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; e8 t6 X  G( T5 ]1 @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' M$ Z! Q6 }7 |, I5 V. V' O' g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- L3 l+ P1 q+ L; v" ]2 b0 Z* m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& ^- b- f9 i. p# O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ ]$ |0 V8 T" H: ?5 @5 F& I4 D4 g8 B* uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' P- f+ t, Q+ Y" E
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" P( @5 c5 Q5 ]# G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 a! r2 }* Q3 A& P5 q5 ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ T4 Q* z. `* ]+ s# G4 K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- |0 d- ]4 w; y5 }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( M$ c! D4 H) k8 s% F
4 ?) ~( J; w) L5 Z9 V/* override diags mask for selected modules */8 a- D+ [2 _) e) s6 l" \
xdc.useModule('xdc.runtime.Main');5 E# r- ~$ m! o+ U
Diags.setMaskMeta(
& W3 L+ O; X# [8 |5 u    "xdc.runtime.Main",1 V, R/ G! c% V
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( F8 o' c, A- ]
    Diags.RUNTIME_ON+ S# D( c0 a' K3 A) V; c8 m
);* H+ w, L, Z2 [( e1 J& M
! F3 o; {) j# V) y5 k
var Registry = xdc.useModule('xdc.runtime.Registry');. t% v- s( R0 r% f. O1 A. i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& d  Z& \2 Z/ x, E& w* N7 eRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 t4 o2 j' M7 `4 E) o
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  x' ^$ T: x7 s( l$ z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 ]2 H% k, W$ P. c& q! @+ _. X" S/ f' ]9 ?& r1 s; J$ a
/* create a logger instance */5 N( Q' [; @/ R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) r" G% h  G, t- Y. y! ?
var loggerBufP = new LoggerBuf.Params();
0 Q: z5 m/ v- k3 J4 wloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 R" `" |* v2 Q. m  a( [8 m& E
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 z( z+ d8 B1 W1 j& q- E3 _3 @7 \- Q- ~$ h
var appLogger = LoggerBuf.create(loggerBufP);
8 b+ _# `* W2 c7 HappLogger.instance.name = "AppLog_Core1";
& M3 H0 I3 J- Q0 Q5 wDefaults.common$.logger = appLogger;  v# T( @5 [! d( K4 q
Memory.defaultHeapSize = 0x8192;   
, E/ p  k* b7 v/ D! xIdle.idleFxns[0] = "&LEDStatus";
+ c) l( l! O2 y9 HCache.initSize.l2Size = Cache.L2Size_32K;' H- H% T8 f+ E6 t2 d/ g

4 `$ w! K) r( S4 ]* }" \
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 23:56 , Processed in 0.048991 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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