为什么给C变量类型“volatile”增加循环计数器?

时间:2013-10-01 02:45:57

标签: cycle clock volatile atmel

我有以下C代码。

#include <avr/io.h>
int main(void) {
DDRA = 0xFF;
PORTA = 0x00;   
while(1) {
    /*volatile*/ unsigned long int counter;
    for (counter=0; counter<14285L; counter++) {
        PORTA = ~PINA; // run to cursor here
    }
}
return(0);
}

此代码可用于Atmega128微控制器板。

注意到评论词“volatile”。当我在Atmel Studio中使用“volatile”进行模拟时,它会以19个周期运行。当它没有被评论时,它以46个周期运行。

为什么会有巨大的差异?

1 个答案:

答案 0 :(得分:1)

volitile关键字提示编译器不应该进行某些优化,因为由于中断之类的事情,不能假定该值保持不变。没有优化,事情就会变慢。