volatile只是告诉编译器,这个变量是挥发性的,每次<访问>必须<认认真真>的<读取-修改-写>到实际位置,而不能偷懒.
这不单单用在别的地方会修改的场合,还可以用于通知编译器不要优化某个变量.
比如
void delay(void)
{
uint32 i = 0;
for(i = 0; i < 100; i ++)
{
}
}
上面的i,在一些编译器,或者一些编译选项上,是可以被优化的,因为这个i没有输出操作,编译器为了提高运行速度把整个循环删掉是符合规定的,但这不是我们需要的结果.
如果声明成
volatile uint32 i = 0;
编译器就不会优化这个变量,它不管是否外部是否<真的>会修改,都会乖乖的执行所有关于i的操作.
volatile只是告诉编译器,这个变量是挥发性的,每次<访问>必须<认认真真>的<读取-修改-写>到实际位置,而不能偷懒.
这不单单用在别的地方会修改的场合,还可以用于通知编译器不要优化某个变量.
比如
void delay(void)
{
uint32 i = 0;
for(i = 0; i < 100; i ++)
{
}
}
上面的i,在一些编译器,或者一些编译选项上,是可以被优化的,因为这个i没有输出操作,编译器为了提高运行速度把整个循环删掉是符合规定的,但这不是我们需要的结果.
如果声明成
volatile uint32 i = 0;
编译器就不会优化这个变量,它不管是否外部是否<真的>会修改,都会乖乖的执行所有关于i的操作.
举报