关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

, W" O! L. X: a; @4 Q8 {; `    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" K+ w" ]" t( \0 R/ q2 U- H- q! k, c8 H: `- B, S: r$ e  i9 _) c3 Y
其他程序段。。。。。
- v7 Y% b; v& G) c* L
% O7 Q0 Z, q2 d6 j   free(x_d);! }/ x" T' F# Y" F( h

& q) T6 P, g2 E: N4 Z使用DSP侧单独调试功能,验证动态申请没有问题,9 Y7 y3 t% F. ~
4 a* |9 U  d4 r. r3 k& ~8 Q/ s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ d/ T: X( e6 U% t
% r0 B7 [# y1 h: R
- O8 I4 A5 v; L
  @1 {; ?- r" e" i6 L. r2 b

6 L3 ]0 O) W8 [; l8 K- p5 q9 E5 p( @; ^6 M# w* h
1 v7 B; A5 h4 k5 s3 H

" ], k* v" S# q' ^
" r; X* b5 x7 T, c; b3 }& \2 ~& y; d% X- X5 y# K7 I$ l
3 D9 W4 `' C! {6 B( R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: Z- q* E' n! g; d1 `5 c* Y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 f1 r& P3 w& K5 f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 p- m" x$ ^4 C1 Y1 W

7 a$ r% D: S* ~+ M  U. y8 k( s是不是需要在DSP.CFG中进行配置" w9 Y* m$ |$ E
我现在的配置为9 C) P% p9 v4 q& R

" C9 n8 P8 p* y: w( h. r% j/*
# o1 D. [! `' S% l& N *  ======== Operating System Configuration ========+ n. b+ U( {: j6 D4 I; |
*/
8 T( k/ t1 K! D& C3 e, q( _2 u  N5 `4 ?' b/ @# ^* Y2 T# h
/* no rts heap */* j7 y. j- F$ n* Y# p" F& Z" H$ d
Program.heap = 0;5 N6 R! R7 @# O5 X+ x7 n
Program.argSize = 100;  /* minimum size */
6 H% C# O: ~1 x6 a( H: F# `( [Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- \' r$ C; l2 S+ \& |7 z$ G
+ t1 ~* {7 x- Y0 f& ~" z6 h/* create a default heap */
3 {" }+ H' i# U9 Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( n) Y5 G+ ]' K( J3 pvar heapMemParams = new HeapMem.Params();
0 \/ d5 N/ N3 F6 Z+ q: JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 p; T/ i) z9 z3 z2 L* ~1 v) Z) @( A
/ {* E! Y/ u7 U1 A0 B4 I8 j# r
var Memory = xdc.useModule('xdc.runtime.Memory');- y  T  t4 g, A8 A4 [2 U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' P3 z9 ~$ @/ k2 I

$ f2 h( w$ A) n. l. h/* configure System module */
2 a" H5 _% |$ J9 T9 zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
6 y, ?9 h+ W- p" f* K' ]SysMin.bufSize = 0x1000;% s  U( Z5 ~% }( L
SysMin.flushAtExit = false;# U4 R1 f  e4 ~( {9 ?

' _2 c% O5 X" yvar System = xdc.useModule('xdc.runtime.System');3 G" _8 ~$ I& p# Y  z
System.SupportProxy = SysMin;1 J; \  Y1 b  p
: Y; t# O( t2 M0 O5 m
/* configure SysBios to use the lower half of Timer 1 */$ U6 _, e# I2 h* a* L4 s) M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ E) }6 C( \& q4 ?: C6 T7 hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' {# @$ \! K8 W( T) K/ o8 ^- TTimer.timerSettings[1].master = true;2 t4 I% V+ T; v" ^# e$ ]3 `
Timer.defaultHalf = Timer.Half_LOWER;; A& J  m( Y0 u9 r* ^4 R) f# }; f/ S
Clock.timerId = 1;
/ `& t2 X) ?* S. M( E# V6 ~) G/ B+ j: P* O( Q

6 D' R+ k9 f7 P/*9 v1 N' a  z0 k5 Z
*  ======== Miscellaneous Configuration ========
- `3 F+ Z) O  _8 o- k. M! \# N' O  T */
! R# T1 L9 R' f5 ~. E# {7 t' @( g  X( \% b9 Z3 n3 P
/* set default diags mask */
$ k0 i2 m9 h& k# f0 D8 m" Evar Diags = xdc.useModule('xdc.runtime.Diags');
* \/ ^+ F0 E* ^var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 H. I7 m$ L+ `# @. A  x+ m5 a6 k- I
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ s& K1 b3 e# ~
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ l! q/ ?# G' q9 m# S' z9 _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 f  Q, S$ i+ hDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& r7 l; c) J. t) q7 ADefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ L  ~7 W2 W/ T1 y! {4 {
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* x2 Q% b0 ]- N( q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% D- H: r! O6 s+ E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 h% e) i; z; h  ^/ x: qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( x0 J: m1 A$ X3 [( n& W3 r& qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% `1 p. b) B' S) B5 L. ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& W9 |- g" k* B" n; _, Q! W9 U+ tDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) u7 t* _2 \9 d0 i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. E3 i3 Z  @+ B( fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) y- H, v2 P2 b  _; S4 V+ V( t
+ n. K) y9 }4 R8 X. D6 `/* override diags mask for selected modules */
% D* M0 y6 ]5 Z5 x( ^1 S7 Nxdc.useModule('xdc.runtime.Main');
$ ]4 B  E0 j8 T, N, {2 v: SDiags.setMaskMeta(! c8 k3 w5 g- L2 e8 I
    "xdc.runtime.Main",
+ n+ s& [9 Y) @& r    Diags.ENTRY | Diags.EXIT | Diags.INFO,: E/ `. D# J( Q  m  W3 o( q
    Diags.RUNTIME_ON
) x  ^6 b' P' g0 h8 L);
% _7 y" e4 M) m5 n1 l$ J( o: c) `8 O1 A- h5 ?) O: N3 @* ]1 V
var Registry = xdc.useModule('xdc.runtime.Registry');  D# A0 S3 F3 t; n$ W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! ]# G( f8 i, N( O8 m+ r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 J9 u, x! O3 I; l1 lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ K9 h- @1 \' {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 s7 Q. n: x5 P/ e
9 i- |* S7 L/ z2 T9 J4 ~7 W
/* create a logger instance */5 `# M  i* }4 A! E4 W: G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 F1 ~) u, F, uvar loggerBufP = new LoggerBuf.Params();, K1 G+ m6 J: g6 A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 ~( A1 S/ {0 l, V' I: A5 B; @: [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' T8 B) Z' R% p$ l8 X8 M8 o, Z+ o8 J8 O1 C
var appLogger = LoggerBuf.create(loggerBufP);6 `9 X3 L" f; E3 A9 L- v* ]
appLogger.instance.name = "AppLog_Core1";4 i0 J' `5 y7 U6 |  H9 \
Defaults.common$.logger = appLogger;! w& k( ~& T: }" f" M' {+ n
Memory.defaultHeapSize = 0x8192;    ) m( _/ U2 L7 F4 @' V+ ~/ w2 B
Idle.idleFxns[0] = "&LEDStatus";
/ `+ h; H+ Q9 R; ^: DCache.initSize.l2Size = Cache.L2Size_32K;2 G. N2 l% ~; h1 W$ m( E
' \6 s! @5 X5 U8 K0 z
回复 支持 反对

使用道具 举报

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 n& p& s9 m# z/ j* Y4 h* T( K5 f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, n& @# T9 ?/ g) G( _6 s, ?
var heapMemParams = new HeapMem.Params();" H2 I9 _1 m4 I, _
heapMemParams.size = 0x4000;. e, }5 X0 R9 l. Z( m% m+ a

' Y/ L8 r% r' v: Rvar Memory = xdc.useModule('xdc.runtime.Memory');7 u  K& N) E! ^8 k7 Z# g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! k1 C7 r( r7 G5 ^: Q' ]
. P/ ~8 N/ u' ^. k9 I3 w
我大约calloc  每次共计大小为5K*16bits,7 n, ~2 E+ \& n
而默认配置才0x4000、需要改大。
+ w6 V3 q9 b2 K" R" ^, S% W  P, i6 [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, Z" A" _2 g& kProgram.heap = 0;3 O+ K& m1 ]5 g. D0 w5 h4 T
Program.argSize = 100;  /* minimum size */
4 z! H) W  e6 s' q. w0 E) GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-19 10:18 , Processed in 0.042701 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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