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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! b7 ~5 d, b0 ?/ z8 ?7 ]6 l

, i1 S8 Z5 b# d  d9 R$ y3 E1 D, G9 @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
% Q7 e+ v; n& ?0 W2 Y5 P: z: M# J: _  S
其他程序段。。。。。2 j5 `6 [4 D& j# T; t! j, t4 ?

  n6 S5 U  m7 a  ]# k6 r   free(x_d);
( g* \$ B& c0 `/ T
+ ?( i/ h7 z5 @1 G使用DSP侧单独调试功能,验证动态申请没有问题,
8 t- {! M2 u8 w$ z( V
( a) J# k" K: W* ]9 L但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* T3 B9 V2 S" A) J" x+ X  l

3 n3 j6 B2 a7 O0 _0 S" X) \% M9 P# m! M% ]
  x9 L% i$ ?1 c/ S" v

+ p. e4 i# Q/ K
6 Y6 u. o& f0 a1 r, ^: |) X# A2 b9 j# S
( @. t; |/ X" j9 J- k7 a# L

  K6 {% s# T+ n1 i1 r" [8 m5 m+ F' ]3 d, W, v! m* I9 S
: d/ `2 d$ n1 J- ^, P1 I# g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. ~/ C, R/ h& |8 [2 r我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# g) }; m& m( Z4 e) ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 h1 l: Z. e/ ~2 @
; D; P- }( U$ R5 y5 a
是不是需要在DSP.CFG中进行配置, ?3 g* j) k  x2 ~
我现在的配置为( F8 Z' D; ^/ z6 B- z' w
2 ^, d+ W: A% N/ A
/*% ?6 z: j1 {( b# `8 V
*  ======== Operating System Configuration ========
$ Y7 x/ ~6 N& t8 \* i6 M8 f0 \ */* J7 K9 _& ~! z! E3 p" n* |

* K6 v" |" X# d, z/* no rts heap */
0 s+ E# t3 Q' u% C. H0 a3 XProgram.heap = 0;
. [% W4 g4 \/ W0 M  [6 ZProgram.argSize = 100;  /* minimum size */! I; r( \4 w' i9 O1 z' G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  Z% D1 K4 Z3 R

5 P/ l# _& P. y; U: {  T: R/* create a default heap */
: Q* d$ n) D7 ~5 @* ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 t3 L5 Q% Q0 V. c, Nvar heapMemParams = new HeapMem.Params();
3 [7 u4 H8 I/ Y1 _6 @heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 f1 r, `: w/ N6 s: c. Q6 z; R& F- V* b0 q+ H
var Memory = xdc.useModule('xdc.runtime.Memory');4 k  Q' t. _* j5 B/ @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ I; K5 I0 J9 \' _0 b

3 u. P6 z  f0 y5 @/* configure System module */
" i4 s! N1 |# e( H5 tvar SysMin = xdc.useModule('xdc.runtime.SysMin');' ^' n$ K4 D$ Y& C6 b5 z# F, a
SysMin.bufSize = 0x1000;& B( ?1 q6 n" g( L- C, C1 G. T+ s6 y
SysMin.flushAtExit = false;
" ~! a* h. r! E1 v" \# t5 w1 X  @1 C
7 y# c! O" A, w* ^% ivar System = xdc.useModule('xdc.runtime.System');; ]4 i0 k6 N6 ^9 V. q
System.SupportProxy = SysMin;
& M9 ]. `, I, c. q
. Z! o8 h2 B3 P) a7 Z; `* V1 t/* configure SysBios to use the lower half of Timer 1 */6 B$ k6 t7 t- u0 J& W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 X; A3 a- T- N: N. }+ k9 w
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 S$ `7 ^, H9 ITimer.timerSettings[1].master = true;- {; U' Q' B. p  n
Timer.defaultHalf = Timer.Half_LOWER;
  L0 Q6 V3 W2 S' M6 Y8 e. s# HClock.timerId = 1;
1 x% J; A& k( H. ], k* M; _" I1 t: I% T* u
0 L, Z5 F# m) V" V, `) z8 u4 A  f
/*5 ?% J, P% A* ~$ s* V
*  ======== Miscellaneous Configuration ========
5 [6 |- g/ M. D! }! |+ a, u) s */# l; x! a+ Q6 ]' @8 f
6 G. Z. F3 V4 J, l4 N
/* set default diags mask */5 Z9 Z* F4 h$ l' {9 _! U/ V3 t
var Diags = xdc.useModule('xdc.runtime.Diags');
+ Q' F* b9 v  [2 I( P$ Qvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, {" I2 ^+ G5 I- R' `8 E
' i0 d5 F/ e$ ]/ b+ [) H( |Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- Q7 [- p9 C1 `+ f, wDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! L4 O6 F' c  X  O9 a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, n0 i8 S6 ?1 p4 i% CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; i3 {5 e: P4 n- e# @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& R3 W" r' a4 H* s+ G. ]# y0 H$ a7 T: y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. j" N( R+ ~2 h8 A4 M- w5 ?/ DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 M" W( t$ h" k, W4 l" M
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 B+ H- s: a9 XDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 r- k- D  Q/ [. [0 i
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 v3 R* T7 |& i8 v5 PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 M9 E' ]  Z/ F0 {+ U/ \; W' |+ pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* I- b) w/ Y; C7 |! V1 Q4 b
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- B  I0 n# b/ B; j. KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ s) q* F$ J2 g" J; [6 X, R2 M& C/ I8 n2 K* p' E3 n8 j4 P& Y
/* override diags mask for selected modules */# Z+ t8 B0 {) S" Z" l6 p/ o
xdc.useModule('xdc.runtime.Main');
5 v! ~! B* ?* v$ h0 tDiags.setMaskMeta(
: t" L! n4 W; R( r9 N    "xdc.runtime.Main",5 T3 ?" ^' U  V+ A, {; ^) ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,' m9 y0 J4 ]- Z0 Y* W
    Diags.RUNTIME_ON. F/ w& i$ X5 h2 j4 m' v  A
);3 f4 [2 ~. w% S- {# ~! @

$ _  U' F% ^( d: g3 ^4 F4 avar Registry = xdc.useModule('xdc.runtime.Registry');% S: Z% g; n/ M9 K* [* ^* ?
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ e$ J7 ~( ?6 f4 K6 Q- ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" }  j, Z- G9 j1 PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;( `/ G, m5 \9 ~2 _: E8 j" y' j
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ ~, A% s- S. C  S8 D
$ s2 E2 V+ _( s
/* create a logger instance */' \, W. P2 @! A7 w" @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, f7 C+ Y7 S9 z: T
var loggerBufP = new LoggerBuf.Params();
- V) |# E$ ]" N4 z+ S7 U7 J7 ^% @- r0 ]loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 O; _/ P8 ]- Y* [" |8 W; g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;: M, F1 Z7 s( E1 ^, t- n( n+ ], Q( }6 z* e

4 O' X+ H! _& N3 M" a! G% q( n2 t6 tvar appLogger = LoggerBuf.create(loggerBufP);
) ?8 N9 I& N: ~7 Z9 x7 NappLogger.instance.name = "AppLog_Core1";  y5 z5 w4 ]7 y1 n$ n
Defaults.common$.logger = appLogger;: D0 ~% P6 L! [7 Q3 T# e1 F' M
Memory.defaultHeapSize = 0x8192;    ) [# D  _# ?1 A0 P, U
Idle.idleFxns[0] = "&LEDStatus";
* r& j( b! n# H9 Q& JCache.initSize.l2Size = Cache.L2Size_32K;
$ W0 r+ R3 I7 x  Q/ ?+ H- o' K: v2 V% o; f* [/ ~# T, m
回复 支持 反对

使用道具 举报

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 */' Z2 ^( k+ r& k% }# E, P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* g! d! u# C4 |% m" [var heapMemParams = new HeapMem.Params();
- h. }" C+ p& O/ i; z( }- gheapMemParams.size = 0x4000;, B& j! t( p" A  m8 V
, |- m0 v0 e8 P; N3 y7 h
var Memory = xdc.useModule('xdc.runtime.Memory');
9 z1 R' F2 Z% g' w& Q. lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 [$ V8 O; ^# f" a  C! @& w8 _
$ U0 Y0 V1 W! J# Y: P# f
我大约calloc  每次共计大小为5K*16bits,7 \% D" j( u* X
而默认配置才0x4000、需要改大。
; P, ~, z- U6 u% w8 T' u" r! K
) u8 g  O0 t# V( V/ Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 p" Q- ^6 l$ z5 B6 t7 B
Program.heap = 0;3 y( q3 {! u& I' x% @3 g/ z
Program.argSize = 100;  /* minimum size */
4 f, q$ Q1 D4 |9 g. lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 14:27 , Processed in 0.041640 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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