关于优化等级与volatile,优化等级分为0123!一般我们都是选择零!如果我们选择高优化等级,对于变量赋值时,编译器为了加快运行速度,将会省略变量访问,即直接将这变量所对应的值赋给另一变量!无论要访问的变量数值是否增加或者减少!此时,将会导致某些错误的产生!仅靠文字叙述似乎不太容易理解,让我们看下图!
在另一中断服务函数中,功能设定为只要按键按下则g_exti0_event将加1!所以如果正常执行程序,只有LED 1会点亮!但实际的效果却并非如此,由于优化等级的变化,此时优化等级是二,因为g_exti0_event初始值为零,为了加快运行速度,编译器直接对a,b 赋值为零,所以LED 2也会点亮!所以定义变量时要加上volatile,那么编译器将不会省略变量访问,程序也会达到我们想要的功能!
仅记录自己的学习历程,如有错误之处,请指正,谢谢!