首先導入到單片機的是二進制文件,之因此要編譯爲HEX文件,是由於hex文件帶校驗,在傳輸制、存儲過程當中有錯誤的話,容易提早發現,而二進制文件就不能,假如在存儲中因爲某一位或幾位數受損,那麼下載時照樣按受損的文件導入到單片機。html
二進制:bin 八進制:oct 十進制:dec 十六進制:hexgit
爲了生成可在Arduino板子上運行的程序,須要通過如下幾個步驟:github
一個Arduino程序能夠包含多個文件(IDE中的多個標籤頁,一個標籤頁表明一個文件)。單擊IDE頂部滾動條的右向箭頭便可管理各文件。文件標籤頁的擴展名有4種類型:無擴展名、.c、.cpp或.h(如果其它擴展名,將被轉換爲下劃線)。程序編譯完後,全部無擴展名的文件標籤頁將被合併在一塊兒,生成「主程序文件」。.c或.cpp擴展名的文件將被單獨編譯。爲了打開.h標籤頁,必須#include該文件(使用雙引號""而非尖括號< >)。編程
在傳給avr-gcc編譯器以前,Arduino IDE將對主程序文件(IDE中全部無擴展名的標籤頁合併結果)進行轉換操做:app
1. 在主程序文件的頭部,加入#include "WProgram.h"(0023版本)或#include "Arduino.h"(1.0版本)。該頭文件(位於<ARDUINO>/hardware/cores/<CORE>/)包含Arduino標準核心庫所需的全部聲明。編程語言
2. IDE將搜索主程序文件中出現的全部函數定義,爲它們建立聲明(原型)。這些聲明將被插在最前面的的註釋、預處理語句(#include或#define)以後,其它語句以前(包括類型定義)。若在函數中使用了自定義類型,則須要將該類型的定義單獨放入一個頭文件中。固然,這個處理並不完善:含有默認參數值的函數,定義在名字空間或類裏的函數,均不會產生正確的聲明原型。函數
3. 當前目標板的main.cxx文件中的全部內容,附加在主程序文件以後。ui
Arduino IDE支持多種目標板與多種芯片、CPU頻率、bootloader。這些都在板配置文件中定義,相關參數包括:spa
<BOARD>.name: 顯示在Boards菜單裏的名稱調試
<BOARD>.build.mcu: 板上的單片機(經常使用"atmega8"或"atmega168")
<BOARD>.f_cpu: 單片機的時鐘頻率(經常使用"16000000L"或ATmega168使用內部時鐘時的"8000000L")
<BOARD>.core: hardware/cores/目錄裏的子目錄名稱,用於連接時選擇對應的核心庫(經常使用"arduino")
另外,在preferences.txt中的一項設定也是頗有用的:
構建程序時,是否打印調試信息(如"false")。若爲true,則打印構建過程當中調用的全部命令的完整信息。
注:Arduino 0004及以後的版本,build.extension再也不使用 -- 主程序文件將永遠做爲.cpp文件處理。
這裏以使用avr-gcc來編譯程序文件爲例,能夠在core不一樣移植的核心編譯器keil等。
include路徑包括程序文件所在目錄、目標板目錄(<ARDUINO>/hardware/cores/<CORE>)和avr的include目錄(<ARDUINO>/hardware/tools/avr/avr/include/),以及主程序文件引用的頭文件所在的函數庫目錄(位於<ARDUINO>/hardware/libraries)。
當verify一個程序文件時,將在系統臨時目錄(如Mac裏的/tmp)中進行構建。當上傳時,將在程序文件所在目錄(可經過Sketch > Show Sketch Folder菜單進行訪問)的applet/子目錄中構建。
目標板核心的.c與.cpp文件將在同級目錄下被編譯生成.o文件,主程序文件、程序其它.c和.cpp文件及#include包含的函數庫中的.c或.cpp文件一樣處理。
這些.o文件將最終生成一個靜態庫,主程序文件與之連接。只有主程序中使用到的庫代碼纔會被寫入到最終的.hex文件中,這樣就減小了絕大多數程序的大小。
.hex文件是編譯的最終文件,而後被上傳到Arduino板。點擊"Verify"按鈕,.hex文件會在/tmp(Mac和Linux系統)或\Documents and Settings\<USER>\Local Settings\Temp(Windows系統)目錄中生成;點擊"upload"按鈕,該文件在程序目錄(經過Sketch > Show Sketch Folder菜單訪問)的applet子目錄中生成。
生成的程序經過avrdude上傳。
上傳過程也受板配置和主配置文件中的參數影響,板配置包括:
<BOARD>.upload.protocol: avrdude與Arduino板的通訊協議(一般是"stk500")
<BOARD>.upload.speed: avrdude上傳程序時使用的速度(波特率)(一般是"19200")
<BOARD>.upload.maximum_size: Arduino板的最大程序大小(與芯片大小及bootloader大小有關)
主配置中影響的參數:
upload.verbose: 上傳程序到板上時,是否顯示調試信息(默認"false")。