ICCAVR是一種符合ANSI標準的C語言來開�(fā)MCU程序的一個工�,它具有功能合適、使用方便、技術支持強大等�(yōu)�。ICCAVR就是ATMEL公司為AT90系列單片機開�(fā)我編譯工具�
1 ImageCraft 的ICCAVR 介紹
ImageCraft 的ICCAVR 是一種使用符� ANSI 標準� C 語言來開�(fā)微控制器 MCU程序的一個工� 它有以下幾個主要特點:
ICCAVR 是一個綜合了編輯器和工程管理器的集成工作�(huán)� IDE 其可在WINDOWS9X/NT 下工��
源文件全部被組織到工程之� 文件的編輯和工程的構筑也在這個環(huán)境中完成 編譯錯誤顯示在狀�(tài)窗口� 并且當你用鼠標單擊編譯錯誤時 光標會自動跳轉到編輯窗口中引起錯誤的那一� 這個工程管理器還能直接產生您希望得到的可以直接使用� INTELHEX 格式文件 INTEL HEX 格式文件可被大多數的編程器所支持 用于下載程序到芯片中��
ICCAVR 是一� 32 位的程序 支持長文件名�
出于篇幅考慮 本說明書并不介紹通用� C 語言語法知識 僅介紹使� ICC AVR 所必須具備的知� 因此要求讀者在閱讀本說明書之前 應對 C 語言有了一定程度的理解�
2 ICCAVR 中的文件類型及其擴展�
文件類型是由它們的擴展名決定的 IDE 和編譯器可以使用以下幾種類型的文件�
輸入文件�
.c 擴展�----表示� C 語言源文�
.s 擴展�----表示是匯編語言源文�
.h 擴展�----表示� C 語言的頭文件
.prj 擴展�----表示是工程文� 這個文件保存由 IDE 所�(chuàng)建和修改的一個工程的有關信息�
.a 擴展�----庫文� 它可以由幾個庫封裝在一� libcavr.a 是一個包含了標準 C 的庫� AVR特殊程序調用的基本庫 如果庫被引用 鏈接器會將其鏈接到您的模塊或文件中您也可以創(chuàng)建或修改一個符合你需要的��
輸出文件�
.s 對應每� C語言源文� 由編譯器在編譯時產生的匯編輸出文�
.o 由匯編文件匯編產生的目標文件 多個目標文件可以鏈接成一個可�(zhí)行文�
.hex INTEL HEX 格式文件 其中包含了程序的機器代碼
.eep INTEL HEX 格式文件 包含� EEPROM的初始化數據
.cof COFF 格式輸出文件 用于� ATMEL� AvrStudio �(huán)境下進行程序調試
.lst 列表文件 在這個文件中列舉出了目標代碼對應的最終地址
.mp 內存映象文件 它包含了您程序中有關符號及其所占內存大小的信息
.cmd NoICE 2.xx 調試命令文件
.noi NoICE 3.xx 調試命令文件
.dbg ImageCraft 調試命令文件
3 附注和擴�
#pragma 編譯附注
這個編譯器接受以下附注
#pragma interrupt_handler <func1>:<vector number> <func2>:<vector> ...
這個附注必須在函數之前定義 它說明函� func1 func2 是中斷操作函� 所以編譯器在中斷操作函數中生成中斷返回指令 reti 來代替普通返回指� ret 并且保存和恢復函數所使用的全部寄存器 同樣編譯器根據中斷向量號 vector number 生成中斷向量地址#pragma ctask <func1> <func2>...
這個附注指定了函數不生成揮�(fā)寄存器來保存和恢復代� 它的典型應用是在 RTOS實時操作系統(tǒng)中讓 RTOS 核直接管理寄存器#pragma text:<name>
改變代碼段名� 使其與命令行選項相適�
#pragma data:<data>
改變數據段名� 使其與命令行選項相適� 這個附注在分配全局變量� EEPROM中時必須被使� 讀者可參考訪� EEPROM 的例�#pragma abs_address:<address>
函數與全局數據不使用浮動定� 重定� 而是�<address>開始分配地址 這在訪問中斷向量和其它硬件項目時特別有用#pragma end_abs_address
結束定位 使目標程序使用正常浮動定�
C++ 注釋
如果你選擇了編譯擴充(Project->OptiONs->Compiler) 你可以在你的源代碼中使用 C ++� // 類型的注釋二進制常數
如果你選擇了編譯擴充(Project->Options->Compiler) 你可以使� 0b<1|0>* 來指定二進制常數 例如 0b10101 等于十進制� 21�
在線匯編
你可以使� asm("string")函數來指定在線匯編代� 讀者可參考在線匯��
4 代碼轉換
IAR 或其� ANSI C編譯系統(tǒng)的代碼轉換�
IAR C編譯器作為應用于 AVR的� C 編譯� 它有十分豐富的源代碼 當你� IAR編譯系統(tǒng)轉換� ImageCraft 編譯系統(tǒng)� 絕大多數符合 ANSI C標準的程序代碼不需要轉� IAR C� IO 寄存器的定義與ICCAVR 也是相同��
中斷操作描述 ICCAVR 使用 pragma 附注描述中斷操作函數 � IAR 引入了語法擴� interrupt 關鍵� 下面是一個對��
� ICCAVR 中:
#pragma interrupt_handler func:4 // 4 是這個中斷的向量� func 為中斷處理函數名稱ICCAVR 可以使多個中斷向量共用一個中斷處理函��
� IAR 中:
interrupt [vector_name] func() // vector_name 是某一個中斷向量的名稱 IAR C 的中斷向量地址使用中斷名稱來代� 以增加程序的可讀性�
擴充關鍵�
IAR 引入 flash 關鍵字將項目分配進入程序存貯空間 FLASH存貯� ICCAVR 使用const關鍵字來達到相同的目��
過程調用轉換
在兩個編譯系�(tǒng)之間函數參數傳遞使用的寄存器是不同的 這僅影響手工寫的匯編函數�
在線匯編 宏等 IAR 不支持在線匯編符� � ICCAVR 支持在線匯編�
1.工程管理器還能直接生成可以直接使用的INTEL HEX格式文件,該格式的文件可被大多數編程器所支持,用于下載到芯片��
2.ICCAVR是一�32位的程序支持長文件名�
3.源文件全部被組織到工程之中,文件的編輯和工程的構筑也在這個環(huán)境中完成,錯誤顯示在狀�(tài)窗口中,并且當你點擊編譯錯誤�,光標自動跳轉到錯誤的那一��
4.ICCAVR是一個綜合了編輯器和工程管理器的集成工作�(huán)境(IDE��
錄并且選擇并打開led 工程工程管理器顯示在這個工程中只有一個文件led.c 然后從Project 菜單中選擇Options 命令打開工程編譯選項�"Target"標號下選擇目標處理器然后從Project 菜單中選擇Make Project 命令IDE 將調用編譯器編譯這個工程文件并且在狀�(tài)窗口中顯示所有的信息�
如果沒有錯誤在與源文件同一個目錄在這個例子中是\icc\examples.avr 中輸出一個文件led.hex 這個文件是 INTEL HEX 格式大多數能支持AVR MCU 的編程器和模擬器都支持這種格式并且能下載這個程序進入你的目標系統(tǒng)這樣就完成了一�
程序的構筑如果你希望用支� COFF 調試信息的工具來測試你的程序比如AVR Studio 那么你需要從Project 菜單中選擇Options 命令在編譯標簽下選擇COFF 輸出文件格式對一些常用的功能你也可使用工具條或鼠標右鍵彈出菜單例如你可以在工程窗口單擊鼠標右鍵選擇編譯選��
在工程窗口中雙擊文件名IDE 將使用編輯器打開這個文件按這個方法打開led.c作為試驗可設置一些錯誤例如從一行中刪除分號現在從Project 菜單中選擇MakeProject 命令IDE 首先自動保存已經改變的文件并且開始編譯這個文件這時在狀�(tài)�
窗口中會顯示錯誤信息單擊狀�(tài)窗口中錯誤信息行或單擊其左邊的錯誤符號光標,將移到編輯器中錯誤行的下面一行上基本上所有C 編譯器都是這樣開始一個新的工��
� Project 菜單中選擇New 命令并且瀏覽至你希望輸出工程文件的目錄輸出文件的名稱取決于你的工程文件名稱例如如果你�(chuàng)建一個名稱為foo.prj 的工程那么輸出文件名稱為foo.hex 或foo.cof 等�
自從�(chuàng)建你自己的工程后 你可以開始寫你的源代�(C 或匯編格�) 并且將這個文件加入到工程文件排列中單擊工具欄中Build 圖標可以很容易地構筑這個工程IDE 輸出與ATMEL 的AVR Studio 完全兼容的COFF 文件你可以使用ATMEL 的AVR
Studio 來調試你的代�。為更容易地使用這個開�(fā)工具你可以使用應用程序向導來生成一些使用有關硬件的初始化代�
2 C 程序的剖�
一� C 程序必須定義一個main 調用函數編譯器會將你的程序與啟動代碼和庫函,數鏈接成一個可�(zhí)行文件因此你也可以在你的目標系統(tǒng)中執(zhí)行它啟動代碼的用,途在啟動文件中很詳細地被描述了一個C 程序需要設定目標環(huán)境啟動代碼初始化這個目標使其滿足所有的要求,通常 你的main 例程完成一些初始化后然后是無限循環(huán)地運行作為例子讓我們看 \icc\examples 目錄中的文件led.c�
#include <io8515.h>
/* 為使能夠看清LED 的變化圖案延時程序需要有足夠的延時時�*/
void Delay()
{
unsigned char a, b;
for (a = 1; a; a++)
for (b = 1; b; b++)
;
}
void LED_On(int i)
{
PORTB = ~BIT(i); /* 低電平輸出使LED 點亮 */
Delay();
}
void main()4
{
int i;
DDRB = 0xFF; /*定義 B口輸�*/
PORTB = 0xFF; /* B 口全部為高電平對應LED 熄滅*/
while (1)
{
/*LED 向前步� */
for (i = 0; i < 8; i++)
LED_On(i);
/* LED 向后步� */
for (i = 8; i > 0; i--)
LED_On(i);
/* LED 跳躍*/
for (i = 0; i < 8; i += 2)
LED_On(i);
for (i = 7; i > 0; i -= 2)
LED_On(i);
}
}
這� main 例程是很簡單的在初始化一些IO 寄存器后之后它運行在一個無限循�(huán)中并且在這個循�(huán)中改變LED 的步進圖案LED 是在LED_On 例程中被改變的在LED_On 例程中直接寫正確的數值到IO 端口因為CPU 運行很快為能夠看見圖案變化LED_On 例程調用了延時例程因為延時的實際延時值不能被確定這一對嵌套循�(huán)只能給出延時的近似延時時間如果這個實際定時時間是重要的那么這個例程應該使用硬件定時器來完成延�,其它的例子8515intr.c 程序很簡單但同樣清楚地顯示了如何用C 寫一個中斷處理過程這兩個例子可以作為你的程序的起點�
1 編譯一個單獨的文件
正常建立一個輸出文件的次序� 你首先應該建立一個工程文件并且定義屬于這個工程的所有文� 然� 我們有時也需要將一個文件單獨地編譯為目標文件或最終的輸出文件 這時可以這樣操作 � IDE 菜單 File 中選� Compile File... 命令 來執(zhí)� to Object � to OUTPUT 中的任意一� 當你調用這個命令時 文件應該是打開的并且在編輯窗口中可以編輯的�
編譯一個文件為目標文件 to Object 對檢查語法錯誤和編譯一個新的啟動文件是很有用的 編譯一個文件為輸出文件 to OUTPUT 對較小的并且是一個文件的程序較為有用 注意 這里使用默認的編譯選��
2 �(chuàng)建一個新的工�
為創(chuàng)建一個新的工� 從菜� Project 中選� New 命令 IDE 會彈出一個對話框 在對話框中你可以指定工程的名� 這也是你的輸出文件的名稱 如果你使用一些已經建立的源文� 你可在菜� Project 中選� AddFile(s) 命令�
另外 你可以在菜單 File 中選� New 命令來建立一個新的源文件來輸入你的代� 你可以在菜單 File 中選� Save � Save As 命令來保存文� 然后你可以象上面所述調� AddFile(s) 命令將文件加入到工程� 也可在當前編輯窗口中單擊
鼠標右鍵選擇 Add to Project 將文件加入已打開的工程列表中 通常你輸出源文件在工程同一個目錄中 但也可不作這樣要求�
工程的編譯選項使用菜單中 Project 中的 OptiONs 命令�
3 工程管理
工程管理允許你將多個文件組織進同一個工� 而且定義它們的編譯選項 這個特性允許你將工程分解成許多小的模塊 當你處理工程構筑� 只有一個文件被修改和重新編� 如果一個頭文件作了修改 當你編譯包含這個頭文件的源文件� IDE 會自動重新編譯已經改變的頭文��
一個源文件可以寫成 C 或匯編格式的任意一� C 文件必須使用 .c 擴展� 匯編文件必須使用 .s 擴展� 你可以將任意文件放在工程列表� 例如你可以將一個工程文檔文件放在工程管理窗口中 工程管理器在構筑工程時對源文件以外的文件不予理睬�
對目標器件不同的工程 可以在編譯選項中設置有關參數 當你新建一個工程時使用默認的編譯選� 你可以將現有編譯選項設置成默認選� 也可將默認編譯選項裝入現有工程中 默認編譯選項保存� default.prj文件中�
為避免你的工程目錄混� 你可以指定輸出文件和中間文件到一個指定的目錄 通常這個目錄是你的工程目錄的一個子目錄�
4 編輯窗口
編輯窗口是你� IDE 交流信息的主要區(qū)� 在這個窗口中你可以修改相應的文件當編譯存在錯誤時 用鼠標單擊有關錯誤信息時 編輯器會自動將光標定位在錯誤行的位置 注意 � C 源文件中缺少分號 的錯� 編輯器定位于其下面一行�
5 應用構筑向導
應用構筑向導是用于創(chuàng)建外圍設備初始化代碼的一個圖形界� 你可以單擊工具條中的 Wizard 按鈕或菜� Tools 中的 ApplicationBuilder 命令來調用它。應用構筑向導使用編譯選項中指定的目� MCU來產生相應的選項和代��
應用構筑向導顯示目標 MCU 的每一個外圍設備子系統(tǒng) 它的使用是很顯而易見的在這里你可以設� MCU 的所具有的中� 內存 定時� IO 端口 UART SPI 和模擬量比較器等外圍設備 并產生相應的代碼 如果你需要的� 還可產生 main( )函數�
6 狀�(tài)窗口
狀�(tài)窗口顯示 IDE 的狀�(tài)信息�
7 終端仿真
IDE 有一個內置的終端仿真� 注意它不包含任意一� ISP 在系�(tǒng)編程 功能 但它可以作為一個簡單的終端 或許可以顯示你的目標裝置的調試信� 也可下載一� ASC碼文件�
� 6.20 版本開始 IDE 加入了對 ISP 的支��
維庫電子通,電子知識,一查百��
已收錄詞�161964�