总结使用KEIL C51遇到的坑

使用KEIL C51遇到的坑,持续总结

笔者长期从事linux 驱动开发,后面不小心使用了一片国产stc芯片。调试过程可谓艰辛,踩坑无数,心态几近爆炸。冷静下来后,做下总结。发现自己还是略显浮躁,对不懂的东西还是要静下心来,慢慢调试,总是会有很多收获的。

1. 编译器优化问题

最初写了这样一段代码,有如下定义,
char rx_tmp_data;
#define RDS_MATCH_HEAD 0x66
汇编代码如下:
总结使用KEIL C51遇到的坑
汇编代码做了一堆操作,又是移位,又是减的,调试时给rx_tmp_data赋值为0x66都走不进去!推测可能是因为符号类型不匹配,编译器做了转换,结果反而导致逻辑不正确。

下面更改了定义类型后,汇编代码如下:
unsigned char rx_tmp_data;
#define RDS_MATCH_HEAD 0x66
总结使用KEIL C51遇到的坑
可见优化的结果非常正确。一气呵成,爽心悦目!