|
水贴之SOC开发中volatile限定词与编译器的优化!!!!
[复制链接]
最近上手nios软核处理器,入门自然少不了流水灯,开始按照“NIOS2那些事儿”写的流水灯程序,但是然后函数是自己写的,结果所有等都是一直长亮,死活不能流水。
代码如下:
/*
* main.c
*
* Created on: 2015-4-14
* Author: meicai
*/
#include "../inc/sopc.h"
#include "system.h"
void delay(void);
int main(void){
while(1){
LED->DATA =0x01;
delay();
LED->DATA =0x02;
delay();
}
return 0;
}
void delay(void)
{
int i;
for(i = 0; i < 400000; i++ );
}
后来发现是delay函数中的变量 i 被编译器优化掉了,甚是郁闷,通过观察其他人的代码发现在变量声明的时候都会加上volatile,我也效仿了一下,在delay函数中声明变量 volatile int i;嘿,果然就好了。后来翻书找到了volatile的解释。如下:
voaltile用于强制某个实现屏蔽可能的优化。
另外要注意的一点是,我使用的开发板上led灯灯饰阳极接电源,引脚拉低点亮,然而移位操作是用0补的,这就导致所有led灯都会一直亮。
|
|