2007年1月8日 用IAR(IAR Assembler for AVR 4.10A/W32 (4.10.1.5))编译时,发现一奇怪现象。 本程序是用型号为3310的LCD显示温度的测试程序,温度传感器用DS18B20。 调试好延时等,测试正常,能正常显示温度值,如加热传感器,温度值会上升。 整理程序,把一句没用到的函数删除,重新编译,温度显示不正常,但能识别DS18B20。 比较删除前与后,IAR编译后代码长度是一样的。 没办法,检查两种编译结果,发现check sum,不相同。改IAR的优化选项为"none",竟然整个程序不正常。 只好不断修改程序,测试问题所在。 使用GCC时,记得GCC对处理while{ }与do{ }while();是不同的,不知道IAR会不会也是这样,于是把while{ }改成do{ }while();
,编译后发现结果正确!编译后代码还少了2bytes。 什么原因就不追究了,也懒得去看汇编代码,只作经验记录了。 |