在用TFT和DS18B20做一个温度检测体系,使用Keil C51编程时,发现程序逻辑上没有过错,但在衔接时却呈现了过错,如下:
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE:DATA
SEGMENT: ?DT?MAIN
LENGTH:0004H
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL:T
SEGMENT: ?DT?MAIN
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL:TEMPL
SEGMENT: ?DT?MAIN
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL:TEMPH
SEGMENT: ?DT?MAIN
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL:?_LCDSHOW_UCHARNUMBER?BYTE
SEGMENT: ?DT?_LCDSHOW_UCHARNUMBER?MAIN
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL:?_RECTANGLE?BYTE
SEGMENT: ?DT?_RECTANGLE?MAIN
Program Size: data=145.0 xdata=0 code=8309
Target not created
该过错提示阐明data空间现已不够用,原因是你可能有许多函数,而函数内部的局部变量又没有界说其空间,这种状况下,体系会将变量分配到你在Otions for Target 对话框里的设置的空间。假如你在下图所示中的 Memory Model 里设置成 Small:variables in DATA,则DATA空间很快便用完,导致data空间不够用。
处理的方法有两种,一是经过更改Memory Model设置,能够设置成pdata或xdata,以便有足够大的空间,但这又带来新的问题,程序运转速度减慢,并且code代码也会加大,由于假如一个局部变量被存放在了xdata空间,汇编语言拜访xdata空间的代码巨细要比拜访data空间的代码大,变量一旦许多,程序的代码也会逐步增大;二是依据自己的要求设置变量的空间。
所以这涉及到代码优化的问题,遇到具体问题时,在运转速度和代码巨细之间获得合适自己的状况。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/257959.html