久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

作者: fengjiangpx    時間: 2009-11-19 16:12
標題: [推薦]AVR 單片機與GCC 編程 教程
第一章  AVR 單片機GCC 程序設計


WINAVR 是一個ATMEL AVR 系列單片機的開發工具集,它包含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 發光管閃爍的程序。有了源程序文件demo1.c,我們就可以編譯它了。通過點擊菜單開始->運行 在彈出的對話框中輸入 “ command ” ,來打開控制臺窗口,并在命令行輸入:avr-gcc –mmcu=at90s2313 –c demo1.c


如圖1-1 所示。


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





                圖1-1 控制臺窗口


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


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


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


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


1.2 用MAKEFILE 管理項目


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


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


1.2.1 make 的使用


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


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


1.2.2 Makefile 項目描述文件


一.目標


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


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


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


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


2.默認目標(goal)


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


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


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


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


二.依賴關系


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


如下例


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

 

AVR 單片機與GCC 編程----之一
http://bbs.huazhoucn.com/Temp/Temp3332_1.html
AVR 單片機與GCC 編程----之二
http://bbs.huazhoucn.com/Temp/Temp3333_1.html
AVR 單片機與GCC 編程----之三
http://bbs.huazhoucn.com/Temp/Temp3334_1.html
AVR 單片機與GCC 編程----之四
http://bbs.huazhoucn.com/Temp/Temp3335_1.html
AVR 單片機與GCC 編程----之五
http://bbs.huazhoucn.com/Temp/Temp3336_1.html
AVR 單片機與GCC 編程----之六
http://bbs.huazhoucn.com/Temp/Temp3337_1.html
AVR 單片機與GCC 編程----之七
http://bbs.huazhoucn.com/Temp/Temp3338_1.html
AVR 單片機與GCC 編程----之八
http://bbs.huazhoucn.com/Temp/Temp3339_1.html


作者: wangxianliang    時間: 2016-5-1 09:47
下載看看





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 深夜福利影院 | 国产精品视频免费播放 | 手机看片169 | 日韩三级免费网站 | 成人免费网站视频 | av在线天堂网 | 国产精品久久久久久久久久久免费看 | 国产精品一区二区三区在线 | 亚洲性在线 | 美女福利网站 | 牛牛热在线视频 | 国产精品一区一区三区 | 激情福利视频 | 亚洲一区二区三区在线播放 | 久久久www成人免费精品 | 成人免费视频网站在线看 | 日韩在线xx| 国产激情在线 | 国产成人精品视频在线观看 | 一区二区三区精品在线 | 日韩精品一区二区在线 | 国产一区二区黑人欧美xxxx | 亚洲一二三视频 | 久久成人国产 | 色网在线播放 | 国产三区精品 | 在线国产一区 | 综合久久亚洲 | 亚洲看片网站 | 日本免费在线 | 7777在线视频免费播放 | 五月激情综合网 | 国产精品一区二区免费 | 国产精品99久久久久久动医院 | 中文字幕亚洲一区二区三区 | 亚洲国产精选 | 国产精品视频在线免费观看 | 精品国产一区二区国模嫣然 | 欧洲精品一区 | 欧美色成人 | 99精品国产一区二区青青牛奶 |