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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ x$ _$ x6 j. X
" p- o5 Q7 v6 N, L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 V' E3 Z3 u( L: L, o( S6 z
! I+ V8 u/ e* Z4 @! y
其他程序段。。。。。# c: R+ e( N: V. Z0 Q
/ X% ]0 A3 G$ p$ i3 t7 N
   free(x_d);( F$ ^* v$ ?- c. q- U

7 x; K0 F* J' p6 H( G* E使用DSP侧单独调试功能,验证动态申请没有问题,
5 t/ ?7 G  Y3 F+ S$ P9 \, s3 ^* ?+ ~3 V. p. C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, l; A" b" {3 D
5 v8 Z6 i* X3 U" j1 i0 O
; ~. B  d# r' E; D3 Z

. d# Q$ V, o% Q
- u6 ?) X5 ?3 M) p
* f2 z/ G- i- t5 d! m" o" n1 D+ _! ^! A) M; H- O6 Q# K

2 a% z( V; h5 Z
( c1 j0 R* ^6 s2 n! y* j0 E4 e5 k) e3 L9 _

- Y4 {  ~$ J- U7 T3 \! L1 h$ W5 q" r- a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 A4 }$ u/ ~7 _; u: |+ F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 J0 o. E* R  r% N6 s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 A: {9 L( z5 N" X

1 n* B* r9 ^1 }' F( l5 D是不是需要在DSP.CFG中进行配置# e: p0 o7 t+ }6 p8 E
我现在的配置为
+ z$ h% e4 M& x
% B$ K4 S# o1 z- O( O/*
7 U  E% g  x$ s2 q' m *  ======== Operating System Configuration ========( Z7 q+ m" K4 T) W+ E# }
*/( f  k5 [1 Z$ N' b& j& l2 x/ Z, [+ w

- }8 Y3 q6 Q( V! k/* no rts heap */' V/ _+ k$ B9 H$ L
Program.heap = 0;
2 ?# d7 S0 F) |; bProgram.argSize = 100;  /* minimum size */, a5 X4 E6 c! i
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. F; A! @  ]. Q( r
$ F0 y; z) y2 e/ t/* create a default heap */
( P1 G2 t& ]1 W7 C/ [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( g: v4 W$ d; ~" X$ F6 o# ~
var heapMemParams = new HeapMem.Params();8 X* n+ A  D" F" E9 w  p# P1 b
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ d  m. k8 q6 n
) O; H# h8 Z0 i) p
var Memory = xdc.useModule('xdc.runtime.Memory');
; v2 z5 \2 t- [: u( e0 }1 d( oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  }; P0 P& a' C1 @' w& P  I
9 L0 R  Z% g- t  X  c) B) h/* configure System module */8 ~5 b2 B1 i1 Z" B
var SysMin = xdc.useModule('xdc.runtime.SysMin');- X9 o0 E' I; I
SysMin.bufSize = 0x1000;7 z* E: [* s9 w1 F# d& w* g6 ~
SysMin.flushAtExit = false;5 I+ X- B: p6 x( R

& o" L1 B/ }; l" k9 c% E/ x% Fvar System = xdc.useModule('xdc.runtime.System');
7 k. x6 s0 }% t5 \0 b. ^$ j1 ySystem.SupportProxy = SysMin;! W" E1 Z: E, _1 w2 k- r3 y  `

+ \2 U; k# _  U9 X/* configure SysBios to use the lower half of Timer 1 */
5 M8 k' H+ x9 \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( W2 Z* i% z, d9 X8 ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ G, [3 a0 Q* n0 ]  |' VTimer.timerSettings[1].master = true;
/ Q+ u+ p6 o( F! s/ e2 yTimer.defaultHalf = Timer.Half_LOWER;8 V% q) h8 b  R+ z+ d  @# l
Clock.timerId = 1;4 g6 [+ q; ^. I3 \$ a

# Q& ?1 }) U# }: V9 M/ G
( C" M' [! V0 A# q" P* h. X$ q/*3 ^* T7 Y0 |3 D; b4 x4 k1 ]; H
*  ======== Miscellaneous Configuration ========8 }7 w; r) X4 s* k7 W5 _' h) F# c1 I
*/
3 H" H5 J4 M0 n: g5 L: ]* A# }0 \; r
/* set default diags mask */
) @# w' @" @8 a, ~( i1 k2 Q$ xvar Diags = xdc.useModule('xdc.runtime.Diags');: }- c- r4 C/ d+ {: T1 u; k5 W
var Defaults = xdc.useModule('xdc.runtime.Defaults');
: F  V5 L2 T3 z! H0 F, P" z. X
" a4 S: L) I: r1 T' A" Y$ fDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- n9 ~7 {8 M# ?6 P+ U/ {. _( wDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( Z7 c! f% [5 l( @2 W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 S# e- A8 |- e3 r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- h% O- h" y6 m4 t3 p+ n5 k( [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& p; g+ J, W5 i2 n& o2 r' DDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 s3 {* ?9 P: n$ r4 d4 A8 Q, f: }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 z4 K0 E: _& S. R( r, hDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ r1 k; L) c- P% j! XDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 V3 G$ |2 j% f+ i$ j8 M( p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 R; N. a5 K' P; x$ g6 B# L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 g+ |7 l+ x1 I& o7 y8 L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* E4 K/ ^; U- i$ h! N; Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 T* g9 `' x: _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, a/ G5 y  o) y0 ]

' \1 Z0 Z  q0 m' ~/* override diags mask for selected modules */
$ N; n" V( Z3 kxdc.useModule('xdc.runtime.Main');, H1 P. r4 n8 D3 L0 H( G1 G
Diags.setMaskMeta(
" n" C, }. L; i    "xdc.runtime.Main",
8 L0 j" d+ z0 @    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 V! S6 d$ a2 k( B% c' q2 X7 h
    Diags.RUNTIME_ON) o* ]4 Y  z9 [( u
);
8 I8 P' {9 ]/ r9 w' h6 p7 k  J% Q+ ?8 g/ t1 A, {1 q. i5 s
var Registry = xdc.useModule('xdc.runtime.Registry');
* V9 r& h1 P! r" |- y% t9 w- |5 bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! G! D- g  w; @2 P0 z5 U, PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 u. o5 Z! W: |; g5 IRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; R+ v% o; u! Z5 _+ O8 M
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 d0 z" }: I# T4 E; }

8 O  r# z( D/ M( l5 J4 L! A/* create a logger instance */+ O. G0 W8 a/ _, K: Z2 ~/ X+ u
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, Q3 C+ I9 X: ?2 W/ L2 [: \! Zvar loggerBufP = new LoggerBuf.Params();8 W4 a4 F( }4 C$ u; e- l: ?: x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  ~$ H- c4 {0 O; ~/ C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) V! S$ a; \5 E1 h' L2 `
# M2 F. ^: D+ Svar appLogger = LoggerBuf.create(loggerBufP);. \2 w0 W, }$ @- x
appLogger.instance.name = "AppLog_Core1";* [0 z0 A1 |6 h* i  C, g+ ]
Defaults.common$.logger = appLogger;5 {) {, u2 f8 k% l2 q+ [
Memory.defaultHeapSize = 0x8192;    : Z' T/ C! h4 B# T
Idle.idleFxns[0] = "&LEDStatus";
' ~' z5 s, k" B* ACache.initSize.l2Size = Cache.L2Size_32K;9 [) Y8 Z: Z  Z' q# V( x7 D
5 z5 X. T9 a! N* Y- A0 p
回复 支持 反对

使用道具 举报

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 */
8 _% H, G# X  ?& Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  ~. q" n* X( [8 R/ n8 avar heapMemParams = new HeapMem.Params();3 @# z5 T% S7 k- k
heapMemParams.size = 0x4000;
' Q& R' F7 M! @/ n) J) A$ l2 E! k$ g0 C& S
var Memory = xdc.useModule('xdc.runtime.Memory');
: S5 m2 K' g: @; ?3 |# `7 ^$ v2 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: j8 |. B& Q6 f$ j

6 W  d7 m4 j4 o+ D我大约calloc  每次共计大小为5K*16bits,
% U/ ^2 o) f7 g) f- \& A而默认配置才0x4000、需要改大。, U6 i7 M1 e; ?3 T: o/ ^

+ H, S' m# ]  Z' H! i# z4 l# G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: u, q: ~9 @' G$ CProgram.heap = 0;$ z" T/ @1 S! _# D! M# J# ?
Program.argSize = 100;  /* minimum size */  F- G8 o+ {% M7 _6 A( X% Q& 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-30 03:17 , Processed in 0.043415 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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