沉思的牛 发表于 2015-3-20 20:47:02

从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]
查看完整版本: 从ICCAVR到AtmelStudio