|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
*** ERROR L107: ADDRESS SPACE OVERFLOW' @9 `" h1 I3 w3 b( @& r* K, l
SPACE: XDATA
8 O f( U S1 Y7 _7 l X SEGMENT: ?XD?_ZSYS_ADC_CALIB_GET?ADC
- W( o2 d7 r- `2 c- h& W4 O LENGTH: 0008H
1 V! q' l1 Q7 H R2 R0 { e$ `*** ERROR L107: ADDRESS SPACE OVERFLOW
" D7 E' [* t8 z1 Y+ ?5 V SPACE: XDATA 4 K; P! e2 c/ X! _' B, v% f
SEGMENT: ?XD?_VSEARCHMAPBYIEEEADDR?Z_USERSTACKAPI
0 m) \7 S1 k$ [ k) A5 G# ^: o LENGTH: 0007H0 l# d" ~! A- ^+ s( M5 z
*** ERROR L107: ADDRESS SPACE OVERFLOW
$ f: y- l$ n9 o @: f SPACE: XDATA 0 j y. r2 P% j+ Z0 V2 g; K
SEGMENT: ?XD?_VUSERADDRINDICATION?Z_USERSTACKAPI O; c6 z1 f/ `+ m7 Q x! J/ g/ N* H
LENGTH: 0006H
2 u8 ^$ [' Z& w' ` ]0 S& n6 q, h0 N
..........+ @# }, A% R' a. y
0 v) z: A6 K3 Z' ~% yProgram Size: data=18.7 xdata=8244 code=882336 _3 J6 @7 {) u* P. D/ g& ^
Target not created
+ s1 |+ q& @# ?9 R* h3 d
8 o0 H* B5 B+ c' C5 d' Y& j6 X7 [. m+ \! R
百度之后发现,并不是溢出的问题
; \* l, o% f$ w+ _; U) @. ]
% P* x7 J! b u7 v$ T2 G0 d原来不是data空间溢出的问题,而是我有些子程序定义了没调用,导致keil无法合理分配空间,从而溢出。 : E# p% W4 i% u: U5 O2 B4 x
首先,我说了我不能任意使用外部存贮空间,所以决不能让编译器将一些临时变量放入idata or xdata。2 a& B Z* a7 V8 p- u
$ J, H6 E$ H7 _! I
其次,data 空间可以达到256,见错误提示,data空间只使用了18.7而决无错误。这就有疑问了,那么我的错误出现在哪里呢?
# J ]" ~% d! L9 D, L4 H5 m1 S$ B3 {3 J$ \4 f A4 s! g' W
这就是Keil的问题了。当编译失败时,它不能给出完整正确的报告。所以它给出的:* s: U0 \: e% s9 I! A* `
& J( W. F& K- |9 ]+ q
Program Size: data=18.7 xdata=8244 code=88233
" n/ m0 _3 B1 C% G7 M- d就是不可信的。实际上我的data空间已经远不止18.7了。(所以下次看是否是真的溢出,可观察这个参数先)
" \. f# S! c4 z" e. W3 L2 s
; D+ c1 T$ V& }3 l- O y最后找到,我宏定义了一个参数
* X% d/ u+ u% Y& f6 _7 h/ H) D
3 A5 }8 j; \# E1 q#define USER_SIZE_NWK_RRECT 2
" y( n) G) c7 i5 R, Y
6 S8 _; s7 S5 p8 u3 P0 G! R4 A跟踪它9 S/ m& K# K" U3 j. I) b
7 m9 D, o8 t6 ~8 M/ I2 X. T
#if (USER_SIZE_NWK_RRECT)$ e! K }* z8 ]8 x
NS_RRECT MEMORY_RRECT[USER_SIZE_NWK_RRECT];
; r; o( Z0 P# e, l$ Q8 h然后再跟踪 MEMORY_RRECT,发现这个参数没有被调用 , 将2改成0即可解决错误提示
2 l6 s6 v _2 |( f2 \9 D! K; r$ M* z o- U$ F! L
结论就出来了:- b. R& P( q- E J, w7 R2 t: E1 W7 n
9 |: G- V9 Z/ t: i5 N x2 Y1、Keil的错误报告不完整。" ~% g0 A7 R) o; p: i* Y/ q0 L
5 M" \6 q6 x" H& A2、在Keil里最好不要留下定义而未使用的变量或函数,编译器无法合理的为之分配空间,而导致空间溢出。
# _: \/ q o {1 H& Y0 Z! K' _& R. _0 z% t* s" w9 R
|
|