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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 v$ Z$ e$ L: w; Y/ k
$ X! _! d* L8 ~    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" c) H+ K4 }0 t! J% N( W! u- B2 o9 b* p
其他程序段。。。。。" p) ?( t/ n' L0 e
8 s/ E6 I& v0 j
   free(x_d);
% T4 O. K4 K7 N- [9 G  ]  [" }/ X0 l, K# s1 B( f
使用DSP侧单独调试功能,验证动态申请没有问题,
" N8 \/ @" T" L9 Q0 V4 t( r4 s) \1 {8 g& E" c6 s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. g. I6 S2 s$ H" x8 [
8 D3 w3 f5 r1 d( V1 T
! ]0 W2 J5 \8 p

1 z/ z# }2 t% ^4 d5 a1 p
" ?. p" f  v8 _' L
& U/ d' X, u" B% X8 \7 L* W" I* x/ \; ~/ k: [
9 G( D: f3 A) R4 ?) \) K
* k* d6 p. z% t# r! e

# P6 c. K8 S3 Q# Z3 P1 j. k: U3 ~
/ h9 p7 }: n" D5 [( U. _+ P5 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" E- z# u% n0 {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 f* h, T* i+ r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" u+ a( Q, D9 X5 \* ^8 z5 [5 d

9 i3 T1 f/ |2 Q是不是需要在DSP.CFG中进行配置
9 ^3 r- ~3 h- W' t  l我现在的配置为* n# p- ^1 y. D! H! s

6 m2 |; p8 _+ Z3 r( E$ ^" E% M6 G  b/*0 L) m6 B- b6 d$ ~# a
*  ======== Operating System Configuration ========
( B/ @( r2 f# @. \" T' \5 m */! F; F  ~* v% I& t3 |; I! j# z

/ s0 @" x/ n6 {) ?/* no rts heap */
% a* B9 p+ x' e8 X: KProgram.heap = 0;
+ D9 t, i0 p6 R8 {: j; ]+ dProgram.argSize = 100;  /* minimum size */
9 _! c( e; N& N" ?. j  O  ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 d, s  G- y: j; z5 S
  m' K4 z7 F; G! z- T. e
/* create a default heap */
  B" K! D! Z7 o2 k4 ~# ?8 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 _) R! g  _; x: T7 [+ l( @- G
var heapMemParams = new HeapMem.Params();
* c/ ?9 l. h3 S, `6 f+ c5 U0 U  J' AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( @7 o- W* }3 T$ P; u. s! ~' Q# w) H2 J: F6 m' g, ^- m, V/ G0 v
var Memory = xdc.useModule('xdc.runtime.Memory');
, Y! M( D8 W8 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, d& P3 l% T/ w  ^) J9 y2 t& o
& {# e! O7 X( Q$ k$ {
/* configure System module */
9 f' k, [. Y, k- D# v3 k) dvar SysMin = xdc.useModule('xdc.runtime.SysMin');0 t5 H7 K! `) N
SysMin.bufSize = 0x1000;
( T  d$ U: h9 Z. K/ g6 N) E$ eSysMin.flushAtExit = false;
/ [% Z9 i$ S' K$ B, b" r! H: j% a, n4 {8 r8 v7 V0 `" |) n
var System = xdc.useModule('xdc.runtime.System');  d) ^. K' L2 r& K, ^
System.SupportProxy = SysMin;; J. c% t7 O- N

) `! N5 H4 Y" X# c# b/* configure SysBios to use the lower half of Timer 1 */! P+ l2 C9 W( \+ M5 @( Q. N9 `
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  `- j) A9 u8 ]# y" C2 I) [var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: J; {2 P7 z9 o) J' y/ A: BTimer.timerSettings[1].master = true;
# |0 V4 h# g/ J) g0 l% sTimer.defaultHalf = Timer.Half_LOWER;3 w/ h  m$ k2 b% t, j0 Y
Clock.timerId = 1;
0 u6 w* Z' q# b4 j* J9 c# y0 _; R1 @* t
" {0 |% h' O, p& c6 H+ H
/*
+ m, m- O- n0 y *  ======== Miscellaneous Configuration ========
- D) \  r1 k. V# V) e */
4 w; q+ B1 P+ X; t
1 `6 t; I0 ]; ?7 m/* set default diags mask */
" |5 ]" {0 q  c- Evar Diags = xdc.useModule('xdc.runtime.Diags');! w, X* d8 H% h. y* z; o7 J
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 R  ^! \" b  o  x
' R  [3 r* @( e+ y; e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ b! T0 y" T  g- o( m/ Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& ]- D: n, H  y; Y8 v" xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  x& \. b( W/ c, MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 R! X" A* e/ ~) S7 g; \# h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  ^5 c- ^. K' `7 qDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% s- O$ @5 \+ P! |+ cDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: d! x! @4 \  i. mDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) ^. N4 o) ~0 L& o9 eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  V9 Q$ A8 d. GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; Q% {8 A/ {' |, d* {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 R, s+ i* k2 D6 N/ q' H4 F
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ w* V: W$ t, o' q% P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 l. k% D& a1 e& L9 b- h* z: s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% Q! n: n: H8 N  ~4 m! A2 Z
. ~& V+ u1 T1 S& H/ [/* override diags mask for selected modules */
* ]) {" M; V& I  s8 X9 l% bxdc.useModule('xdc.runtime.Main');
; R* l' A2 `% W, d% KDiags.setMaskMeta(
& C6 J% Z7 p7 \  k    "xdc.runtime.Main",
8 Y! P0 E# i  A    Diags.ENTRY | Diags.EXIT | Diags.INFO,' z# S  x2 h. d3 s/ j; |3 e2 m
    Diags.RUNTIME_ON! h2 @- r4 m6 F% u/ ~0 k
);" N( a% C) l- V) F2 r; D* t
& s3 Q5 j7 Z( C) P5 |1 u
var Registry = xdc.useModule('xdc.runtime.Registry');
% U2 f6 j, I4 eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 k- X( N' O; a. T9 Z% i0 bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, J9 E) B1 \) L, L1 V: DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 S7 T8 t8 [2 x% t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ B- E4 L& @+ w3 C3 E2 i9 L
6 N) g( h+ J; I# e/ m2 T* `/* create a logger instance */
9 o3 c/ p: |( n0 Y" n( nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 {9 i- c( g) b; w' m2 p
var loggerBufP = new LoggerBuf.Params();6 `5 r4 h6 Z' B& N5 @% a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! i" L+ }3 f8 r! M/ I7 \# ^. S& mloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 i4 U1 F9 P% a6 P" a! U
; {4 \$ r2 ~) w2 zvar appLogger = LoggerBuf.create(loggerBufP);; e1 c. Q; x. W" A
appLogger.instance.name = "AppLog_Core1";1 r  c. \. F. J/ M; U- u
Defaults.common$.logger = appLogger;
+ N9 `- ?. d5 d9 [3 [3 g; ]Memory.defaultHeapSize = 0x8192;    * _; Z# ~5 Z. F
Idle.idleFxns[0] = "&LEDStatus";
& g8 v( i/ ]0 W' N# g  K7 QCache.initSize.l2Size = Cache.L2Size_32K;
$ \$ }. t+ V& |0 X5 l1 G, R. K7 [1 p
6 z. E2 v( ^0 u$ 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 */4 w9 r9 |  e; R4 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- c. I8 I+ \6 V: i
var heapMemParams = new HeapMem.Params();
" @7 z- p0 F" \) k0 u% t+ ]& n1 k3 f, gheapMemParams.size = 0x4000;
4 P2 `8 N2 Q( e: M3 `3 }" s
$ {% b4 j- r: d- Ivar Memory = xdc.useModule('xdc.runtime.Memory');
  [  r' S& B& r) f6 ?$ e- F% Y( hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 r3 n; N$ s% [. @
/ [1 e2 Y5 ~2 }: N& |. n+ Z: i
我大约calloc  每次共计大小为5K*16bits,
/ ~  V3 T7 _/ ?4 r) b$ c而默认配置才0x4000、需要改大。" X- k: M; Y+ @7 H/ V4 F4 K: K

- N$ m8 {9 J! C! K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. Y% c3 p, ^, e& f5 O0 b) HProgram.heap = 0;% j' \& P. m& @& Y: D# g; v) J
Program.argSize = 100;  /* minimum size */
& X. b  R( r+ j; vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-27 06:17 , Processed in 0.042666 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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