关于keilC编译出现的几个错误和解决方法(二)

标签:
it |
**
ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL:
?_NRF24L01_X_WRITE_REG_MULTIBYTES?BYTE
SEGMENT:
?DT?_NRF24L01_X_WRITE_REG_MULTIBYTES?NRF24L01_X
SYMBOL:
?_NRF24L01_X_READ_REG_MULTIBYTES?BYTE
SEGMENT:
?DT?_NRF24L01_X_READ_REG_MULTIBYTES?NRF24L01_X
从提示中可以看出,貌似直接把函数给忽略了。从上面的Program
Size可以看出data=384,而实际上我使用的是C8051F380,片内RAM仅有256Byte.RAM溢出了。
从上面的分析可以看出da ta空间已经不够用,原因可能是使用了好多函数,而函数内部的局部变量又没有定义其空间,这种情况下,系统会根据编译器的设置进行分配的,将变量分配到编译器在Otions
for Target 对话框里的设置的空间。我使用的是Keil C51编译器,其他编译器可能不一样。
如下图所示中的
Memory Model 里设置成 Small:variables in
DA TA,则DA TA空间很快便用完,导致da ta空间不够用。http://s6/mw690/6e020d66zx6BYAjzoIB45&690
一是更改Memory
Model设置,可以设置成pdata或xdata,以便有足够大的空间。但这又带来新的问题,程序运行速度减慢,而且co de代码也会加大,因为如果一个局部变量被存放在了xdata空间,汇编语言访问xdata空间的代码大小要比访问da ta空间的代码大,变量一旦很多,程序的代码也会逐渐增大;
二是代码优化。根据自己的要求设置变量的空间。在运行速度和代码大小之间取得适合自己的情况。
但是我的不是以上这三个,我的问题是没有加入相应的库函数,因为对应的C文件是借用芯片公司的框架,所以必须要加入相应的库;所以出现上面提示错误还有一种可能是:你声明了相应的东西,但是却没有给出具体的定义,或者是你拿别人的框架修改程序却没有在工程里面添加别人相应的库。
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
Program Size: data=384.0
xdata=386 code=5834
解决的办法有两种:
第二个提示错误是一堆的:*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
网上提供的解决办法:
1.是文件没有添加到工程里。
2.可能是因为存在没有被调用的已经定义的函数。
3.不知道你有没有把Source