|
本帖最后由 star 于 2012-8-21 18:16 编辑
归纳总结了10多条常见的编译错误,当是抛砖引玉。有错误疏漏的地方大家补充,一起完善
J
一、
Error[000] : Can't find 0x12C words for psect rbss_1 in segment BANK1
连接器告诉你总共有0x12C(300)个字节准备放到bank1 中但bank1 容量不够。显然,只
有把一部分原本定位在bank1 中的变量改放到其它bank 中才能解决此问题。
二、
Error[000] :Fixup overflow in expression (...)
Error
[477] ; . fixup overflow in expression (location 0x1FEE (0x1FE6+8), size 2, value 0xFF5)
◆既然定义的指针有明确的bank 适用区域,在对指针变量赋值时就必须实现类型匹配,
下面的指针赋值将产生一个致命错误:
unsigned char *ptr0; //定义指向bank0/1 的指针
bank2 unsigned char buff[8]; //定义bank2 中的一个缓冲区
程序语句:
ptr0 = buff; //错误!试图将bank2 内的变量地址赋给指向bank0/1 的指针
,如果你看到了“Fixup overflow”的错误指示,请重点检查程序中有关指针的操作。
◆如果总程序仍超过一页,则可能会有以上错误,检查程序是否超页:
三、
Error[000] : Can't find 0x26 words (0x26 withtotal) for psect text13 in segment CODE
Error[000] : Can't find 0xC words (0xC withtotal) for psect text in segment CODE
Error[000] : Can't find 0xC words (0xC withtotal) for psect text4 in segment CODE
常见的情况是编译的内容超出芯片ROM空间,可屏蔽部分代码,以检查代码量是否过多。
四、
Error[000] D:\Work\standard_\remo.c 113 : probable missing '}' in previous block
Error[000] D:\Work\standard_\remo.c 8 : { expected
程序中大括号不完整,检查{}是否完整成对使用。
五、
Error[000] D:\Work\standard\remo.c 8 : ; expected
程序代码后缺少“;”号。
六、
Error[000] D:\Work\standard\remo.c 10 : undefined identifier: buzz1
变量buzz1未定义就使用,变量应先定义后使用。
七、
Error[000] D:\Work\standard\remo.c 80 : inappropriate 'else'
If,else语句未成对使用,缺少if条件,提示不对称的else。
八、
Error[000] : undefined symbols:
Error[000] : _chipsel (D:\Work\standard\mini.obj)
未定义的标签,确认子程序chipsel()等是否可以被调用,检查是否在INCLUDE中,是否在调用前进行了函数原型声明。
九、
Error[000] D:\Work\standard\mini.c 19 : Cannot open include file "I2C.c1"
包含的文件名错误,检查包含的文件和原文件的命名是否相同。
十、
Error[000] :function _EQ_DATA_SEND appears in multiple call graphs: rooted at _isr and
_main (error)
函数EQ_DATA_SEND在主程序和中断程序中均被调用,有可能该函数在被主程序调用执行的过程中又被中断程序调用。这样就破坏了正在执行过程的数据,造成不可预料的结果,因此不能这样。可以写成两个不同命名的函数分别调用。
十一、
Error[000] : This demo compiler has expired.
Contact HI-TECH software to purchase and re-activate this compiler
演示版的编译器寿终正寝了,把编译器卸载了重新安装激活吧
|
|