当我们定义了一个变量:
uint8_t Key_FREQ;
在中断中给它赋值:
Key_FREQ = (uint8_t)current_freq; // current_freq 为枚举值(0,1,2)
在其他文件中使用了错误的手法引用了:
extern Key_FREQ;
一度导致我查询各个地方,都没有发现问题,但使用我惯用的串口调试助手大法,可以看到这个变量是有规律的进行变动的,比如01 会变成 257, 02 会变成 514,换成16进制刚好是0101、0202,这明显时发生了内存访问错位,而这种情况大多是强制改变数据类型导致的,所以我就间接发现了我这里引用错误了,直接更改成:
extern uint8_t Key_FREQ;
这次告诫了我很深刻道理,那就是要一直敬畏C语言的法则,不要随意想当然的写一些不严谨的内容,这样找错误都很难找出来!
