|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
*** ERROR L107: ADDRESS SPACE OVERFLOW
$ A0 c0 ]3 c, Z SPACE: XDATA 9 ^5 L! t: l$ ]; Z2 j( V2 t
SEGMENT: ?XD?_ZSYS_ADC_CALIB_GET?ADC
& M+ R( f) S, F LENGTH: 0008H
; f" X2 A- O$ m% q+ }2 d3 m9 z8 b*** ERROR L107: ADDRESS SPACE OVERFLOW+ `$ q$ q1 S" {# Y
SPACE: XDATA
L) p, |( ^% l/ C- w6 t8 O SEGMENT: ?XD?_VSEARCHMAPBYIEEEADDR?Z_USERSTACKAPI* {4 K3 Q* y- i( ~
LENGTH: 0007H
' j- W8 ^9 K4 [: [( X*** ERROR L107: ADDRESS SPACE OVERFLOW+ P7 Y6 P2 m* N/ x
SPACE: XDATA P2 S( i" F2 W! w
SEGMENT: ?XD?_VUSERADDRINDICATION?Z_USERSTACKAPI6 u0 f8 B& `. Z$ W9 o2 q+ @) o `
LENGTH: 0006H
* K2 B9 z9 d# y: o2 `- a1 J
4 z' `; d6 v2 }; m..........
7 X9 R* ]5 }( S
$ S( E( f* z7 u4 C- `Program Size: data=18.7 xdata=8244 code=88233
; l4 |9 \; e! A9 W. Q9 W: vTarget not created
) `8 ]/ d! o8 R, G. b& a
, O: }6 p& b% i U( P$ E" o' r N
# N& {; {8 J9 T* z, j百度之后发现,并不是溢出的问题
3 O" y3 d2 k$ s% T/ b& R+ N0 e) u- T U- e0 c" i
原来不是data空间溢出的问题,而是我有些子程序定义了没调用,导致keil无法合理分配空间,从而溢出。
+ i% I5 I- K' ?! }首先,我说了我不能任意使用外部存贮空间,所以决不能让编译器将一些临时变量放入idata or xdata。
( ~$ p) `7 ~0 ?% Q1 l! X7 q
! D; V8 p- u& |4 W2 h1 H3 b" g其次,data 空间可以达到256,见错误提示,data空间只使用了18.7而决无错误。这就有疑问了,那么我的错误出现在哪里呢?% g& J4 r' w$ t1 w5 w. \% F- P1 A+ j5 I
- M% m9 T; x. ?9 A
这就是Keil的问题了。当编译失败时,它不能给出完整正确的报告。所以它给出的:
( K G$ v6 H7 _5 U( g% x) o0 ~
" g( W4 U4 F% w [& S* w# i1 W/ |Program Size: data=18.7 xdata=8244 code=88233
- R+ |3 F% g5 T& z! b就是不可信的。实际上我的data空间已经远不止18.7了。(所以下次看是否是真的溢出,可观察这个参数先)
' s2 q9 a# ] _" F2 \' y* {' w& j Z7 ]8 ?+ B8 [. z: {% Y: d
最后找到,我宏定义了一个参数) {, b; n: h d
9 h1 D7 S* h |' ?5 G9 u
#define USER_SIZE_NWK_RRECT 2 ' L8 N0 @7 E0 Y% d) w: Q0 e1 E3 I
/ O0 M* h3 @1 Q) j3 `
跟踪它; V' K2 R2 d+ v$ ~0 H0 U* B
/ H0 V2 c8 E7 y/ L
#if (USER_SIZE_NWK_RRECT)
0 J- r: [" p$ u6 x% v, ` NS_RRECT MEMORY_RRECT[USER_SIZE_NWK_RRECT];9 c) D% G4 O) z7 x: e5 L
然后再跟踪 MEMORY_RRECT,发现这个参数没有被调用 , 将2改成0即可解决错误提示
% ^9 F: s% A! c( B
) w- D+ K4 {. s; |结论就出来了:( H5 y: ~2 T; O6 d0 H
* `5 a: u3 j* c8 {9 G( H1、Keil的错误报告不完整。
3 i5 D* j) I9 H3 y: t5 ?0 B
3 {2 w/ ]; B/ ?9 q" F2、在Keil里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。7 B1 F0 A, r: _6 `3 ?& B6 O
6 G# O3 H/ ^* W) p1 s1 c5 F
|
|