void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog
timer
P1DIR |= BIT4; // Set P1.0 to output direction
for (;;)
{
P1OUT ^= BIT4; // Toggle P1.0 using exclusive-OR
delay(); // Delay
}
}
void delay()
{
volatile unsigned int i;
i=50000;
do(i--);
while(i!=0);
}
闪闪灯的程序,为什么把volatile去掉等就闪不起来了呢?
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。
谢谢,貌似有点明白了
那这个volatile什么时候加什么时候不用加啊?
一般变量不加都可以,只有就是上边说的这种情况才加
一周热门 更多>