天天看點

AVR編譯軟體的使用彙總

内容包括AVRStudio及WinAVR介紹,軟體下載下傳位址,編譯環境設定,IAR for AVR的使用。紫色文字是超連結,點選自動跳轉至相關博文。持續更新,原創不易!

目錄:

一、AVRStudio及WinAVR簡介

1、使用AVR GCC做為編譯器

2、選擇仿真調試平台

3、選擇Device,設定Frequency,代碼優化選項Optimization,輸出hex檔案

4、設定包含檔案(頭檔案)路徑

5、設定庫檔案路徑

6、設定工具鍊路徑(不使用AVR Toolchain)

二、Avr Studio和Winavr最新版下載下傳位址

三、Avr Studio和Winavr編譯環境設定

四、IAR for AVR的使用(CC2530開發套件zigbee開發闆)

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

2、處于調試狀态,但是不能在C語言上單步運作,也不能設定斷點

3、IAR For AVR軟體的精确延時

4、IAR中加入編譯所需庫的頭檔案

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

一、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做為編譯器

AVR編譯軟體的使用彙總

--------------------------------------- 2、選擇仿真調試平台 

AVR編譯軟體的使用彙總

--------------------------------------- 3、選擇Device,設定Frequency,代碼優化選項Optimization,輸出hex檔案 

AVR編譯軟體的使用彙總

--------------------------------------- 4、設定包含檔案(頭檔案)路徑 

AVR編譯軟體的使用彙總

--------------------------------------- 5、設定庫檔案路徑 

AVR編譯軟體的使用彙總

--------------------------------------- 6、設定工具鍊路徑(不使用AVR Toolchain) 

AVR編譯軟體的使用彙總

如此便可使用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_();

在IAR for AVR中的庫函數#include"intrinsics.h"裡面有個單周期的延時函數__delay_cycles();(相當于_nop_();),

如果__delay_cycles(100)就是100個mclk的周期延時。

然後就是下面的操作了:

#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$表示工程所在目錄,\..\工程所在目錄的上一層目錄。設定後詳見圖檔。

AVR編譯軟體的使用彙總

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