在一次使用MDk的编译优化等级比较高的时候发现编译不优化时功能正常,开了优化等级02就出现异常,调试中看了很多博客总结一下. 一个变量,如果你的主程序要用到,同时中断还要用到,要加volatile修饰.告诉编译器这个变量是可能随时发生变化的,使得编译器编译程序的时候,每次都从RAM里面读取数据,而不是使用之前缓存到寄存器里面的值. 对于多任务的程序,如果一个公共变量被多个任务用到也要加volatile修饰. 同时变量定义的时候用了关键字volatile修饰,但是在其他文件引用时不加volatil…