|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
*** ERROR L107: ADDRESS SPACE OVERFLOW
) H2 Q# ~! Q4 {( b) G. L8 T: { SPACE: XDATA
( S5 p- K; E. d+ _3 {! o SEGMENT: ?XD?_ZSYS_ADC_CALIB_GET?ADC
0 B- ~: L, H) B# ^5 h2 Y6 T LENGTH: 0008H4 u9 ^. ]/ S g m, i
*** ERROR L107: ADDRESS SPACE OVERFLOW/ X) g9 c3 n6 I0 L* n2 |
SPACE: XDATA
' L' y" A- ?* C0 X SEGMENT: ?XD?_VSEARCHMAPBYIEEEADDR?Z_USERSTACKAPI
% I$ R" C' M$ @8 N# y- t9 ~5 X LENGTH: 0007H7 X+ ~, u" U5 d Y+ N/ N$ u& v: u
*** ERROR L107: ADDRESS SPACE OVERFLOW
6 \4 ]1 D0 m5 }8 m8 {$ O4 v SPACE: XDATA
# ?$ T1 a# M! z& W) ?( d- I SEGMENT: ?XD?_VUSERADDRINDICATION?Z_USERSTACKAPI
2 p5 m4 @( |6 ? LENGTH: 0006H
2 \% D& S7 o1 F, \4 Z/ V$ Q9 U3 G ^4 T5 I& }
..........1 T0 t |9 i' [( f( v% }: F4 T
5 W' T% E6 \3 |' Y. J7 q! |Program Size: data=18.7 xdata=8244 code=88233
7 @3 Q M* I# D* |Target not created
$ D$ t; \+ {; }% V9 A0 H; G& L+ d& t! s( b
z; m) |1 a3 H0 d/ h" q3 c8 O百度之后发现,并不是溢出的问题: Q2 p2 p6 Y: S0 f
0 c# s( E- q' t+ q0 Q原来不是data空间溢出的问题,而是我有些子程序定义了没调用,导致keil无法合理分配空间,从而溢出。
5 O; a& v; r" F) j% V首先,我说了我不能任意使用外部存贮空间,所以决不能让编译器将一些临时变量放入idata or xdata。) B, D; g7 z7 s( a
9 ]5 w. z4 }) P& T9 m# L, q6 I
其次,data 空间可以达到256,见错误提示,data空间只使用了18.7而决无错误。这就有疑问了,那么我的错误出现在哪里呢?8 e0 l& @. Z0 Z2 |3 Q
, O, m% X1 C4 W, q* X6 F e/ _5 Q5 t
这就是Keil的问题了。当编译失败时,它不能给出完整正确的报告。所以它给出的:* D" z& F' G/ t- e* @
6 m2 v8 m" {4 `2 J* e+ kProgram Size: data=18.7 xdata=8244 code=882336 V# C8 F5 G, S' E
就是不可信的。实际上我的data空间已经远不止18.7了。(所以下次看是否是真的溢出,可观察这个参数先)
$ j9 T& y9 R7 u, L$ \: X2 j4 @: A* G
最后找到,我宏定义了一个参数
5 t# q' @' b( q
# `. g8 Z1 M! t' C! d, H7 Y* M#define USER_SIZE_NWK_RRECT 2 1 z7 f1 |7 D4 H9 a+ v2 f! d+ l
( j; {. v* a# w0 T6 i. s跟踪它6 Q# @& ]# ?! A+ V U8 \
+ `8 X$ z# X+ G
#if (USER_SIZE_NWK_RRECT)
0 R6 [7 D' z6 \/ c! |3 S NS_RRECT MEMORY_RRECT[USER_SIZE_NWK_RRECT];: {6 p5 S/ U4 Z3 w# w
然后再跟踪 MEMORY_RRECT,发现这个参数没有被调用 , 将2改成0即可解决错误提示
; I2 u, J2 e# w( H6 D: O; U& H; t. z2 `1 W; ~6 k0 P# R9 O
结论就出来了:% c2 b7 h1 P5 c0 N4 j
, b, [8 {" U$ ?6 _' |2 l3 a
1、Keil的错误报告不完整。
: D P$ C% t( w6 r+ q- z$ V0 q, |& |! V+ O
2、在Keil里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。 P* Q7 m5 A# Y& |: i# a+ Q
( ?* W: w7 W8 ^, V- I
|
|