[经典错误]调用外部变量出现规律性错误

当我们定义了一个变量:

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语言的法则,不要随意想当然的写一些不严谨的内容,这样找错误都很难找出来!