最易变的关键字 - volatile

最易变的关键词 - volatile

1、volatile关键字

volatile 是易变的、不稳定的意思。和const一样是一种类型修饰符,volatile关键字修饰的变量,编译器对访问该变量的代码不再进行优化,从而可以提供对特殊地址的稳定访问。
以前只是听过这个关键词,知道它的存在,但从来没用过。用此文记录下在开发RISC-V MCU过程中,未用volatile修饰标志位变量,编译器进行优化,导致程序运行异常。

2、Demo

开发中,常见的需求,主循环中根据中断中修改的标志位,运行不同的功能,

#include "debug.h"

uint8_t flag_test = 0;
void main(void)
{
	while(1)
	{
		if(flag_test == 1)
		{
			flag_test = 0;
			printf("flag_test = %d\r\n",flag_test);
			//do something
		}
	
	}
}


/* 外部中断服务函数*/

将程序下载至MCU后,给P1.0引脚下降沿触发信号,也进入中断服务函数,改变了flag_test的值,但是主函数仍然没有运行相应的程序,很是奇怪,检查反汇编代码,才发现是编译器对flag_test变量的访问进行了优化


最易变的关键字 - volatile

上一篇:如何解决跨域


下一篇:审计数据导致sysaux表空间爆满