关于Keil中error:ADDRESS SPACE OVERFLOWTOC的解决方法
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?_UARTRXMONITOR?UART
LENGTH: 0001H
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?UARTDRIVER?UART
LENGTH: 0001H
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _UARTACTION
MODULE: Uart.obj (UART)
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL: CNTRXD
SEGMENT: ?DT?UART
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _UARTACTION
MODULE: Uart.obj (UART)
ADDRESS: 11B0H
Program Size: data=166.3 xdata=136 code=4739
Target not created
这种问题一般是属于data空间不够用,解决方法有以下两种,前两种主要总结网络的解决方法,其中第二种是我所遇到这种情况做出简洁一些的解决方法。
一、更改Memory Model
然而这种做法又会带来一个新的问题:降低程序的运行速度,而code代码也会加大。因为一个局部变量被存放在xdata空间,汇编语言访问xdata空间代码大小要比访问data空间的代码大,变量一旦很多,程序的代码会逐渐增大;
二、优化代码
根据自己要求设置变量的空间。在运行速度和代码大小之间取得适合自己的情况。然后也可以在魔法棒中点击C51去设置优化等级让软件帮你优化,不过一般来说优化等级默认是8,最大等级是9.虽然不一定有用,不过一旦遇到可以用这种方法节省一下时间。
另外这里设置优化等级其实也适用于debug的时候。在大家使用debug的时候可能会遇到无法设置断点的情况,这是因为keil这个软件将大家的代码进行了优化,这个时候大家可以按照上面的方法降低优化等级即可。但选择的优化的等级不要过低,不然就会出现上面data不够用的情况。
这是我参考网上这种错误的解决方法的网址,大家如果有什么看不明白的地方可以打开链接参考一下。
http://blog.sina.com.cn/s/blog_69d693150101d847.html#commonComment
最后,这是我第一次写贴子,如果写的不好请大家轻点喷。