欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: [推薦]AVR 單片機與GCC 編程 教程 [打印本頁]

作者: fengjiangpx    時間: 2008-7-17 13:56
標題: [推薦]AVR 單片機與GCC 編程 教程
第一章  AVR 單片機GCC 程序設(shè)計


WINAVR 是一個ATMEL AVR 系列單片機的開發(fā)工具集,它包含GNU C 和C++編譯器GCC。


1.1 一個簡單的例子


為了先有一個感性的認識,我們首先看一下如下一段程序和它的編譯、鏈接過程。


文件demo1.c :


#include
int main( void )
{
unsigned char i, j, k,led=0;
DDRB=0xff;
while (1)
{
if(led)
PORTB|=0X01;
else
PORTB&=0XFE;
led=!led;
//延時
for (i=0; i<255; i++)
for(j=0; j<255;j++)
k++;
}
}


這是一個使接在PB0 口的LED 發(fā)光管閃爍的程序。有了源程序文件demo1.c,我們就可以編譯它了。通過點擊菜單開始->運行
在彈出的對話框中輸入 “ command ” ,來打開控制臺窗口,并在命令行輸入:avr-gcc –mmcu=at90s2313 –c demo1.c


如圖1-1 所示。


必需告訴編譯器 程序的mcu 類型,這是我們通過命令行選項-mmcu 來指定的,我們指定的器件為at90s2313。-c 選項告訴編
譯器編譯完成后不鏈接。




                圖1-1 控制臺窗口


編譯完成后在工作目錄新生成了一個文件:demo1.o ,它是我們的目標文件,我們再使用鏈接器將它鏈接成可在器件上執(zhí)行的二進制代碼。
在命令行輸入:avr-gcc –mmcu=at90s2313 –O demo1.elf demo1.o


之后我們會在工作目錄看見鏈接器生成的demo1.elf。gcc 的鏈接后生成的文件為ELF 格式,在命令行我們通常用.elf 指定其擴展名。
ELF 格式文件除了包含不同存儲器的二進制格式內(nèi)容外還包含一些調(diào)試信息,所以我們還要借助一個有用工具 avr-objcopy 來提取單片機程
序存儲器內(nèi)容。命令行輸入:avr-objcopy -j .text -j .data -O ihex demo1.elf demo1.hex


gcc 把不同類型的數(shù)據(jù)分到不同的段落,相關(guān)程序存儲器的段有 .text 和 .data ,我們用選項 –j 指定了要提取的段。選項 –O 用來指
定輸出格式,這里我們指定為ihex (intel HEX file)。


到此我們得到了最終可以寫入單片機90S2313 FLASH 存儲器的demo1.hex 文件。用編程器將demo1.hex 內(nèi)空寫入到單片機,便可
看到接在PB0 口的LED 不斷的閃爍。以上對一次編譯過程的描述只是為了說明gcc 編譯一個C 源程序的步驟,在實際的應(yīng)用中我們很少用這種
方式編譯每一個源程序和每一個更新后的程序。而是借助一個叫make 的項目管理工具來進行編譯操作。Make 由下一節(jié)介紹。  


1.2 用MAKEFILE 管理項目


在我看來,通常一個編譯器(泛指高級語言編譯器、匯編器、鏈接器等等)、項目管理器和文本編輯器構(gòu)成一個完整的編程環(huán)境。


WINAVR 沒有像Keil uVision 那樣的集成IDE,所以我們需要寫一個叫做makefile 的文件來管理程序的編譯鏈接。makefile 是個腳本文件
,一個標準的(應(yīng)該說經(jīng)典的)可執(zhí)行文件make.exe 負責解析它并根據(jù)腳本內(nèi)容來調(diào)用編譯器、鏈接器或其它的工具。


1.2.1 make 的使用


make 能夠自動記憶各源文件間的依賴關(guān)系,避免重復編譯。
Make 指令用法是:
Make [-f filename] [names]
方括號表示括號里邊的內(nèi)容可以省略。其中filename 代表make 所使用的項目描述文件,如果此項省略,則從當前目錄下按下列順序?qū)ふ夷J
的項目描述文件


GNUmakefile.
makefile
Makefile (當然在WINDOWS 下不份大小寫文件名,也就無所謂了)
names 指定目標名或宏名。若不指定目標名,則make 命令總是把在makefile 文件中遇到的第一個目標當作默認目標。


1.2.2 Makefile 項目描述文件


一.目標


make 命令引入了目標(targets)的概念。Makefile 描述文件便是它的第一個目標,make 命令必須處理至少一個目標,否則不會得出
任何結(jié)果。正如我們在一個沒有默認描述文件的當前目錄下敲入make 一樣,make 會輸出以下的結(jié)果:


MAKE: ***No targets specified and no makefile found. Stop.


1.在項目描述文件中定義目標


一個目標通常從一行的開頭開始,并后跟一個冒號。
最簡單的MAKEFILE
#當前目錄 D:\AVRGCC\TEST
all:
@echo hello!
#End makefile
all: 便是第一個目標
調(diào)用此描述文件結(jié)果:
D:\AVRGCC\TEST>make
hello!


2.默認目標(goal)


在上面提到過,如果調(diào)用make 時不指定目標名則make 總是假設(shè)在描述文件中遇到的第一個目標是默認目標。以下示例可以非常好的說
明這一問題。


具有三個目標的makefile
#當前目錄 D\AVRGCC\TEST
one:
@echo one.
Two:
@echo two.
Three:
@echo three.
#End makefile
調(diào)用1:
D:\AVRGCC\TEST>make
one.


由于在命令行沒有指定目標,make 從makefile 中找到第一個目標(one)并執(zhí)行后既退出。
調(diào)用2:
D:\AVRGCC\TEST>make two
two.
由于在命令行明確指定了要執(zhí)行的目標(two),make 在makefile 中找到指定的目標,并執(zhí)行后退出。


調(diào)用3:
D:\AVRGCC\TEST make three one two
three.
one.
two.
命令行指定了三個目標,make 一一尋找并執(zhí)行。
在makefile 中非默認的目標稱為可替換的目標,只有默認的目標與它們存在直接或間接的依賴關(guān)系時它們才有可能被調(diào)用。


二.依賴關(guān)系


makefile 文件按如下格式指定依賴關(guān)系:
目標1[目標2 … ] : [ : ][依賴1][依賴2] …
[命令]


如下例


#當前目錄 D:\AVRGCC\TEST
one: Two
@echo one.
Two:
@echo two.
#End makefile
執(zhí)行結(jié)果是:
d:\avrgcc\test>make
two.
one.
Make 首先找到第一個目標one ,之后發(fā)現(xiàn)目標one 依賴目標Two 就先執(zhí)行Two 后才執(zhí)行one 中的命令。


三.Makefile 內(nèi)容


makefile 內(nèi)容可分為如下五種類型
①規(guī)則定義
語法:
目標 : 依賴
命令
...
其中目標為一個文件名或以空格分開的多個文件名,可含通配符。
例如:
%.o : %.c
avr-gcc -c $< -o $@
以上規(guī)則定義了任意一個以 .o 結(jié)尾的文件依賴于相同前綴且以 .c 結(jié)尾的文件。并執(zhí)行下邊的命令獲得。
規(guī)則中目標和依賴分別為 %.o 和%.c,在目標通配符 “%” 代表任意的字符串,而在依賴中代表與目標中代表的對應(yīng)字符串。


②隱含規(guī)則


隱含規(guī)則是make 預先定義的規(guī)則,用選項 –r 可取消所有的隱含規(guī)則。
例如對于C 程序 %.o 可以自動的從 %.c 通過命令
$(CC) -c $(CPPFLAGS) $(CFLAGS)' 生成。


③變量
變量是在makefile 中描述一字符串的的名稱。變量可用在目標、依賴、命令和makefile 其它部分中。變量名由除': '、'#'、'='之外的字符組
成,對大小寫敏感。
變量的定義并賦值格式:
變量名 = 變量代表字符串
變量的引用格式:
$(變量名)


例如:


CC = avr-gcc
%.o : %.c
$(CC) -c $< -o $@


④命令
命令部分是由make 傳遞到系統(tǒng)的字符格式的命令行的組合,在目標被創(chuàng)建時它們按順序一行一行傳遞到系統(tǒng)并執(zhí)行。
字符 '@'開始的命令 在系統(tǒng)的輸出中不顯示本次的指令行。


⑤注釋
字符 '# ' 開頭的行為注釋行,如果注釋需要換行需在行尾加 ' \ ',除包含其它MAKEFIEL 外在行的任意處可插入注釋。


四.自動變量


在makefile 中有一組預定義的變量,當每一規(guī)則被執(zhí)行時根據(jù)目標和依賴重新計算其值,叫作自動變量。


下面列出了常用的幾個自動變量
$@ : 在規(guī)則中代表目標名,如果規(guī)則含有多個目標名它將列舉所有目標。
$% : 僅在目標是存檔文件的成員時起作用,代表目標。
如目標foo.a(bar.o)中$@ 代表foo.a $%代表bar.o
$< : 在規(guī)則中代表第一個依賴文件名
$? : 代表在規(guī)則中所有以空格隔開的依賴文件名,如果依賴是存檔文件的成員則只有成員名被列出。
$^ : 代表在規(guī)則中所有以空格隔開的依賴文件名,如果依賴是存檔文件的成員則只有成員名被列出。
WINAVR 提供一種簡單makefile 生成工具叫mfile,如圖1-2


利用它我們可方便的生成合適的makefile。


Main file name…菜單指定主程序文件,它將決定主源程序文件名及輸出文件名。
Output format 菜單項用于選擇最終生成的可指行代碼格式,根據(jù)編程器支持格式選擇即可。
Optimization leave 指定C 代碼的優(yōu)化級,s 代表按最小代碼量編譯。
C/C++ source file(s) 和Assembler source files(s) 用于在項目中添加其它C、C++、和匯編程序文件。




           圖1-2 mfile 生成makefile


通常我們選擇了以上幾項便可編譯了。


1.3 開發(fā)環(huán)境的配置


一.軟件環(huán)境


UltraEdit + WinAVR 打造超級開發(fā)IDE
UltraEdit 是個文本編輯器,它支持C 代碼的高亮顯示、項目管理及外部工具配置等功能。
首先要安裝UltraEdit 和 WinAVR。


(1) UltraEdit 的個性化設(shè)置:
下面是我個人習慣的設(shè)置
視圖->顏色設(shè)置 光標所在行文本 設(shè)置成黑,光標所在行背景設(shè)置成白
高級->配置->編輯 制表符寬度值和縮進空格婁均設(shè)成4。
高級->配置->備份 保存時備份文件里選擇 不備份。
視圖->查看列表 選中函數(shù)列表


(2) 創(chuàng)建編譯用的文件
先在硬盤上創(chuàng)建一個目錄作為設(shè)計大本營,這里假設(shè)為 d:\devdir
UltraEdit 寫主程序文件保存到此文件夾中 這里設(shè)為demo.c
用mfile 生成一個合適的makefile 保存到d:\devdir
UltraEdit 創(chuàng)建一項目,負責管理文件
項目->新建項目 目錄選d:\devdir 輸入項目名稱(這里假設(shè)為prj)
在接下來的文件設(shè)置對話框中的項目文件目錄區(qū)輸入或選擇d:\devdir
選中 相對路徑 復選按鈕
通過 添加文件 按鈕將剛才的makefile 和demo.c 添加到項目中,之后按關(guān)閉。


(3)在UltraEdit 中make 我的項目
高級 -> 工具配置
在命令行區(qū)輸入 make
在工作目錄區(qū)輸入 d:\devdir
在菜單項目名稱區(qū)輸入一個任意的菜單名稱
選中 輸出到列表框 和 捕獲輸出兩個選擇按鈕后單擊 插入按鈕 確定。
至此你就可以在UltraEdit 內(nèi)就可以make 你的程序了?
如果不愿意每次編譯時找菜單可用快捷鍵 Ctrl+shift+0。
記得要在你的項目里添加源程序時,除了在UltraEdit 項目->文件設(shè)置里添加外還要在
makefile 的SRC 變量后列出來才可編譯哦?
到此 我們的超級無敵AVR 編程環(huán)境打造完成 ,如圖1-3。




              圖 1-3 配置后的UltraEdit 外觀


二.硬件環(huán)境


SI-Prog + PonyProg 實現(xiàn)最廉價的下載實驗器 AVR 系列單項機提供對程序存儲器(FLASH)和數(shù)據(jù)存儲器(EEPROM)的串行編程
功能(ISP),使它的程序燒寫變得方便。AVR 系列器件內(nèi)部FLASH 存儲器的編程次數(shù)通常可達到10000 次以上,所以使用多次燒寫的方式
調(diào)試程序時不必擔心器件的損壞。


ISP 功能占用三個I/O 端口(MOSI 、MISO、 SCK)與外部編程邏輯通信,編程邏輯按指定時序?qū)⒊绦驍?shù)據(jù)串行方式發(fā)送到器件,器件內(nèi)
的ISP 功能模塊負責將數(shù)據(jù)寫入到FLASH 或EEPROM。


在實際應(yīng)用中通常利用PC 機的并行口或串行口加一個下載適配器(下載線)實現(xiàn)一個編程硬件,AVR 的下載線有很多種,這里向大家推薦
SI-Prog,SI-Prog 具有制作方便(只需幾個分立元件)、接線少(通過PC 9 針串行口編程),支持軟件成熟(PonyProg)等特點。 si-prog
的完整電路可到LancOS 下載。圖1-4


為簡化后的電路原理圖。
PonyPorg 是個串行器件編程軟件,支持AVR 在內(nèi)的多種器件的串行編程。




                圖1-4 SI-Prog 電路原理圖


有了一臺安裝有PonyPorg 的PC 機和SI-Prog ,就可以將程序?qū)懭氲綄嶋H器件來驗證了,想一想此方案的成本和一個AVR 芯片能燒寫的次數(shù)
,是不是覺得很值?


讀到這里您對AVR 單片機的開發(fā)和WINAVR 編程應(yīng)該有了一個基本的認識,也應(yīng)當做好了開發(fā)或?qū)W習前軟硬件的準備工作。從下一章開始
我將進一步解析AVR 的GCC 程序設(shè)計。






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1