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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

# C' M6 G$ f0 B. b2 v+ T    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 F: c4 Z6 f1 ]% I5 L( y

$ N8 I  Q& O0 A. {其他程序段。。。。。" Y6 O* Z) m/ x

' J7 T( a# v2 p% U3 T( R% F   free(x_d);; E! t3 A& V8 u* l+ ^7 M+ ?9 g
8 T1 I# i% v  a3 l( N, {' b2 i
使用DSP侧单独调试功能,验证动态申请没有问题,! j& u, \9 r2 W: l. W3 V
* J. }. E, ]1 j6 D- r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ G9 W; x5 w" [; ?1 E" O! Z  M
  R: G$ i; I2 n/ i- z- n6 S& f0 K

5 r  \9 g# Q) _, ~8 z
, H/ W% Z1 b- F3 r
% p. \" o4 F; ^! `& e8 }, E
8 J) R/ F: a- P; e% j6 {4 J
& \! r( P! y! C) }4 R
' E" ^1 v% Z, X9 `% T% i
3 v% ]# O- X" c9 S  X
- V8 [" w; c' R2 a9 O, D& C6 s' R
% F( ~* r  w6 s3 g+ I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; O! A7 l$ g/ T: C) f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- I5 u1 z6 D4 h9 E5 t# G) f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 L2 E1 i! ?: w6 q% @" c
6 ~9 `) ~; V9 B' U9 m# e
是不是需要在DSP.CFG中进行配置
" L$ \+ i7 O; ^, r, i1 T8 Z我现在的配置为) a! e* K" a$ Q- w
) x, L. u5 l* a+ x! ~
/*) y) A; P' l, |/ |& q8 b
*  ======== Operating System Configuration ========
" n& n7 i; W  |1 f! h  h9 h */' O6 q* u+ p. Q7 p# j

- D; ]1 E& ^0 b# x* |/ E4 C+ s' Y0 \/* no rts heap */( L: r) K; J) j7 \) T4 S% z. [2 U
Program.heap = 0;- l; Q5 w9 m* X4 R; p( x
Program.argSize = 100;  /* minimum size */
# E3 o& E  \4 K2 JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! E" i  |5 }4 `7 g! j% v' d) b- i& {: ^
/* create a default heap */3 P- [' }- i- a$ t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  e& l$ M8 F+ c0 s" n
var heapMemParams = new HeapMem.Params();* v+ M$ a" p% j( ?+ o) {& Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 v9 ?/ Q' m$ W( r$ A" J9 l  ~% n( |
var Memory = xdc.useModule('xdc.runtime.Memory');
$ |0 j0 l0 d$ aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, ~0 O6 n: `* v- \$ l0 `) d; @

2 a0 I: g- n0 S$ I* f9 u8 K, _1 m/* configure System module */
( O0 x5 k; K% J% E0 \" |3 ^var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 d# V- A; ?8 n- r+ k, P1 WSysMin.bufSize = 0x1000;
! j6 I8 `! u  TSysMin.flushAtExit = false;5 o5 h# S1 k1 M

* _" R$ q9 J. P- |var System = xdc.useModule('xdc.runtime.System');; |9 `& [2 e, a8 S5 [: P
System.SupportProxy = SysMin;1 ^/ Z- Z, Z2 g
" g& ?! y) @0 c" }7 Q: {
/* configure SysBios to use the lower half of Timer 1 */
# I7 a% U  X4 P2 O5 b2 hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, E8 G6 V- \. H) @) d- [5 q6 T
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 |- Q( f! r8 _" ~7 r5 c% i
Timer.timerSettings[1].master = true;
; C3 E) J7 Y; ~# r8 Q6 ?% o0 ~8 ATimer.defaultHalf = Timer.Half_LOWER;
8 e; y) {4 {/ v4 e" z4 Q4 OClock.timerId = 1;
: d: ~: k) @; [5 j
8 z* u8 I1 H! H
9 p4 P6 ~. @/ i  E& [/*
5 }/ t8 q" s5 V9 x: {0 R *  ======== Miscellaneous Configuration ========
& ]# Q+ s# N' E6 i& W, E */
$ d  Z8 R; E0 I, c' n+ q* B  b' n3 r/ r0 ~- ]- M: ^1 Y! ]! L/ o# Z
/* set default diags mask */+ Q' a; D4 |/ R$ y
var Diags = xdc.useModule('xdc.runtime.Diags');
$ j3 n) L: ^: t1 X/ W: Y# lvar Defaults = xdc.useModule('xdc.runtime.Defaults');
  Z: |6 ~& Z1 m& U/ z
% k, X" A9 P2 ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  \  @' E! L* S: x: w* XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 q/ P6 h  D9 g- m- B9 CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% k: n0 ~  K! U; ?+ bDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  g0 i, {7 t$ A6 {, L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( t  t( ^7 f& a3 I! W: |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 ~8 ?; O! x9 k, h& ?& |, DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 _: [$ O- W: k6 b9 LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& {7 T2 H$ B/ }Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 W) ^1 x" k7 ]) H; w) I/ Y- RDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, K- B# n1 n4 X+ l( T5 {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" E! O7 |+ L9 }4 \2 E
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  O5 t6 |: p# dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; P; P7 K1 P6 i" B1 l% w6 H" A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 k% i# S! P9 F) O/ \8 s
3 H, h% B  @. f
/* override diags mask for selected modules */. z5 \: V8 {6 T- w) a
xdc.useModule('xdc.runtime.Main');
$ [4 P2 t, N* y- i6 j0 L, p$ k% NDiags.setMaskMeta(
, u! j  A" e1 \3 V4 G( S    "xdc.runtime.Main",$ M! b# Q+ K8 V$ S4 G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" o3 M& P0 h  t  _( N9 {    Diags.RUNTIME_ON& N9 S& E: R8 a$ W
);
$ \- S6 d) V& \, T1 O; H9 l* z; G% d; j( q8 E3 K
var Registry = xdc.useModule('xdc.runtime.Registry');5 W, T+ G6 ~; }; [1 G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' n2 C# W, S4 i$ G+ G) Q! D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% p! V  m- J2 c0 T
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ e5 r- y7 W8 S% w/ r* A) J' V. ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ l& h6 U6 j0 K$ }# E/ z6 Y

' L; p. N& U/ q; n4 G8 U, M* M( l/* create a logger instance */$ t( e3 w7 ~0 q, G) S! ]+ S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. ?3 }1 e5 b0 z( Y0 L% O
var loggerBufP = new LoggerBuf.Params();
' U: ?- L$ p  _loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ N2 |4 `. X" y- [- l4 C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 h3 b( ~: R7 p# O# S& w1 L
3 {* d* N# Q' m3 z! ]& j
var appLogger = LoggerBuf.create(loggerBufP);
& H. N' \+ F( LappLogger.instance.name = "AppLog_Core1";. ]- S3 \9 H, G' `8 t5 W
Defaults.common$.logger = appLogger;% }, t$ w4 {6 ~' k
Memory.defaultHeapSize = 0x8192;    4 A8 w/ S- m7 X  r) g4 T
Idle.idleFxns[0] = "&LEDStatus";
* @8 Y- I2 A/ b0 H' g: X. XCache.initSize.l2Size = Cache.L2Size_32K;$ P4 n5 G3 Z& y9 t7 K9 [7 k5 K( E( s
2 s$ q6 R  S2 e4 I6 i0 B; l$ }
回复 支持 反对

使用道具 举报

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 */
3 F' q6 e1 {' J( h( I. Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 }8 S8 ?7 ?5 s0 Kvar heapMemParams = new HeapMem.Params();" l$ Y3 Z! u# ]) L6 N9 k; u8 O( Q
heapMemParams.size = 0x4000;/ T: p( V, M9 E- o. ^1 ^8 }6 C

  h% ?; E: C/ j, {9 y" dvar Memory = xdc.useModule('xdc.runtime.Memory');
" l- U4 B5 Y3 E! J: yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- ^7 q3 |7 t6 j( N

7 d9 i, P# l0 e# H2 a9 ]6 d* \. [& p我大约calloc  每次共计大小为5K*16bits,# K/ a# l; r, y" v( P
而默认配置才0x4000、需要改大。5 w! q2 }. M8 p" v8 A1 }6 S

0 _  M' Y/ _; M8 c8 e% L0 x/ s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 l  N' k, P0 ^Program.heap = 0;( H' w* C$ P2 t  Y1 Q; D
Program.argSize = 100;  /* minimum size */" W; d5 ^* D# i, b& b
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-18 12:58 , Processed in 0.042084 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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