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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

  N3 p. I) D3 o' |: p; R7 k3 `    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: L2 l$ ^- l! W3 s0 s2 t& j
3 c- [. r+ U4 e* f7 i4 b( z# t$ [% C其他程序段。。。。。
! \0 |* D. |* a) g% X9 T1 } / M2 Q" G7 \2 v
   free(x_d);
$ I9 b" x% Z; P- ]$ G/ i. E: F! {; N3 a" k9 Y( C& P* O* t
使用DSP侧单独调试功能,验证动态申请没有问题,7 y! ^8 s7 L9 Y/ i

" J" V7 n1 b% y% a9 w" N+ c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ P/ l4 |# \$ r2 i* u$ `

3 S/ l# W* l' g1 U
& ^) T* b2 E9 n
8 ^9 \& e6 z, ]0 O( N- p! i: S' S3 Q, D) p4 V" U, V3 M) h

/ N( D1 }# `8 e7 f  l
  U6 D0 `. R) f  [: l. |1 v, i
8 V, D5 C- X6 k7 d4 ?2 L- m4 k5 I- y2 O8 ~* ^; V. Y* J1 V
/ O8 ?* G+ }' t0 x! U
, s! o. I6 x/ I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) S; H0 s0 }: ]  L我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% V: a2 i* K1 R' b2 q) L0 e2 x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 e! b" t+ H, u3 i' @7 h* ^
7 k7 m* t# L* q- }
是不是需要在DSP.CFG中进行配置8 W1 a) V) C3 @# a( f: `& Z
我现在的配置为
3 J, m6 ?: o0 x: \+ ?" b: _2 s: D5 P  d) W9 p* ]
/*  j4 }. {. k3 Y. e
*  ======== Operating System Configuration ========
  v# z; W8 Y- n% M( ] */) W+ P, m" \2 Y: ~+ j. u
' Y9 x) A3 W* ^8 _! s: F4 Z. H
/* no rts heap */% z$ B9 l1 L  j" }
Program.heap = 0;- z# T. q5 j$ G9 h8 y/ \" X
Program.argSize = 100;  /* minimum size */
& b, a/ x' w" _+ z6 D' DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 h# b7 F( Z, _9 ~6 n( P' X& C1 X
# m. \& M4 w* u$ h2 c/* create a default heap */. q: a8 N/ J) ?& W: C4 K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# z1 J1 B! J0 i2 [3 p, d3 d( F
var heapMemParams = new HeapMem.Params();
1 ?% `& X* g% z! q# k6 ?, i9 ~heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 D9 W- l9 b- C7 K6 D
9 ^, N! X6 t& W1 E: [
var Memory = xdc.useModule('xdc.runtime.Memory');5 O4 @- @  K. N) ?3 C- n+ Q1 F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 d2 J1 {4 n& l1 s6 x: ^/ F1 V

5 B( l8 j: V! J: \0 T/* configure System module */
5 g8 Y; k, y4 O' qvar SysMin = xdc.useModule('xdc.runtime.SysMin');& z% x, Z& a* U, Y7 X9 z4 r. w
SysMin.bufSize = 0x1000;# ]2 D. }+ e0 w+ N( k+ T. s* V# p5 M' I
SysMin.flushAtExit = false;
: c8 \( ~) x3 t- ^6 f$ q
1 f, v5 Q: S& q. \: pvar System = xdc.useModule('xdc.runtime.System');
: Y: g- l3 A/ ]/ Q: MSystem.SupportProxy = SysMin;1 d1 D+ g: t# q9 v

+ e$ a& v$ q  C* \) R9 F/* configure SysBios to use the lower half of Timer 1 */3 m. i+ x) [, N
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ T# M1 Z$ E- e
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) ?: h2 P$ a1 A' W, `
Timer.timerSettings[1].master = true;' T: _2 o+ F$ Y) {
Timer.defaultHalf = Timer.Half_LOWER;* v1 |/ F& j* ^
Clock.timerId = 1;
) {2 C5 F" D( G5 ]& z* [5 N, q. J+ o# g' `$ v& e3 k9 {1 c
; }: n3 D% R2 V3 L/ b
/*
0 X+ j" l( o7 P/ T) O *  ======== Miscellaneous Configuration ========) V6 `) _' `' z, t  ?2 _5 l
*/6 }7 q9 ?) k" ?0 t6 g
- i, j* j: W, C
/* set default diags mask */( f3 a: \9 F6 W4 ?
var Diags = xdc.useModule('xdc.runtime.Diags');
1 G5 ?. k. ?- U4 D4 N1 ]$ gvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 B6 {* Z9 b6 O, Q) J
; E0 _0 ~" @! E: k# j+ f+ p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" Y4 \8 V7 N8 Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* w& W) y3 F: U9 H9 {6 P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 U8 S5 E4 C( Y* h1 k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: N' E+ @/ v( F, h' ^Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' ~, @) l. t' |: b- H" g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" k6 A' r- J) ?# UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 F- s  P) b9 s4 d' k9 pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, {9 C; ^8 E7 ~% M& i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ d, e2 U3 O9 s3 `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% t# t" y% P1 f7 q2 U" u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* C# z" _& Q6 x. d$ D! f0 |& gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; }% V% M5 p) Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  p+ U* a  ~% o- s% ^4 m, y- K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 V% e6 _5 M* v* L( H$ ^* \
: U) U4 R. u6 B7 U/* override diags mask for selected modules */
' y8 Y! q3 [7 r0 Z7 fxdc.useModule('xdc.runtime.Main');
. p6 Y0 D  V& w+ ]Diags.setMaskMeta(
" ~9 @0 O5 H$ p$ M. M8 l, D    "xdc.runtime.Main",
( r5 B5 U% C: G! s" s    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 ?6 I& q- \! D3 D    Diags.RUNTIME_ON
3 h9 M, I% }5 K: X7 i# I);
$ i8 i! j4 T; j+ E# c5 K5 X
) }7 @$ x! |- Y3 R% A- S, e8 x0 bvar Registry = xdc.useModule('xdc.runtime.Registry');
% @+ }. P1 _6 J$ k: g: HRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) K" \' \# u4 [/ rRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 f5 h) P/ T7 I6 P* A5 Y( |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ R4 E1 G' l; q7 q- o- c- f& r4 ^5 jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 T) N- `* m. F; K

9 J2 ~$ [( P: g$ C. f! x2 \3 O1 ~/* create a logger instance */
& w1 p2 Q2 j7 r2 n, }# ], rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( [; ]3 V; j) k3 f+ A" m* Pvar loggerBufP = new LoggerBuf.Params();, q. z0 n2 S  }0 E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# B3 ~: a* m2 H$ H( k! j3 NloggerBufP.bufType = LoggerBuf.BufType_FIXED;
. y4 u/ ^6 j8 `8 o6 M5 S
- y% N3 c: {8 m. P" ?var appLogger = LoggerBuf.create(loggerBufP);
0 i& |1 @0 W1 F6 ZappLogger.instance.name = "AppLog_Core1";
' j1 ^8 A& i5 DDefaults.common$.logger = appLogger;
" V. y% b) T& a- T6 DMemory.defaultHeapSize = 0x8192;    & F9 L' p) [, }8 D1 x0 y
Idle.idleFxns[0] = "&LEDStatus";' k3 V( G: M- P* V" G# l3 y. L
Cache.initSize.l2Size = Cache.L2Size_32K;" p7 b. ?4 H8 q! \
# T4 S0 P. _6 z+ o9 q, C2 e1 h+ c
回复 支持 反对

使用道具 举报

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 */
( i0 ?# L2 H) k0 a0 _/ Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" [8 o8 G" X( c. D7 C
var heapMemParams = new HeapMem.Params();
7 S% v- L/ }# e, y# ]+ Q: P. S- @heapMemParams.size = 0x4000;
/ v) C7 r- S- Q& P; H- j0 i2 s. ]& ?. c1 r% k. M& [  Q$ @1 ^9 D3 c
var Memory = xdc.useModule('xdc.runtime.Memory');
- y9 m2 w% Q* l9 \" lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 W4 t3 s+ N  B( c
  L* `% v/ c, M& h1 U% I. ]
我大约calloc  每次共计大小为5K*16bits,
6 M$ t1 @8 w* T而默认配置才0x4000、需要改大。
' t$ [2 k. x  V3 K* U
: L1 R9 s) w. v* i; M0 J: {& j4 ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ B: X. R2 }4 f
Program.heap = 0;
% Y9 h3 K* W' j7 _; n/ l# G9 dProgram.argSize = 100;  /* minimum size */  x% f* H8 B/ i6 r- }0 G3 N
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 23:52 , Processed in 0.041970 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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