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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

, _* Q# t# q9 k' o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& ?6 i! H2 ^! J9 }- S; a9 l5 r6 c

# @0 X) d0 y5 a/ m& N" W9 g其他程序段。。。。。
: z, C2 \& q( g% [" u; A $ i% B% v; R" P+ o: \  f, o
   free(x_d);
$ g7 y: q- ~- e6 r( ?4 ^
; ?4 S9 }7 q9 A3 y  C" g- h) @# q! r使用DSP侧单独调试功能,验证动态申请没有问题,
/ d, \% J3 P# M; d4 S9 S0 X/ r- [" a2 Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- w. U! P( w4 `& u) U, x
9 @% p5 \; i3 n2 e
; h/ ?# B* l; ]% z
5 E2 T" s$ @  |

) R% P8 W& f! F# }( b0 e
" Z& G, x3 S/ d, f
& r' A' R, u0 F3 Z. L$ S/ D( r& Q0 E% |$ G6 G' O; R. `

# D: a% P) R0 |' t6 K( V) L- g4 ~% b. C! A% S" R
" G; w5 [1 t' M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  {2 p& }% d/ \# ]' h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 \4 P8 f. g1 u2 n/ H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) g7 c. k2 P2 J/ z- X" Z

" Z( @3 ^( F! O1 ^是不是需要在DSP.CFG中进行配置# `+ b4 U1 M' T* E
我现在的配置为3 c9 `- N1 W, U1 {
7 e" `, c3 I) l/ P" s6 ^
/*
! ^1 O; s2 P7 V" X% J *  ======== Operating System Configuration ========
5 Y8 ^# f" M( n* E9 r; V */4 U7 Q* @) c- j8 B7 ]7 M% Q
2 \2 v6 _1 o* {/ t- h* W; I+ u9 m
/* no rts heap */
! p3 ?4 l- P8 e9 i) Z) jProgram.heap = 0;, x3 R* n2 N1 }: P8 T$ p
Program.argSize = 100;  /* minimum size */
8 H% V4 J1 S) |- x. \' i) vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 Z2 e/ N1 g* r8 k6 K8 R. `2 r2 I2 E! r4 M* V1 t3 o/ V
/* create a default heap */8 P  P! i$ t8 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 {' @: D/ ^' S! N* Yvar heapMemParams = new HeapMem.Params();0 L% J# [" m! |
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. P2 K; s4 s% c, a
0 @. G3 d+ b- L7 W+ t$ n
var Memory = xdc.useModule('xdc.runtime.Memory');
. N( H+ S) C% F3 {9 a9 JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; D* I4 W8 H! f4 f9 B
# o0 ^/ ]3 m' e2 g* H& N/* configure System module */) t6 O2 E8 C- T9 {4 b
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' b  Y: }' N$ LSysMin.bufSize = 0x1000;$ v6 M# M. r) j5 F- \. \
SysMin.flushAtExit = false;1 P0 c* k  R* c3 k+ I

% x, w. w: y' m) xvar System = xdc.useModule('xdc.runtime.System');
3 I. T! Y( [4 c4 _System.SupportProxy = SysMin;3 b- ~) @; K  ?
# I2 r0 j& F3 i2 q/ ?- O( Q' X* ?
/* configure SysBios to use the lower half of Timer 1 */6 v: y4 e/ ]- x0 P0 x  i7 `
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" U( _' }- e, E  o9 x( ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! V) P) _" K# Q. M+ a) F  b" e, pTimer.timerSettings[1].master = true;
) i# l, G4 t. @3 CTimer.defaultHalf = Timer.Half_LOWER;6 I* n  b: q- q+ @$ }4 e; ~
Clock.timerId = 1;5 W+ m0 Z4 H2 [# ?, {/ I: A
7 b7 L& K9 o" i# M, K

0 A' @1 u, w8 h' v* I$ G9 u/*' d# b( d0 _/ w+ q) j
*  ======== Miscellaneous Configuration ========
! o, f- d- }0 ?" ` */. X1 T& r; a5 ?. I* i
+ L  `/ P: L1 B6 x+ h" x
/* set default diags mask */0 _% E/ ]5 t, ~5 G* l
var Diags = xdc.useModule('xdc.runtime.Diags');
- b* }% O1 z. g+ W" O8 Zvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 Y0 @+ M6 U0 u' S
, B7 L3 G# G0 g% F5 U8 I1 E' ^, q; F; @Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 v/ A1 E4 ?) b; G$ V5 o7 V3 \6 a) T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) Q4 F( W3 n. j3 l  {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 p5 ^& ]. p# C" K; A7 RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( y8 `, ]- e& B3 g9 nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! E" g9 W  P0 q+ ~8 q9 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( F, c5 m5 o2 Z7 M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; Q" D5 \$ h3 S0 ~2 h9 RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 o: o- b5 \# W) ^" L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 D9 i9 T7 u+ B7 i* U: ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) G  t$ x5 i& r) C& a+ WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  i% r/ b" x+ F6 m& q% y2 d. ~) qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ n* p/ H% ?) b7 _1 G7 gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' k( A! M+ Q: |! uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  G4 o; `% D- w7 E0 Y( z) I" ]
  i# M% [2 h6 M  N# o0 q
/* override diags mask for selected modules */% \; z  k; b' u' B, g3 R
xdc.useModule('xdc.runtime.Main');
: [& T6 g7 t8 nDiags.setMaskMeta(
& C& |6 l6 {' `7 l* Q; {5 T0 U1 J8 T    "xdc.runtime.Main",
4 t' x, U% R! _% p8 G) W    Diags.ENTRY | Diags.EXIT | Diags.INFO,, o+ _! P7 f' Y6 V
    Diags.RUNTIME_ON
7 g9 p2 Y( K; N0 K4 n);4 S. j9 L: U" @3 h) E

' F$ o3 Z( N2 t% X! Svar Registry = xdc.useModule('xdc.runtime.Registry');
+ P8 V0 v) h9 D0 P' Z. SRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 f- T8 M0 g6 \/ u, w( G; r( tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 e) S: ^5 F1 K: ?2 iRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; _. U5 ^6 X$ ~! R! KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;- w* h# K7 l( Z" q: J2 h
5 ]& q7 F  M" g6 ~  v  }1 c  U
/* create a logger instance */- V' X# m" G; @. I/ a
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: v, G! G4 x, l
var loggerBufP = new LoggerBuf.Params();
9 ]. _! R( w/ t" {# m  tloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 g( n& |" h+ ?: mloggerBufP.bufType = LoggerBuf.BufType_FIXED;4 \- t" m( F1 W* q3 V; h
2 N+ F3 @9 B  \% e0 F+ L
var appLogger = LoggerBuf.create(loggerBufP);/ t6 p: W2 C) G$ k  U3 {6 x
appLogger.instance.name = "AppLog_Core1";
: z0 O% s* R$ O& z0 O8 j9 P/ mDefaults.common$.logger = appLogger;0 a0 R, @  x" @
Memory.defaultHeapSize = 0x8192;    + n& h3 c/ S0 ?; i5 V7 f6 ]
Idle.idleFxns[0] = "&LEDStatus";7 L, A( j: X4 s4 F# S3 [/ p# x$ q
Cache.initSize.l2Size = Cache.L2Size_32K;9 F0 G0 J$ k. W$ s0 ?
& w/ S9 g, g4 V6 ]
回复 支持 反对

使用道具 举报

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 */
( O/ o( c2 m! qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. ^# E" @5 v1 C- l! e& o: ^3 m( u+ L5 s
var heapMemParams = new HeapMem.Params();/ Y  b9 M6 G# b1 X' h! O+ t2 k
heapMemParams.size = 0x4000;
- r; l; q. ~+ |$ g! K- o2 a- N
( x% v6 \* w4 `# N9 ~3 D5 Uvar Memory = xdc.useModule('xdc.runtime.Memory');
8 b7 Q0 ^! ~; i, Z9 W2 N: iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 W7 j' `! Q5 x3 g
& F0 r; N* t# f$ J2 D" x' ~# N我大约calloc  每次共计大小为5K*16bits,6 m9 Q5 t! X9 {6 i* D6 s
而默认配置才0x4000、需要改大。
$ {1 v) e- o1 C2 D. |% k# R% t7 q% d2 |$ J. F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; q9 u, N7 w7 U/ ?) M3 y5 ~
Program.heap = 0;. {1 _, V" D: k9 |9 j8 @$ q
Program.argSize = 100;  /* minimum size */
6 }0 b5 v# E- {$ yProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 04:31 , Processed in 0.041936 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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