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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& S/ e: T6 `4 q+ N7 |" K$ J  ?* y
" I1 a# \1 t; R+ X. ^9 ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 p) Z% L. z% M. N6 f: P# W6 [

- h- g% H+ o/ y; ]+ N3 E其他程序段。。。。。
8 u! y+ _! f& y) F% B4 r/ A- h5 t
/ I) ]0 X6 G! k& S7 N0 g5 ], X- v   free(x_d);
% D$ h: |# H2 `; T7 w- n) i2 {1 G6 z0 |
使用DSP侧单独调试功能,验证动态申请没有问题,( L$ Q6 o) w$ m# x4 [$ o/ }

% m6 H, r# g5 d9 D% d% W9 R. {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 R* B  `1 ?! u* T1 B4 m
5 V2 i" p- D+ l. \# `; K" H

. L: Y. t% @' @3 }- b- `( c4 L& Z  y  r5 b4 O1 M& _/ a) k

* z1 @5 d% W$ f' s, G+ a# o; A0 Z- m$ [8 w( G

6 T" _- b/ M# m7 i+ Z; l  ^4 m
6 J% `0 [' b0 }3 s8 j# q3 `9 w# o$ d' X: k' q" c

% |8 h" s$ V  B- }1 U/ B1 A/ F! g0 w4 c
分享到:  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 */
" g+ _$ ?. t6 U) tProgram.heap = 0;
' p3 ^4 \) ~- c6 h' VProgram.argSize = 100;  /* minimum size */
+ [$ D. j" m6 B) N3 uProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
+ A  X9 [" j4 f' k2 Q! T0 C" Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! B0 `. W- ?. w. _var heapMemParams = new HeapMem.Params();
2 f; U8 J/ p! E/ _( ?heapMemParams.size = 0x4000;
9 J& l% J+ K( B" A/ c% W% ]) u+ H" z) W
var Memory = xdc.useModule('xdc.runtime.Memory');1 C8 i; Q0 p5 t5 `# Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' K( F3 }/ o9 m. ?- ]6 [

2 b' q7 u+ ]' ^  G8 M我大约calloc  每次共计大小为5K*16bits,# K) Q0 q8 u* K8 L. {3 D' c
而默认配置才0x4000、需要改大。* H: Y- A3 d& w$ D: ~. E7 h! U
! d4 x+ p, J: R/ Y  a9 [
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明: Y; S$ W4 m, n
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# ^4 I" Z2 j* |( M$ E- d5 _. P(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# I1 [4 V$ y) \: G, V- k

3 a( d8 e. J5 b% f是不是需要在DSP.CFG中进行配置
# f5 f1 a; R9 m我现在的配置为2 C' [/ {' q4 @) |: H
, }+ e5 i+ I  z3 C8 f
/*+ G7 I. Z0 s) I: w- `# \& a
*  ======== Operating System Configuration ========
9 w5 E* E/ U! h */
: p! s# M! G0 T0 t" c) H+ Z/ X$ e0 z$ u: T5 Z
/* no rts heap */
9 c% s- ~; ~! ?* u' XProgram.heap = 0;
. J, w" |+ C1 r& c" |Program.argSize = 100;  /* minimum size */
5 i& V& }; `) B" VProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  S$ w% W/ D: V

! n( E/ R6 G" ?7 K/* create a default heap */
$ N# ^; l  H3 q; u' `2 Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: S. m% L3 v4 y6 _: u' yvar heapMemParams = new HeapMem.Params();
, x- ?1 |. L9 XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( N5 T5 c: S6 i$ N
! {! ]) ]# d! L5 A9 d6 r
var Memory = xdc.useModule('xdc.runtime.Memory');
; z1 T0 C* E0 M+ X) SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( t7 P3 r2 I$ Y7 z3 E! D4 X& [2 U
) G2 H% A! N- Q, S3 z$ Q8 s/* configure System module */
0 U4 b5 [8 l; X& \var SysMin = xdc.useModule('xdc.runtime.SysMin');9 p/ e# K/ b/ G- G6 j* ~) V
SysMin.bufSize = 0x1000;3 h! L) ]8 N* l' F0 z& z
SysMin.flushAtExit = false;1 `2 k" X. R# N; P9 h

  P& p+ l( R7 A  c' C% D8 L1 h. nvar System = xdc.useModule('xdc.runtime.System');; u) V( k* B. R2 l* \2 Y! y3 ~
System.SupportProxy = SysMin;! M+ r$ c. ?' V& n+ t! |, J$ ]
( b4 T  S$ A8 o1 l/ m
/* configure SysBios to use the lower half of Timer 1 */9 A1 m( Y; {# v5 _! R! q9 g8 J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  G9 @  [6 Y( q5 t7 `; d9 S% jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
& j9 `; i' X. \9 |1 f6 i  k) OTimer.timerSettings[1].master = true;
' e8 @* `, m8 L/ U6 D0 ]( uTimer.defaultHalf = Timer.Half_LOWER;% o9 E3 l" }  \
Clock.timerId = 1;) {1 H. C& b/ r1 F& V" {: h1 L5 e
; X/ L! O+ }& F  T: g+ @: I+ x
) U- m: o2 F% `
/*. R% s  B- c0 N1 n: {
*  ======== Miscellaneous Configuration ========2 ^1 V$ j- m% [& F  t$ r
*/3 o) p8 C+ c0 Q8 e
% R2 e; L  L; `1 O7 n0 ~; C# Q  O
/* set default diags mask */
. i# B$ C) V- w/ p% G  P# |var Diags = xdc.useModule('xdc.runtime.Diags');; C5 f" J% S8 a+ L& t
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& H% I- {$ \9 J$ n" q
1 U6 ]( S0 K, H7 o& e; _/ ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 N- H6 m5 L7 k: x: i  L/ p$ W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  B7 X# D$ r* e/ h/ ^/ f$ Y1 R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  ~* s/ ~; W% }$ `+ ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 o, r8 l- c5 j3 a1 w! X5 `) S+ k) FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ n) C" n/ Y) B+ a" s* l
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 t. |9 g& a8 j6 i  h! @! Z. g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; f# [' C- c* p! X$ C' MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( `/ E; j9 {# X' WDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" s  a+ q: W( w- r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! }7 X9 [/ B6 E$ G2 h! s, s! g" B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' b  ]7 m6 j* }; w% U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 E9 ?0 o  r0 Y: C8 U: t4 [
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. E8 ^9 u% _. {* |9 T- o+ WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" I0 _6 d5 r) ~( y, O

: W5 o% v. e$ Q/* override diags mask for selected modules */
. ?% g! C# d. \( ~xdc.useModule('xdc.runtime.Main');/ x9 B' D( _+ q! a
Diags.setMaskMeta(
' a' u) r: @" l8 H6 ^; k    "xdc.runtime.Main",
# m2 t6 x  Q% E    Diags.ENTRY | Diags.EXIT | Diags.INFO,# J0 H) h  l- ?# f5 E
    Diags.RUNTIME_ON6 I* H6 w7 d1 k( }
);
! }5 A8 Z+ e+ G4 N' h' `( ~
5 {; a. }3 @. T6 \/ svar Registry = xdc.useModule('xdc.runtime.Registry');
" c  d6 M0 h. v) }7 sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 [8 Y0 v0 }; V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# I$ F! w+ j  n5 `; x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- k4 P' i4 P- ]' B9 @; W
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 c$ h1 T; |+ y3 T

% }6 X8 M1 ^6 l+ a; X1 R1 F+ Y/* create a logger instance */
$ b! A5 y- C% ^6 yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. v- j, b* \0 o. O; E( wvar loggerBufP = new LoggerBuf.Params();
2 T8 T8 ~) C% `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 T/ ~* T/ a7 Z4 LloggerBufP.bufType = LoggerBuf.BufType_FIXED;; g; y. Y0 A, R, g8 v

+ u! Q* A$ S: x8 @9 [) Ivar appLogger = LoggerBuf.create(loggerBufP);8 @: ^1 R% i9 x  k! V
appLogger.instance.name = "AppLog_Core1";
& S! M" h" Q5 Y) I( M1 @Defaults.common$.logger = appLogger;
) b* R7 _% ]2 E9 S- k  F/ nMemory.defaultHeapSize = 0x8192;   
! r6 r. @+ n0 X% m2 |' a/ O. UIdle.idleFxns[0] = "&LEDStatus";* W1 i' Z6 S* y  N* |! w
Cache.initSize.l2Size = Cache.L2Size_32K;0 ~3 h5 I+ |; b9 [# h# j+ b

9 N$ @2 {5 p  G
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-4 09:25 , Processed in 0.042631 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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