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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 ?0 p4 C  |4 B$ f, O) b0 u
# g6 h7 m: |! ^) n    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 j* {5 A5 ^6 d* a8 l2 h8 d4 v. K3 F5 _# I
其他程序段。。。。。) I5 d  f$ m: K9 d6 S/ f+ O- p

  q: Z, Y4 V% Z3 S( d   free(x_d);
3 S' O* \. b' Q- Z6 A# ?, W  q/ G: f1 E0 H3 |
使用DSP侧单独调试功能,验证动态申请没有问题,
# `+ _- }* C, L: ~1 ?* k$ F2 p* S# \" j% a
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' C6 n3 n, ^. F: d" t  V" ^

( O  y$ O1 f3 o. q$ V" b
5 v) r! x0 F& c% w
4 g) A$ G' T# f/ t- W' \; ?+ ?2 W, e4 T6 C! F  ?$ O/ E

7 \9 G- A7 V3 p" K  H# ?8 e  e* b5 i' Q7 t1 W2 M; }: A& P
' c) ?4 ^5 M4 Z5 z

& d  c: y$ j' o/ y0 V( `' F1 O* j$ d( L
  [; C$ _/ {5 \8 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- ~* T. G8 s4 a1 ]8 r7 Z9 W( W  }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# w: {6 p$ W. O; F4 R3 W(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% E( |0 O& m7 n# x+ Y

  p/ m- H$ c* j是不是需要在DSP.CFG中进行配置5 Q2 b7 ~) r% R7 j
我现在的配置为
; m& s6 @& Z2 \) m+ Q3 a
0 t6 ?4 t" a, d. c" k! F, o2 q/*
5 n3 Z- ~% J- Z9 z& I5 f *  ======== Operating System Configuration ========4 D' |3 F# }) Q* q) G
*/- M$ w0 o* O* B# \0 T
3 n+ }0 q' t4 s; m4 n; X
/* no rts heap */
: h, q1 N9 R( q* q3 W  T0 t* TProgram.heap = 0;' C: g& E! D7 w; _, j
Program.argSize = 100;  /* minimum size */- d& o$ t: L6 K
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' r; h- t' M- E6 ]! c: i
/ R5 ^- J' _9 A& K) a/ a
/* create a default heap */* E, i0 m* V  N- [/ l5 h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ N+ W  F' |+ e6 l' tvar heapMemParams = new HeapMem.Params();  K( m7 n/ Y) X& ]/ M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& A9 P2 P. X: J& F) g  P0 D5 q% d- b5 R4 O+ k& {  X
var Memory = xdc.useModule('xdc.runtime.Memory');- Z9 f/ _( k' C1 u) L+ @. U3 I, V! m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 f5 s& O% Y  U! W
2 }! V" ~# |+ I; A6 O/* configure System module */. I  E$ O( {2 M+ f# g# B. z
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ ~6 c# ^5 D% I9 K6 h
SysMin.bufSize = 0x1000;+ q( X% M" ?0 i
SysMin.flushAtExit = false;. ?6 b% t2 p* ~" j. `

- g+ l% F( N6 r0 r4 d* y; p6 yvar System = xdc.useModule('xdc.runtime.System');$ x4 y2 {8 Y3 Z1 Y- H" T# A! U
System.SupportProxy = SysMin;1 V( [3 X1 Z# s5 E, s, ?3 Q

4 _) l4 h, C! O: S* b8 T, d/* configure SysBios to use the lower half of Timer 1 */* [5 U$ n1 e: s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. |! c( @2 b& \% _; x7 Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* Q1 e- G6 X  h/ m- O: |
Timer.timerSettings[1].master = true;
3 q" t% K4 d" K( J, H6 {Timer.defaultHalf = Timer.Half_LOWER;* T+ ]& i* P% n$ ?1 S
Clock.timerId = 1;
* ~, }. n* v- K: a' n. v
& {' ]  P# X5 p3 X- s. n3 w$ M1 ^
: H! ~3 V. f) v0 ]( y! i9 W% Z/*/ ~5 s! I# J+ X* Q' V$ L
*  ======== Miscellaneous Configuration ========: m9 }- I* W) R& Y4 p
*/( Z# F, t/ h2 m' a9 z
( A% i8 W$ e: G9 Z$ ~1 i2 l
/* set default diags mask */
6 ?) W" l  u+ W' Jvar Diags = xdc.useModule('xdc.runtime.Diags');
; }' y: _9 W( }var Defaults = xdc.useModule('xdc.runtime.Defaults');' S, r- [% M" h+ t0 o; L" q7 |
; _( \4 o* I6 z0 S4 c% I* T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ S. s" d; A" B8 bDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ l3 c( i. P% K- W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 h$ Y- |; F0 R: h
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 L! S# J/ B! H% l' @
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 _3 }. J2 f) ^; i9 [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- \3 S4 ?- Q' ^3 q' e5 N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ V" |) i) Z* W: j4 r2 FDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 f: X/ `! n5 i, }1 }/ x4 g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! U! n0 F- n- c( j4 _Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* L' M; Z( H9 d- X* \5 ]' g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ a7 X! h7 F) h4 `' [+ ?5 R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- {1 U9 B( j! L' `8 R; K  E( aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! A& z# v9 G3 N6 `; k
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: T5 a7 m9 K* A' c. g; W* x9 ~& l( }) Y9 l& s& R& L% w  T9 b8 y
/* override diags mask for selected modules */
) q. d# |) m. bxdc.useModule('xdc.runtime.Main');
: C8 }2 U8 Y' g$ f9 c8 j& h! vDiags.setMaskMeta(( N6 j$ x/ }' r
    "xdc.runtime.Main",
, Z! ~+ z. H  v) w! U  N3 A    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 q  u& h  M& r
    Diags.RUNTIME_ON6 d& K* C/ F( a0 Z! Z
);  n* }5 S: ]0 F) s
1 E) A# y8 v+ e
var Registry = xdc.useModule('xdc.runtime.Registry');) T+ s. F$ {; V: G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 N; l6 k& \: p" P  G6 {( _4 P4 D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# l7 V4 t( m3 \: e' D1 p4 }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;& {! V+ @/ U4 G# W. \& }, ?. R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 G  ^& S  x! n0 e  g
  i" [# W* L$ Y+ g% K/ `- D/* create a logger instance */0 ?( P% g, k! J+ }* m$ c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( }/ X, S6 ~4 T) z" J! |+ i9 i
var loggerBufP = new LoggerBuf.Params();
* ~% W+ E  g: K' E8 K4 `6 OloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" m* `" Y" P0 x% JloggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 |% d% L; U  J6 r! E4 F% Z( P+ }: u! K+ L
var appLogger = LoggerBuf.create(loggerBufP);( W' W) Z. n; n1 F
appLogger.instance.name = "AppLog_Core1";
: ?9 P: P' G1 B3 EDefaults.common$.logger = appLogger;
  |8 ?# `, d4 x& \# e% o! |Memory.defaultHeapSize = 0x8192;   
, o  x9 F4 C8 eIdle.idleFxns[0] = "&LEDStatus";9 Y  t- D; H% m9 R* Y: N
Cache.initSize.l2Size = Cache.L2Size_32K;: I: _) B3 k6 s, @( X% v1 c
+ w2 m- {+ x8 |+ _8 R: F; L5 G
回复 支持 反对

使用道具 举报

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 */
/ |+ P. I9 z# ~" A8 R8 ^5 jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( a& D+ q8 g7 m. Z1 ~  f8 qvar heapMemParams = new HeapMem.Params();1 d. J3 k( P/ f  i
heapMemParams.size = 0x4000;
0 G; |: w6 g6 L# a$ c
, h* j( K2 d# h! p2 s- E. `( Bvar Memory = xdc.useModule('xdc.runtime.Memory');
# j$ j2 C& \6 V1 \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 C" n, M( C" O7 o/ C
  W2 s: R" e3 Q9 ^# u0 n我大约calloc  每次共计大小为5K*16bits,$ x& Q- _3 ]' \. p; l
而默认配置才0x4000、需要改大。3 n' d1 j6 J6 l
  Q! o3 k% S9 _0 O8 W. d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 o2 q# }! T& j2 }" o: J
Program.heap = 0;
! S1 X2 u5 R1 t9 J2 h  I' HProgram.argSize = 100;  /* minimum size */! F0 i2 r9 G, |5 s
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-21 02:34 , Processed in 0.043147 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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