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