voliate变量随时变化,用voliate修饰的运算不会被编译器优化以避免错误。
在常规变量中,为了提高访问速率,编译器将变量的值存储在寄存器中,并在以后取变量的值时存储在寄存器中进行检索。
但是,用voliate修饰的变量表明该变量会发生意想不到的变化。 也就是说,每次读取该值时,优化程序都不再假设该值。 每次都小心地读取此变量的值,而不是对寄存器进行保留的备份。
那么,是否可以同时用const和voliate修饰一个参数?
答案很好。 例如,只读状态寄存器。 那是voliate,因为那可能会发生意想不到的变化; 那是voliate,表示程序不应该试图改变它。
voliate关键字的应用场景
1、需要在中断服务程序中修改的其他程序检测到的变量中添加volatile;
2、多任务环境下各任务之间共享的标志应加volatile;
3、内存映射的硬件寄存器中通常也必须加入volatile的说明。 那是因为每次读写都可能具有不同的意义。