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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

- e' v/ F4 G) E; @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; E+ P* g3 w0 l; ]. J( a

: v& O; t1 i/ O9 [其他程序段。。。。。% D7 w  [# V! L% J  D( M! D/ {

5 M2 G' ?1 e* R2 i   free(x_d);- O' C  c. H0 D2 ~
& S7 a3 N4 x6 Z; [7 N
使用DSP侧单独调试功能,验证动态申请没有问题,
1 H3 n5 S- Y5 s3 }6 W  E+ P. g
5 Q1 @( k; f% Z& e) ], G8 i' T- q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ ?  H/ A- |* `8 g% N

' y9 [- l2 o  u" g$ \4 x1 Z4 _2 Q& U1 r

! R3 e' u( d) A$ l7 P0 p) x$ f/ o( A0 i7 G

5 E: O/ \& H7 v* t% o) \2 ]5 J6 u  o/ F  m
+ O/ Z2 Q9 Z5 S& G! z  Q
! E- X& V, z8 U7 P* ^# }7 l) }  y- u

2 K9 g4 j5 n5 ~
- P; D. b. x  [0 B) O& S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ |) O+ O) O9 o0 h3 e8 E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) L. E/ T% f4 B3 w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 }, A  {% N8 B( s+ D4 l

9 b0 b, J. S- M2 y) q" i是不是需要在DSP.CFG中进行配置
1 m. e6 z& j! H# o3 X4 G/ [' j我现在的配置为
2 D) M) m7 K' c' w$ f' Y% I- k8 b4 K5 Q0 w# q
/*
3 j" e0 H5 c' n0 R* o0 a- Q# n *  ======== Operating System Configuration ========
- O( |8 X0 E) }6 k$ A& m */
% ]# n7 J: r$ ~- k; w5 d
$ s, L' M" C) o2 a/* no rts heap */
$ f4 s* Z' p3 wProgram.heap = 0;. @( p# W/ q' B. n0 R
Program.argSize = 100;  /* minimum size */
6 \( R; t, ?* n% H$ ]) hProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% ^: A  [6 H( m* Y& E4 m- K( f- p; S
9 e' s' b+ O; e/* create a default heap */% b6 @3 c1 _3 n2 u" X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# R/ H# Q3 D5 gvar heapMemParams = new HeapMem.Params();
% ~% u1 q5 |9 S# _. Y& B9 LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ }' t! N* n  q) [/ a6 S; j+ t' c, I; Y/ a+ O
var Memory = xdc.useModule('xdc.runtime.Memory');
! H$ M8 y  T8 FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ u) ]# u4 |1 h2 }$ e
. e; M3 B' T0 r. y' e4 L/* configure System module */
& a# y0 X, y  @. o! ?1 ?var SysMin = xdc.useModule('xdc.runtime.SysMin');/ b7 u; z8 m# O9 _- A4 M
SysMin.bufSize = 0x1000;: ~$ F+ f8 V1 ]* Y# d
SysMin.flushAtExit = false;6 P0 J' o5 a' a( i, I! u+ c
# W9 G# Y+ V* E9 O* J- j( D, {
var System = xdc.useModule('xdc.runtime.System');9 U7 m  c4 p0 M5 X3 @
System.SupportProxy = SysMin;6 i. z( w9 @3 E9 Y

# y/ Z8 x4 d$ ]8 B! c/* configure SysBios to use the lower half of Timer 1 */
( ]6 Y) V: W/ o6 E: l( Jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! {# a$ }4 t4 T, e7 |; ?0 h6 Y9 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');. V  s1 U# Y0 m. O
Timer.timerSettings[1].master = true;1 O: Z0 a  Q% ^$ s
Timer.defaultHalf = Timer.Half_LOWER;$ W9 A( ]. \# F4 D  L! y
Clock.timerId = 1;' M) W4 f. a# y7 B4 C/ o. J
  e, G+ B0 o3 g# J  K( O
$ v0 |* P  ^% ^
/** m( J; e7 T' r; i
*  ======== Miscellaneous Configuration ========
6 P  I/ D3 r4 Q */
) I+ v: F, ^. d7 k, K9 x7 P$ t9 {+ M: s
/* set default diags mask */
, w' e& N) Q+ D7 H( r! {& [var Diags = xdc.useModule('xdc.runtime.Diags');9 j; K+ b* w, p9 ~6 u
var Defaults = xdc.useModule('xdc.runtime.Defaults');
: @* O# l" u8 v5 K% }( Z/ R; z* a9 ]6 M1 e  H5 q- N8 O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% {& P! ~9 A( G2 ?. d& O7 A! tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( D3 ^5 B  M0 ~6 D. T; ?( vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" u. f8 m3 N: Y, g  o5 `Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 w0 _% O9 N+ h3 }* ~! W0 N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  s% `6 I! i8 p% a
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; I+ ^: [9 a2 b' E) h8 W, JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ D" I% @7 T5 P# I! ^1 K6 N  {
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% e" K6 I. D! L  u
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 g- R: D, {8 ?# s! @  I/ |/ T
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( K4 W1 I! b# o8 J) M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- j3 \8 P' H$ B/ j8 O1 i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' \  D+ C& d: W8 B# pDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 |9 N. Y. W- _9 J1 \+ P
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' {" s; B/ o# ?4 {) s
) {6 P% B( G" a$ W% U( x/* override diags mask for selected modules */
3 G7 J# ~9 F5 nxdc.useModule('xdc.runtime.Main');
8 @$ f$ Z9 H1 T$ B) M. KDiags.setMaskMeta(4 r4 y% J9 C4 G& G2 ?
    "xdc.runtime.Main",8 h  R9 l8 n. t6 V4 d' a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ ^# |+ H0 U! Q" G4 S    Diags.RUNTIME_ON
8 x% l. D! [4 c% {);+ F5 w8 W; O: t+ m3 `; y7 n) |* G; J

4 ^- o& I. ~) _& f' ]5 O- C- kvar Registry = xdc.useModule('xdc.runtime.Registry');
; U5 O2 e& K2 T! o* SRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& N) E, f# g1 k% |5 X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 u! q+ C; w, F- x- l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( x/ N! C9 m, b+ b0 w; m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) v4 j: c" h# ]3 W

" v* Y' ^  O# D* F+ V6 c/* create a logger instance */' Z# S* y7 L; q! {$ K6 h* N7 Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ |2 H* Q) e, t
var loggerBufP = new LoggerBuf.Params();- `4 U. u( D) x! h& U2 @
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  \- C5 k( Z! E9 K7 {! |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 G9 h+ S& h$ i9 {( H9 w/ n5 @: y  p( K/ x
var appLogger = LoggerBuf.create(loggerBufP);
# `7 V4 S6 H: f6 S8 bappLogger.instance.name = "AppLog_Core1";
2 X( P; g/ N" d" C/ n' V3 wDefaults.common$.logger = appLogger;- y% @# A' @1 ^$ D0 ^( U5 D+ {* k
Memory.defaultHeapSize = 0x8192;    % @2 S/ O4 u0 @! r2 z3 j" v& K
Idle.idleFxns[0] = "&LEDStatus";
7 Y1 ~& v) P: {# ?5 N1 t7 f2 M7 }- r% vCache.initSize.l2Size = Cache.L2Size_32K;0 F$ T: ^* k2 T: G9 S& P% t

/ [, ^* T$ i- i9 u$ [
回复 支持 反对

使用道具 举报

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 */4 `$ W* _6 r& {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. }. J! p4 ]( I0 Cvar heapMemParams = new HeapMem.Params();& n/ g8 i. p$ i/ p1 l' {/ Q" ~
heapMemParams.size = 0x4000;
! [/ i: K8 q  n5 m' O5 o/ C
  @) s7 k4 N" G2 xvar Memory = xdc.useModule('xdc.runtime.Memory');
4 o: G/ X7 N1 _3 K* X9 n, m8 @& fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 |; F1 c- d( ^6 a5 l
$ N2 p6 O% h) ~. o
我大约calloc  每次共计大小为5K*16bits,3 g+ W! {. e- Z/ j/ j- r4 |2 S4 I
而默认配置才0x4000、需要改大。
. `5 I- w, `; E# b9 k# y4 F3 _6 X! C( e/ E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& q2 j7 L& l6 _% U- y& N  N
Program.heap = 0;
2 I! Y: _5 o; G9 EProgram.argSize = 100;  /* minimum size */
4 L3 p, ]9 V: z. u1 cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-9 05:06 , Processed in 0.044531 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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