关于中断中的volatile变量


在嵌入式编程中经常会遇到被中断改变的并且在其它地方访问到的变量,一般会把它定义为全局的volatile变量,例如常用的系统移植时候要配置的系统时钟。

   
  volatile uint32_t sys_ms_tick = 0;
  

void SysTick_Handler(void)
{
++sys_ms_tick;
}

如果只是被中断作为某些标志改变不被其它地方访问的全局变量,是否一定要定义为volatile类型?

c 嵌入式

南瓜酱XD 10 years, 7 months ago

volatile的意思是编译器必须假设这个变量随时会改变。所以即使是连续两行代码,也不可以使用寄存器里暂存的值,而必须重新读取内存。这个主要是为了让中断以外的代码能正确运行,否则某个变量在中断中修改了,返回之后,原来的程序仍然使用寄存器中的值,就会导致中断的结果没有反映出来。

中断里修改、其他不访问的变量?那修改了是代表什么意义呢……

和谐的BB answered 10 years, 7 months ago

Your Answer