EDA365电子工程师网

标题: KEIL编译提示OVERFLOWED溢出的解决方法 [打印本页]

作者: myl593799546    时间: 2013-9-7 14:46
标题: KEIL编译提示OVERFLOWED溢出的解决方法
*** ERROR L107: ADDRESS SPACE OVERFLOW0 s  D, w* o; l+ T& U
    SPACE:   XDATA   , u; X* u6 j. T% l0 q
    SEGMENT: ?XD?_ZSYS_ADC_CALIB_GET?ADC( X' O: N% P1 s9 }0 Y4 E
    LENGTH:  0008H
: m: k+ b. Y, {4 F4 d*** ERROR L107: ADDRESS SPACE OVERFLOW; s! r" [% d0 y4 h( _4 v* E  W( S
    SPACE:   XDATA   " v; F) R$ u% d5 Q& b% A/ E# k1 q, d
    SEGMENT: ?XD?_VSEARCHMAPBYIEEEADDR?Z_USERSTACKAPI
" k& R1 ]9 M4 |4 A0 J    LENGTH:  0007H
0 \5 Q. T# a2 e; {*** ERROR L107: ADDRESS SPACE OVERFLOW8 j5 O/ B( b8 M- o7 w5 G+ _
    SPACE:   XDATA   : o% V3 A1 |* A" _% ^
    SEGMENT: ?XD?_VUSERADDRINDICATION?Z_USERSTACKAPI
, r4 B6 p+ f5 L* s    LENGTH:  0006H
, p! A+ ]7 i1 N$ {$ m
3 y) j. I$ j* R, n9 x$ g- P  ?.........., e6 O8 I: {$ w4 Y6 [+ L+ u4 k
2 ^/ O2 \( x% s. P
Program Size: data=18.7 xdata=8244 code=88233
# C: O# X- O1 f  _5 xTarget not created' Y  i  T2 L" [# a0 s" R3 i
6 e7 b( `4 h( j: H8 w

+ O9 m6 D+ Q$ @" n* E百度之后发现,并不是溢出的问题. ?. o, s0 ^/ H) E5 x
' i; X7 `' b( A
原来不是data空间溢出的问题,而是我有些子程序定义了没调用,导致keil无法合理分配空间,从而溢出。  % N+ ^5 Z' i3 z" \
首先,我说了我不能任意使用外部存贮空间,所以决不能让编译器将一些临时变量放入idata or xdata。
9 G' j2 S  L' `; z. t4 t' o' @
- B6 S, d1 T: E  I3 ~其次,data 空间可以达到256,见错误提示,data空间只使用了18.7而决无错误。这就有疑问了,那么我的错误出现在哪里呢?+ s5 z# `5 ~' \  ^' q% p

; F' O1 R) j  }% n& }7 p; x% N这就是Keil的问题了。当编译失败时,它不能给出完整正确的报告。所以它给出的:
0 L2 H0 v1 B  y. x' Q# [2 \! A0 |5 g3 ?- @# P5 v' c
Program Size: data=18.7 xdata=8244 code=88233
: Z+ {; C, Z+ y4 F/ U$ v就是不可信的。实际上我的data空间已经远不止18.7了。(所以下次看是否是真的溢出,可观察这个参数先)2 n, E4 E( A) P/ J

0 j+ L; d- F% j& i; g最后找到,我宏定义了一个参数6 @+ C8 g; c4 z* a) Y; I$ e  x/ w
4 z  F2 |! y6 U& _
#define    USER_SIZE_NWK_RRECT                    2
( p4 P: C8 g" S  f+ P' f
% J0 `% R" e/ F" h% x- S跟踪它9 `* O9 U7 S1 l4 }6 a' j
  I' k$ ]+ ~/ `( v% l% A
    #if (USER_SIZE_NWK_RRECT)" a2 n$ O) ^: a2 |
        NS_RRECT     MEMORY_RRECT[USER_SIZE_NWK_RRECT];
- c) d9 {8 x, b# d# h8 F6 Z0 ]然后再跟踪 MEMORY_RRECT,发现这个参数没有被调用 , 将2改成0即可解决错误提示
6 _6 q+ R' S& f" b' _# M( U7 n0 I& D0 z6 W. p1 |1 C! c: X
结论就出来了:! x- x- y2 @& [5 w5 x
, Q. E/ \, @- P7 n
1、Keil的错误报告不完整。: c% m& i/ q5 C+ Q  [, G  T
% j) _  L, y6 Z1 r: Z
2、在Keil里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。
. R" H. ]; X3 D4 y2 t! w% e. l
; z/ n7 E) T9 U+ N2 A
作者: 春雨过天晴    时间: 2013-9-22 10:00
你确定你的keil是破解的不是试用版的?
作者: myl593799546    时间: 2013-9-22 10:20
春雨过天晴 发表于 2013-9-22 10:00
0 z  F% q/ k0 @" M8 ~9 @你确定你的keil是破解的不是试用版的?
8 o; v4 ^0 @. v" s( A# R3 M! _: R( T
破解的,用了挺长时间了,哈哈
作者: 春雨过天晴    时间: 2013-9-22 10:57
myl593799546 发表于 2013-9-22 10:20
8 ]9 G* a0 _" P) k5 w) ^2 b破解的,用了挺长时间了,哈哈
3 O; T9 `" G5 W
开始没有细看你的分析和结论 以为是那种没破解的限制编译空间呢,后来仔细看了下,学习了。丢人了,快闪!{:soso_e121:}
作者: myl593799546    时间: 2013-9-22 11:26
春雨过天晴 发表于 2013-9-22 10:57
( j  A# y% f6 I  G! {' g/ G开始没有细看你的分析和结论 以为是那种没破解的限制编译空间呢,后来仔细看了下,学习了。丢人了,快闪 ...
) c8 h0 ?6 l- t
哈哈,没有没有,互相学习,{:soso_e144:}
作者: 天才小痴    时间: 2013-11-15 01:33
像这样问题,没有调用到的函数,你可以用一个$ M  Y- B$ `4 c
if(0)
' f4 a6 d3 |9 w9 p* s9 h; r{: P# V$ D9 I: K1 m. Z4 \$ u
   放没有调用到函数;3 E7 j! K0 n% |' [
}
作者: myl593799546    时间: 2013-11-15 09:20
天才小痴 发表于 2013-11-15 01:33# R5 X! |' q& v8 x3 Q
像这样问题,没有调用到的函数,你可以用一个
& z+ d  K( x) g5 x) g2 Iif(0)
" q3 b8 y  x, A9 ?: d* O: b& W. N{
; E8 V, v- H' c7 C! `
恩,你这个方法很好,不过用#if 0应该更好吧




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2