从ICCAVR到AtmelStudio
本帖最后由 沉思的牛 于 2015-3-20 21:03 编辑一次偶然的机会在Atmel官网上下载了AtmelStudio;
因为是用的VS2010的界面,所以非常喜欢这个IDE;
美女镇楼:
迫不及待的写了一个闪光灯程序进行测试,居然这么简单的程序不行!!{:5_90:}
程序如下:
#include <avr/io.h>
void Delay(long long z)
{
long long x,y;
for(x=z ; x>0 ; x--)
for(y=110 ; y>0; y--);
}
int main(void)
{
DDRC=0XFF; //LED接PC口
PORTC=0XFF;//LED接PC口
while(1)
{
PORTC =~PORTC; //闪光灯
Delay(500);
}
}
于是各种不服,立马查资料,发现自己太特么心急了;应该好好看看资料的~~{:5_92:}
由于编译器优化级别比ICCAVR等级高;Delay是被编译器优化掉了;
只需要在变量前面加上volatile即可{:5_98:}代码如下:
#include <avr/io.h>
void Delay(volatile long long z) //使用volatile的正常
{
volatile long long x,y;
for(x=z ; x>0 ; x--)
for(y=110 ; y>0; y--);
}
int main(void)
{
DDRC=0XFF; //LED接PC口
PORTC=0XFF; //LED接PC口
while(1)
{
PORTC =~PORTC; //闪光灯
Delay(500);
}
}
关于volatile的描述百度百科有很详细的解答,{:5_94:}简单地说就是防止编译器对代码进行优化!
当然你也可以更改编译器的优化等级,不用加volatile也可以;设置如下:
后期我会把软件和一些资料上传到百度网盘,供大家下载~
页:
[1]