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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! R7 I0 I0 p$ e0 _2 i
/ o& e( x& F: j, W1 U. \9 c+ F* L9 b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- D, I+ w( s# C* u5 h* j
# b2 K8 o8 m6 n7 L4 n0 j& o
其他程序段。。。。。$ A+ m& Z4 w% M/ L& z* s  V! ^
1 G  |9 R+ ?- @; x
   free(x_d);8 U4 C; B0 a/ [( b- q7 S( X
9 c+ x$ z2 Q- H: J2 J3 C
使用DSP侧单独调试功能,验证动态申请没有问题,8 L$ m+ L9 T( \

! [% e  Y( [! J& j+ N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( w% q; z6 O; C" [% x" a
) p2 G4 s" [, k  e
2 G# ^/ M" S. R4 }* `0 j

4 [& S" M* t6 N1 o9 d) m! u' F9 t/ \8 i3 T7 A' G
3 h) U$ g- L# b3 Q7 l9 j

9 ?- l) @" q7 d$ Q8 x. c% O/ G$ D% V7 _* ?) j, A" o' {+ j7 {- l
* b, b2 o* O6 M( |3 i1 j5 v7 F

. f- C, Q" I8 x# b2 O( O! M& p9 Y) o* Z) p8 E+ J* E) H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& _4 z5 }6 `4 d& }& |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& s# `( X" k) g4 C4 C. t0 ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 }4 _* Z4 N* y+ H! x( B* A
% Z# C; p3 U3 w: _& B
是不是需要在DSP.CFG中进行配置$ x/ [7 T! C; y4 j6 k) w  j
我现在的配置为
( e" {1 _" E3 n3 N4 c1 n/ o. ^3 x" J6 U5 d2 |8 ~
/*0 V: i+ q4 n7 i( @# ?( m
*  ======== Operating System Configuration ========
. l* G) B4 M- ]0 z! w2 l$ {+ h- d */
5 f% K0 a. U0 m: w
3 z9 J0 J7 W) R1 R+ U/* no rts heap */
9 c  k* m( X& l: e. E& xProgram.heap = 0;
1 b' Z2 p' w9 [Program.argSize = 100;  /* minimum size */% |3 p& u1 q" j( S  A
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ b4 e  h6 i" K9 a

* z- S2 e6 T& [2 e6 h/* create a default heap */6 E" t2 u. [: x9 E- R) d( z' s/ f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: N7 E6 o. o4 L* b2 B8 V7 \/ t
var heapMemParams = new HeapMem.Params();; G2 ?' M1 H4 J& }2 F8 v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 D5 e  c' E; H
8 s: C% x0 f" ~7 P5 S
var Memory = xdc.useModule('xdc.runtime.Memory');' `" i. `. ~; T9 V+ S) ?+ u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" Z% d9 v5 A, `1 g+ g8 U
) n! d$ Q( B5 I1 R) i
/* configure System module */2 h+ J5 v2 a# Y8 }- q3 n
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" t5 X( E3 q) `# H$ y# bSysMin.bufSize = 0x1000;
  A9 T: q0 s# t0 s) Y6 bSysMin.flushAtExit = false;
4 S9 S5 O& w. V  l/ U
: I) I+ R$ g+ k" U6 `- y) nvar System = xdc.useModule('xdc.runtime.System');
9 E+ J9 V+ W& E5 y4 }System.SupportProxy = SysMin;+ c* Y' A7 x9 `+ c) \

4 s9 Q- ]7 G: `' r/* configure SysBios to use the lower half of Timer 1 */" s0 k3 A6 p7 O  G! p" I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 o% {; v! p( T- |4 Y4 S' {; I, Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' }7 o* u% }( H0 b6 z/ i* y
Timer.timerSettings[1].master = true;
/ _0 q9 g% @% V5 QTimer.defaultHalf = Timer.Half_LOWER;; x$ _2 H6 w! Y& [0 a2 S/ l
Clock.timerId = 1;# x, f) T: J8 c& `) R; H
/ {: Z4 U$ l! x  a6 P

9 s5 g# [- }* j$ j/*
3 e5 T: c7 K$ i5 D: j  _' ~ *  ======== Miscellaneous Configuration ========/ X4 v+ \" ?& l0 ~$ D1 M4 {- _
*/% P0 T8 l6 h5 y; o) `1 ]  e7 m7 x, V

" W! [, C, R9 W5 q; @5 |' w/* set default diags mask */
+ _, g) ~6 {8 y. o: F2 uvar Diags = xdc.useModule('xdc.runtime.Diags');
6 ?7 M2 Y( c( t0 zvar Defaults = xdc.useModule('xdc.runtime.Defaults');8 z* J2 k) T- X6 w

! m/ l: u  U1 \4 U& Q* c3 p2 qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ v( s2 `, f/ R9 l$ S: l$ k
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! t5 H* E. F. [! t2 w' JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 I) S/ N; W9 x' i2 q9 K4 wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  Y' K, g! X9 p8 F9 }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 Z3 y4 ~. J/ s% }" g8 d& c2 ^. C
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( [1 i5 B9 u: V1 C& sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! R" }! P$ @2 Y" F5 O: m* k6 w4 gDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" n* q4 t( f  M9 i0 P9 a5 B) ]
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ u8 g: T5 ^5 l& r/ v+ X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 f( {( i0 H4 F0 KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 \& j* v7 o( i2 W9 t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& {, h5 q5 j" u- y7 CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- N% j- u5 ]5 D) ?8 r: L" zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- i- A3 Y  [& S5 c) o3 e- T" ~
  j, v, b$ p: T  W* Q
/* override diags mask for selected modules */9 ?/ {4 r* N5 H" z& a
xdc.useModule('xdc.runtime.Main');+ H4 w. Y& G1 [. S5 j' H$ s
Diags.setMaskMeta(
$ e. m$ r( R7 U! H! ^2 [( r: X    "xdc.runtime.Main",: T2 ?9 d6 z$ j5 X7 Z  C
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ }  g' S7 v7 q8 X; y  u7 ^* ^( W) w    Diags.RUNTIME_ON
% ?( @! M$ U0 Z, X);
6 K4 H1 u; O7 J5 \' L- k$ |1 C
  y; h' r& j9 Tvar Registry = xdc.useModule('xdc.runtime.Registry');9 Z. p4 X$ ^8 a$ u7 F% \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 j$ s+ g$ K4 f1 {2 m$ wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 v# D& u# R. o% Q4 w8 i+ `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 s; m6 h9 E& _+ `1 L8 SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! Q2 `, ]& \3 @: [/ B1 V8 N
/ H  t' C( H8 j. @% y
/* create a logger instance */9 H: T& X% v3 r' e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* ?4 w1 T0 A( z( @  i0 _5 {
var loggerBufP = new LoggerBuf.Params();: `& ]# c: i4 X5 s9 ~
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 }! ]* K. f$ \: O0 J  R% u6 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;- l6 j% N! @+ N( T/ [# N
( p* B, j1 N) B* c9 W
var appLogger = LoggerBuf.create(loggerBufP);3 E8 B: M  e) r8 {% e
appLogger.instance.name = "AppLog_Core1";
# ~) G6 \+ y% Q5 r% G8 f! rDefaults.common$.logger = appLogger;
) `: J; [6 t6 f/ `1 Z' u& nMemory.defaultHeapSize = 0x8192;   
+ z) f8 e  U6 k2 h& ]! pIdle.idleFxns[0] = "&LEDStatus";
2 l# Q7 F( t8 V0 @. N4 S) xCache.initSize.l2Size = Cache.L2Size_32K;
3 H% n, c0 m, I% T" R4 g# w- d! Q4 a3 m$ i& l
回复 支持 反对

使用道具 举报

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 */
9 m, _/ V/ B$ P3 Q' Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 b$ a' B% w3 Y! h# {
var heapMemParams = new HeapMem.Params();
: \# T, @: R& s6 P1 L% T6 w, B# _* wheapMemParams.size = 0x4000;, W: K' `. {( x9 \( b% \9 w4 A

# ?: h$ R! p% d! a  v8 ^/ avar Memory = xdc.useModule('xdc.runtime.Memory');
% T9 h0 _" I2 B6 c- zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& f' N& U; j* ?) w, Q

0 Z* o" l4 g  P' |+ K) D, J我大约calloc  每次共计大小为5K*16bits,) k! G3 d; N! V6 w; q' x' G+ [
而默认配置才0x4000、需要改大。
  f8 Z; A" ~" Q2 L; \4 t* Q% S2 J; ~! O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 A8 [9 I, U' `" |# RProgram.heap = 0;
& Y0 [1 h( S8 M7 r- wProgram.argSize = 100;  /* minimum size */# C4 P5 V: n* @0 M0 _9 k6 W' |- [
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-10 12:47 , Processed in 0.076918 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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