AVR编译软件的使用汇总

一、AVRStudio 及WinAVR 简介

AVRStudio 是ATMEL 官方针对AVR 系列单片机推出的集成开发环境,它集开发调试于一体,有很好的用户界面,很好的稳定性。AVRSdudio 是免费的。AVRStudio 本身可以开发汇编程序,如果希望使用c 语言开发,则需要安装c 编译器(WinAVR 等)。

WinAVR 是GNU 组织推出的AVR 单片机的gcc 编译器,该编译器的编译效率极高。gcc 编译器是开源的,是免费的。使用gcc 编译器,可以掌握标准c 的语法等,为学习Linux 等奠定基础。

-----------------------------------------------------------------------------------------------

二、Avr Studio和Winavr最新版下载地址

AVRStudio 最新版本的官方下载地址:http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 

WinAVR 最新版本的官方下载地址:http://sourceforge.net/project/showfiles.php?group_id=68108 

-----------------------------------------------------------------------------------------------

三、Avr Studio和Winavr编译环境设置

1.使用AVR GCC做为编译器
 
 
2.选择仿真调试平台 
 
 
3.选择Device,设置Frequency,代码优化选项Optimization,输出hex文件 
 
 
4.设置包含文件(头文件)路径 
 
 
5.设置库文件路径 
 
 
6.设置工具链路径(不使用AVR Toolchain) 
 
 
如此便可使用winavr作为c编译器,不会出现avr-objcopy: '****.elf': No such file的错误。
-----------------------------------------------------------------------------------------------
四、IAR for AVR的使用(CC2530开发套件zigbee开发板)

1、出现“IAR AVR unknown or ambiguous symbol.main” 

project==>options==>linker,format设置成debug。 

IAR下必须进入DEBUG模式才能进行调试,如果不连接开发工具的话,断点也是不行的

2、处于调试状态,但是不能在C语言上单步运行,也不能设置断点

project==>options==>C/C++Compiler,将Generate debug information打上勾。

3、IAR For AVR软件的精确延时

好了,废话不多说,不浪费中断的情况下的精确延时啊~~,当然是软件自带的单周期的空操作了~~,你懂得为什么,比如_nop_();(当然这个家伙是51单片机中用到的c程序,汇编就是nop;喽)

在IAR for AVR中的库函数#include"intrinsics.h"里面有个单周期的延时函数__delay_cycles();(相当于_nop_();),

如果__delay_cycles(100)就是100个mclk的周期延时。

然后就是下面的操作了:

1)建立一个.h文件,用Keilc51这个是必须懂得,我就不多解释了

2)输入代码:

#ifndef __delay_h
#define __delay_h
#include"intrinsics.h"
#define xtal  8       //这里就是你要使用的晶振的频率(单位NHZ)
#define delay_us(x) __delay_cycles((unsigned  long)(x*xtal))
#define delay_ms(x) __delay_cycles((unsigned  long)(x*xtal*1000))
#define delay_s(x)  __delay_cycles((unsigned  long)(x*xtal*1000000))
#endif

3)就是在你用到延时的函数里面调用#include"Delay.h"(这里是不区分大小写的,哈,不用担心这个)

这就在不浪费中断情况下的软件延时,当然你要非得精确,那非得定时计数器不可了

补充一下:

我用的是IAR for AVR,别的软件什么的似乎也有延时函数,如果没有可以用下面的这个延时(听说也是相当准的,在8MHZ晶振下,不管是外接还是内部晶振,哈都一样):

//------------------------------------------------------------------------------
//延时函数
void  delay_ms(uint k)
{
  uint  i,j;
  for(i=0;i
    for(j=0;j<1140;j++);
}

还有一个:差点忘记(这个不知道是那个哥们想到的,也可以改变晶振的~~~都贴出来,反正没事干):

//------------------------------------------------------------------------------
//延时1ms的函数,没有参数传递
void  delay_1ms()
{
  uint i;
  for(i=1;i<(uint)(xtal*143-2);i++)
    ;
}
//------------------------------------------------------------------------------
//延时nms的函数,有参数传递
void  delay_nms(uint n)
{
  uint i=0;
  while(i
  {
    delay_1ms();
    i++;
  }
}

4、如何在IAR中加入编译所需库的头文件?

工程名右击->options->C/C++ compiler->Preprocessor中填入头文件所在的目录即可,$PROJ_DIR$表示工程所在目录,\..\工程所在目录的上一层目录。设置后详见图片。

-----------------------------------------------------------------------------------------------

永不止步步 发表于12-27 10:51 浏览65231次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:305067个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号