找回密码
 注册
关于网站域名变更的通知
查看: 6137|回复: 6
打印 上一主题 下一主题

KEIL编译提示OVERFLOWED溢出的解决方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-9-7 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2013-9-22 10:00 | 只看该作者
你确定你的keil是破解的不是试用版的?

该用户从未签到

3#
 楼主| 发表于 2013-9-22 10:20 | 只看该作者
春雨过天晴 发表于 2013-9-22 10:00' x+ [- T0 _' q. w5 g: q+ \. N
你确定你的keil是破解的不是试用版的?

! e/ u5 O: K- X! d0 g" T破解的,用了挺长时间了,哈哈

该用户从未签到

4#
发表于 2013-9-22 10:57 | 只看该作者
myl593799546 发表于 2013-9-22 10:209 o: k3 s, O! n& i& u
破解的,用了挺长时间了,哈哈
6 `- P' K3 g. c$ S4 ?
开始没有细看你的分析和结论 以为是那种没破解的限制编译空间呢,后来仔细看了下,学习了。丢人了,快闪!{:soso_e121:}

该用户从未签到

5#
 楼主| 发表于 2013-9-22 11:26 | 只看该作者
春雨过天晴 发表于 2013-9-22 10:57! n2 D6 K3 W" F6 L& U
开始没有细看你的分析和结论 以为是那种没破解的限制编译空间呢,后来仔细看了下,学习了。丢人了,快闪 ...
, k/ B8 ~( [8 T7 @
哈哈,没有没有,互相学习,{:soso_e144:}

该用户从未签到

6#
发表于 2013-11-15 01:33 | 只看该作者
像这样问题,没有调用到的函数,你可以用一个, t9 T0 y( A1 S! u# g. u
if(0)
/ w0 K9 d- c" {8 |% L4 y" \{
& y3 R( q; H; u$ D9 o   放没有调用到函数;
; L: l/ i+ K! d7 i% T+ T3 L}

该用户从未签到

7#
 楼主| 发表于 2013-11-15 09:20 | 只看该作者
天才小痴 发表于 2013-11-15 01:335 E( x5 Q* p4 T, \+ k! ]8 I" z
像这样问题,没有调用到的函数,你可以用一个  x: t  G9 r0 e& b
if(0)6 B/ t9 k( G9 I! `8 W6 \: P  q3 ~
{
" i! {& ]3 k) |: k" a: c  h
恩,你这个方法很好,不过用#if 0应该更好吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 21:12 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表