STM32 while语句奇怪的问题

一、现象

       定义一个全局变量在while循环里一直去判断,然后在定时器中断里对其做加一操作。出现了这种现象,在while循环里该变量取 出来的值一直为0,在定时器这边取出来的值是一直在变化的。即同个全局变量在不同函数出现两个取值,这是不正常的。

二、原因及解决方法

      经上网查阅得知是编译器优化问题,这里的原因是:编译器优化掉了,因为在 C 编译器看来:ISR 并不会显式的被 C 编译器调用(ISR 是隐式的调用,由硬件中断触发 MCU 调用的),所以认为他是不变的则没有去取最新值来更新,解决方法是对变量加上关键字 volatile,表示其为易变的即可解决编译器优化问题,保证同个变量只有一个值。

猜你喜欢

转载自blog.csdn.net/wanruiou/article/details/108316165