|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
*** ERROR L107: ADDRESS SPACE OVERFLOW
3 B7 ?. b0 z2 R/ ~, \7 s, @ SPACE: XDATA 2 ~' H) O# i$ J m* f
SEGMENT: ?XD?_ZSYS_ADC_CALIB_GET?ADC# J6 Y/ `" @* F. l+ q/ T# {5 n
LENGTH: 0008H
/ s6 k% x$ V ~9 j+ m% X1 b*** ERROR L107: ADDRESS SPACE OVERFLOW
$ {+ m$ M/ j) z4 S& W SPACE: XDATA
3 @: j1 y% i( e# Q6 c SEGMENT: ?XD?_VSEARCHMAPBYIEEEADDR?Z_USERSTACKAPI8 X$ F$ U, f" ?# s* |5 g
LENGTH: 0007H J3 W+ y% z7 E) p
*** ERROR L107: ADDRESS SPACE OVERFLOW0 u) `) ?1 i6 R, h' ^1 y
SPACE: XDATA $ x+ D, W3 |3 m$ K: y+ K( X/ r
SEGMENT: ?XD?_VUSERADDRINDICATION?Z_USERSTACKAPI
8 v# ^" b6 R: T; | LENGTH: 0006H
8 A7 h5 ~* H5 K
2 ~" d- S6 q. H! v9 j/ S..........) G* O: _1 {( F m
* y4 A* M0 n: }( r4 \3 s4 @
Program Size: data=18.7 xdata=8244 code=88233
, N1 n2 x/ [. l5 v. aTarget not created' b1 X, I0 o: C1 K W5 R9 M) m6 u8 U
- c2 ?$ R7 x! \' n; f
- g% t% k8 Z# e百度之后发现,并不是溢出的问题6 y$ l" A3 ?4 Z
9 |; H ~5 l& S% Y7 ]/ x% U' A
原来不是data空间溢出的问题,而是我有些子程序定义了没调用,导致keil无法合理分配空间,从而溢出。
5 u" l F2 v$ |. x) c; A8 x$ Q首先,我说了我不能任意使用外部存贮空间,所以决不能让编译器将一些临时变量放入idata or xdata。
, E @. G- g# Z5 v F h) Q
) b/ P9 u! {) U: N& [5 |! e5 V8 L其次,data 空间可以达到256,见错误提示,data空间只使用了18.7而决无错误。这就有疑问了,那么我的错误出现在哪里呢?
- F, `# G+ m( f3 B S" B
0 C) n. M/ q. V! ?8 W这就是Keil的问题了。当编译失败时,它不能给出完整正确的报告。所以它给出的:: P1 `4 g: e0 A, Q* t( }4 J1 @
0 u; z! \( T+ i6 \* [: p, Y
Program Size: data=18.7 xdata=8244 code=882332 {% R& k; t7 i- A' M6 l* u# Q
就是不可信的。实际上我的data空间已经远不止18.7了。(所以下次看是否是真的溢出,可观察这个参数先). F9 _; D, V" }! S- X
1 c1 g# V9 n& ~( h2 E最后找到,我宏定义了一个参数
( w2 |7 V( M) L. \
~- M% `- Q- ]5 z; k+ m#define USER_SIZE_NWK_RRECT 2
' j- z2 C$ M+ J$ `$ Y
" ~# e& @% h8 k5 ]跟踪它 t: l* y- c. G- {6 k0 G* B
; R7 Z3 `! P! u' M ], Z" _& _2 `
#if (USER_SIZE_NWK_RRECT)
! a3 i6 @0 W9 ~1 o0 ~, C9 I NS_RRECT MEMORY_RRECT[USER_SIZE_NWK_RRECT];
& h; `! l7 S6 p6 W! U2 j1 e: C然后再跟踪 MEMORY_RRECT,发现这个参数没有被调用 , 将2改成0即可解决错误提示- O5 }% t7 b- O% O& t t
, B& ?' L# @. [- U& ~
结论就出来了:
% m! B, ]6 y4 M+ Y7 {- f* _) l) J2 R4 x/ J$ U2 D
1、Keil的错误报告不完整。
5 s% g4 h1 c% J3 C
+ t: z8 y V+ l- t. w% Z! H, [2、在Keil里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。7 s: w& c7 q! f9 c1 {' C; A5 K L
6 V7 F- p; C' a, c
|
|