内容包括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做為編譯器
--------------------------------------- 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_();
在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$表示工程所在目錄,\..\工程所在目錄的上一層目錄。設定後詳見圖檔。
------------------------------------------------------------------------------------------------------