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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) i/ q7 d3 m8 ^& ~" Q! v6 n; B& y$ N& s$ f7 t% K9 Y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 @8 a, r, X+ S6 @3 F2 g/ N6 l

4 E- Y; ]3 ?0 r5 t8 {其他程序段。。。。。
% g& O; D! b* }. o& b - V5 G3 a8 R7 v, @
   free(x_d);8 O4 B& f' w! q2 ?- n
4 q5 B  X3 _/ Q: C5 G3 U
使用DSP侧单独调试功能,验证动态申请没有问题,' f1 s7 ]' c+ j5 B: a

  c( ~$ _; T. c" {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# F, G+ W1 p8 A8 ~2 G" n

9 e# l8 U  U/ K+ f
; U4 H. M0 A0 o2 q( }! _% j, L
$ `# {% p4 {( E' |# z
* T) w- W* s4 m
8 I" y; l' f1 a7 v$ E$ S
' ?1 P8 j6 v3 A5 v$ i! o% c' [# T3 P8 W5 Z3 z
  a+ [; R) a* j

9 Z; Y  N7 Q8 |; v1 e5 f$ l# ?2 J# F. E6 @6 T3 v1 k3 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 K: l' e+ ^! C5 c$ t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: i5 B  t7 L( N* K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 v' f; E. ?/ P, R, [) |2 @) S

/ A4 t! T5 n( V. T% y2 h5 B. a+ ?是不是需要在DSP.CFG中进行配置# `* d8 H3 O8 O- h
我现在的配置为
" ]9 V2 ^/ @$ K7 P* o: \7 x- ]% x* i5 @9 S5 u9 T3 g
/*
+ s" l, F2 I4 b3 a' P *  ======== Operating System Configuration ========
4 n( A, R: E3 P: g9 O8 e! c/ h */
- O+ ~* a/ @) _" u4 `* h
3 `3 F8 l3 ?5 E6 }: X9 M4 f8 b" V/* no rts heap */  F- W* X7 n* L5 @( y' _
Program.heap = 0;7 N+ i& [8 M: a. e  o9 w2 j
Program.argSize = 100;  /* minimum size */
6 s3 ^: P$ A! [; ^$ }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# K9 H8 d% ]& L3 v: d) w
1 A& D0 M/ O; r: h7 B/ [  O$ \! m8 z
/* create a default heap */* }3 Y! w( x/ x: p- O$ o9 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 O2 `5 \# C2 V2 x* A4 V- e7 Svar heapMemParams = new HeapMem.Params();% Z4 c+ q2 T: W$ P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 I' Q8 w' S3 y7 B  E7 P
! u! ^9 S1 c5 [! ~) W$ @( G
var Memory = xdc.useModule('xdc.runtime.Memory');
, D+ k5 w8 z+ e5 ]3 G! nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, D2 D* r/ m/ V
" C6 f* F/ h. o2 `/ U# \/* configure System module */2 Q- v6 r( X+ g  h/ s
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, U3 V  J, F2 ^' R  R! M/ HSysMin.bufSize = 0x1000;
3 B$ w( f  J# g3 q; m% G  \SysMin.flushAtExit = false;
3 l2 m: I8 i' k, j5 L9 U  k; C) x5 z- M1 f/ G/ g) @
var System = xdc.useModule('xdc.runtime.System');2 p5 `! {- Q) P9 w
System.SupportProxy = SysMin;
1 D8 i" U! r  ~% G( O8 {' h6 b# b; m- R7 E1 G4 ]( Y
/* configure SysBios to use the lower half of Timer 1 */
* i: d3 M- ?; z" v3 D: E& yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% I  j3 Y: U- [+ X7 E0 n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; x$ K. m( S  t% t" }" ^* ?Timer.timerSettings[1].master = true;% r, e& w2 H( d
Timer.defaultHalf = Timer.Half_LOWER;  V. a& d  Q7 ?1 \3 F
Clock.timerId = 1;
, c$ d, f" f; b" U- L) w
! B& V) S7 N4 O! h" g  @1 o  w' s
3 }; O8 t4 d  ]' s9 s9 W" P/*
" c5 y. \2 a# R0 w# ^, f *  ======== Miscellaneous Configuration ========
7 x5 N6 l7 b- F! B: D; D */( K  G4 [) H' J! ~4 t

* @, |3 H/ \. w# U2 d$ V( w/* set default diags mask */( d: o3 {9 Q' s* G" H
var Diags = xdc.useModule('xdc.runtime.Diags');
* Z, A5 H' s. G! g! V- |+ |. Mvar Defaults = xdc.useModule('xdc.runtime.Defaults');
1 m+ N( t$ n/ Z! |1 I" V. n; G" n, G! W: u' m  \
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) F% {- z- f# q2 e0 ?; f8 pDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 ~2 N- {  ~/ @. }/ BDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) j9 d! N$ W' V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 o  d4 B: P9 _& A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ Y8 u8 A7 k$ f& r& Z( u5 D) ZDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" ]$ x; {  R3 C. ~6 Y4 G6 |  NDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* o  c9 i) G5 xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 E6 B$ ?( `1 y0 q+ P8 s5 s5 ?7 C* BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) ]3 I) F* z8 h6 y* FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& D/ @7 @  c% p3 U/ }
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* F7 A0 X* W2 X9 B5 u& n9 b# u* A' ^6 L1 PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 V7 V6 A# F1 P% ^# p$ u# z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ b# o$ t$ z! D: I' L7 zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ w5 a8 v: x7 N# g# K

" J4 E* P% L6 ^4 _' C. `2 k( \/* override diags mask for selected modules */
5 z2 c; H/ Y$ L, y" qxdc.useModule('xdc.runtime.Main');
: V6 r% R5 p8 T8 V1 pDiags.setMaskMeta(
" o7 x5 p, {% O( G3 \    "xdc.runtime.Main",
+ R/ n: X& S9 s    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ s& ]4 i& Z0 N; w- v% X
    Diags.RUNTIME_ON/ g# H* k4 i& ]1 q% I) p, y
);
$ u- x) ~: V) i5 w/ t* H% ?" G, M1 y4 E( _2 g4 J; n: g
var Registry = xdc.useModule('xdc.runtime.Registry');. b# L( P1 S5 l& Z  \6 {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 Y- K3 Z9 y6 a$ h7 ]- W# G) gRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- x& Q4 a1 \( c) u6 wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" b$ @; Z, ?( M" K0 o% d! ~! b9 m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( h) T8 h2 u9 K: ]& s
' ~( w: i' z6 K; g2 M2 h$ o. P! w7 }
/* create a logger instance */
. f; z5 G7 o: ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 k& @( g; y( ]/ {. R- N; D( ?( P
var loggerBufP = new LoggerBuf.Params();
; b% N* |1 c* U- lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 l( _+ a' w7 SloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 U; Y1 P# i+ h+ o- b$ S  i4 H# @- V! W+ v4 ]
var appLogger = LoggerBuf.create(loggerBufP);. E' e$ [1 P( p
appLogger.instance.name = "AppLog_Core1";5 F+ m+ f) X5 s' h& w7 R
Defaults.common$.logger = appLogger;4 G/ X" D7 I- ~, v9 D" ^, W
Memory.defaultHeapSize = 0x8192;   
# k7 K6 }4 n" U$ WIdle.idleFxns[0] = "&LEDStatus";; r6 s, F" F1 R
Cache.initSize.l2Size = Cache.L2Size_32K;- J$ O. n% W/ I1 O

3 q( A5 X4 G6 H+ }, X' y$ t
回复 支持 反对

使用道具 举报

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 */
) o0 ~, H0 g1 H; ^' _& i1 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% D, Y; J& o# \
var heapMemParams = new HeapMem.Params();: j& y: b7 Q1 B" ~
heapMemParams.size = 0x4000;
5 ], U0 ^. m/ V7 Q
5 `1 [, `- T% a- S" e; uvar Memory = xdc.useModule('xdc.runtime.Memory');
2 j4 r# _/ V' s, U8 x$ h5 z9 YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* \/ a* Z! T" p$ S
" g' c- y3 B4 D# b) |1 ?0 c我大约calloc  每次共计大小为5K*16bits,) R8 T1 g- u: j/ l4 I
而默认配置才0x4000、需要改大。
. Z$ y8 d6 T7 n) C+ v& d: J& o# S5 ^3 |0 e3 t1 \( D3 J7 L1 Y; q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: ^, B$ S% B- N$ ?Program.heap = 0;
" O0 @6 A+ g  `+ }/ iProgram.argSize = 100;  /* minimum size */& M$ K9 s/ l; I0 U9 I/ m& H' D
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-29 01:51 , Processed in 0.043636 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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