GNU gcc嵌入式系統(tǒng)開(kāi)發(fā)
定 價(jià):45 元
- 作者:董文軍 著
- 出版時(shí)間:2010/1/1
- ISBN:9787811248142
- 出 版 社:北京航空航天大學(xué)出版社
- 中圖法分類:TP314
- 頁(yè)碼:409
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16開(kāi)
本書(shū)首先介紹了GNU gcc的基本組成,分章節(jié)講述了GNU gcc、Debian Linux、makefile、gdb、vi、emacs等開(kāi)源開(kāi)發(fā)工具的使用,然后以Atmel公司的兩款頗具代表性的嵌入式芯片,即低端的8位AVR單片機(jī)ATmega48和中端的32位ARM芯片AT91SAM7S64為代表,全面講述了GNU gcc在嵌入式開(kāi)發(fā)中的應(yīng)用。可以看到GNU gcc在不同硬件下的開(kāi)發(fā)過(guò)程與使用方法的確具有高度的一致性,給學(xué)習(xí)與使用帶來(lái)了很大的方便。書(shū)中還特別列舉了非常實(shí)用的開(kāi)源項(xiàng)目USBASP以及usbdrv,使讀者既能對(duì)開(kāi)源軟件的強(qiáng)大功能留下深刻的印象,又能學(xué)到實(shí)際有用的東西。
本書(shū)可作為高等院校計(jì)算機(jī)、電子、自動(dòng)化、機(jī)電一體化等相關(guān)專業(yè)嵌入式系統(tǒng)課程的教學(xué)參考書(shū),也可作為從事嵌入式系統(tǒng)應(yīng)用開(kāi)發(fā)工程師的參考資料。
筆者從事電子類相關(guān)工作近二十年,一直都對(duì)此有著深厚的興趣。自學(xué)生時(shí)代的家電維修開(kāi)始,到后來(lái)從事計(jì)算機(jī)硬件教學(xué)工作這一路走來(lái),從電子硬件電路、單片機(jī)應(yīng)用,到計(jì)算機(jī)應(yīng)用程序、驅(qū)動(dòng)程序開(kāi)發(fā)以及到現(xiàn)在的軟硬一體化的嵌入式系統(tǒng),一步一步地從最底層的電路焊接開(kāi)始到現(xiàn)在,計(jì)算機(jī)硬件的多個(gè)層次都曾接觸過(guò),較長(zhǎng)的專業(yè)生涯使筆者也積累了較多的經(jīng)驗(yàn)體會(huì)。一直以來(lái)也有想法,將這些經(jīng)驗(yàn)集結(jié)成冊(cè),為推廣計(jì)算機(jī)知識(shí)盡一點(diǎn)綿薄之力,恰逢北京航空航天大學(xué)出版社的邀請(qǐng),于是決定著手此書(shū)的編寫(xiě)。
做過(guò)技術(shù)工作的人都有過(guò)這樣的經(jīng)歷與體會(huì),大量的時(shí)間都是花費(fèi)在技術(shù)資料的閱讀與查找上,很多項(xiàng)目常常因?yàn)槟硞(gè)技術(shù)資料的缺乏而使項(xiàng)目卡殼,有時(shí)甚至影響到項(xiàng)目的順利完成。這一點(diǎn)在技術(shù)飛速發(fā)展的IT行業(yè)特別在計(jì)算機(jī)軟件領(lǐng)域表現(xiàn)更為突出,很多的技術(shù)細(xì)節(jié)被隱藏在不公開(kāi)的源代碼中,源碼的不公開(kāi)往往造成技術(shù)發(fā)展的瓶頸,直到20世紀(jì)80年代出現(xiàn)了一種全新的開(kāi)源思想:它認(rèn)為計(jì)算機(jī)源代碼應(yīng)該像文學(xué)藝術(shù)作品一樣作為人類共同知識(shí)財(cái)富的一部分,讓每個(gè)人都有機(jī)會(huì)閱讀與學(xué)習(xí),而不應(yīng)該只作為公司或個(gè)人的私有財(cái)產(chǎn),并為此發(fā)布了一系列的法律文件來(lái)保證開(kāi)源軟件源碼的公開(kāi)性。開(kāi)源精神得到了廣大計(jì)算機(jī)專業(yè)人士及愛(ài)好者的大力擁護(hù),包括很多世界著名的大公司在內(nèi),行業(yè)內(nèi)的很多精英都投身到這一偉大的事業(yè)中來(lái),這極大地促進(jìn)了計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展。在開(kāi)源精神的指導(dǎo)下,世界有了全新的操作系統(tǒng)Linux,有了全新的開(kāi)發(fā)工具gcc,有了全新的文本編輯器emacs等。
開(kāi)源軟件對(duì)于莘莘學(xué)子來(lái)說(shuō)更是一個(gè)福音,有了開(kāi)源代碼,他們就能自由地閱讀到世界一流的代碼,學(xué)習(xí)的資料極大地豐富,所學(xué)的技術(shù)與知識(shí)也能最快地站在世界的前沿;能迅速有效地將所學(xué)的理論用上,理論與實(shí)踐的距離被迅速拉近,學(xué)習(xí)變成了探索,變成了一件有趣的活動(dòng)。開(kāi)源軟件同時(shí)也極大地促進(jìn)了社會(huì)經(jīng)濟(jì)的發(fā)展,IT產(chǎn)品漸漸地不再昂貴,很多公司的產(chǎn)品都是來(lái)源于開(kāi)源項(xiàng)目,人類智慧的共同合力得到了充分的體現(xiàn)。開(kāi)源精神在大家的共同努力下不斷發(fā)展,對(duì)世界產(chǎn)生了越來(lái)越大的影響。
現(xiàn)在IT產(chǎn)業(yè)已進(jìn)入了后PC時(shí)代,傳統(tǒng)的桌面PC市場(chǎng)已經(jīng)趨于飽和,現(xiàn)階段難以找到新的增長(zhǎng)點(diǎn),但隨著人們更熱衷于快捷方便、能隨身攜帶的IT服務(wù),低功耗的便攜式產(chǎn)品成為了市場(chǎng)的新熱點(diǎn),也成為廣大廠商與專業(yè)人員追捧的目標(biāo),連IT業(yè)巨頭Intel都高調(diào)宣布進(jìn)軍嵌入式領(lǐng)域。開(kāi)源軟件也順應(yīng)時(shí)代潮流率先進(jìn)入了嵌入式時(shí)代,為廣大開(kāi)發(fā)者提供了特性高度一致的嵌入式產(chǎn)品,Linux、gcc等開(kāi)源軟件都能在嵌入式系統(tǒng)中使用,而且目前還是支持硬件最多的開(kāi)發(fā)工具與平臺(tái),這正適合于嵌入式硬件平臺(tái)眾多的特點(diǎn)。
為了能全面描述GNU gcc在嵌入式開(kāi)發(fā)中的應(yīng)用,筆者選擇了Atmel出品的兩款頗具代表性的嵌入式芯片,一款為低端的8位AVR單片機(jī)ATmega48,另一款為中端的32位ARM芯片AT91SAM7S64。本書(shū)對(duì)這兩款芯片都講述了使用GNU gcc開(kāi)發(fā)工具進(jìn)行開(kāi)發(fā)的方法與過(guò)程,可以看到GNU gcc在不同硬件下的開(kāi)發(fā)過(guò)程與使用方法的確是具有高度的一致性,這給學(xué)習(xí)與使用帶來(lái)了很大的方便。書(shū)中還特別列舉了非常實(shí)用的開(kāi)源項(xiàng)目USBASP以及usbdrv,使讀者既能對(duì)開(kāi)源軟件的強(qiáng)大功能留下深刻的印象,又能學(xué)習(xí)實(shí)際有用的東西。
寫(xiě)書(shū)是一項(xiàng)艱苦的工作,為此筆者停下了一些項(xiàng)目的開(kāi)發(fā)工作,專心寫(xiě)書(shū)。在此過(guò)程中得到了家人以及很多朋友、同事的關(guān)心與幫助,在此表示衷心的感謝。首先要感謝筆者的妻子和家人,他們的支持讓我能安下心來(lái)寫(xiě)書(shū);特別感謝我的合作伙伴劉賓林,他給了我很多專業(yè)上的幫助;還有這些人員:董振興、鄒遠(yuǎn)菊、劉中平、譚蔚蕓、陳雙妹、劉冬麗、伍向陽(yáng)、劉新宇等,他們都為本書(shū)作出了貢獻(xiàn),這里一并表示感謝。同時(shí)衷心感謝北航出版社,使本書(shū)得以順利出版。
第1章 GNUgcc概述1
1.1 自由軟件與GNU、GPL1
1.2 gcc的發(fā)展歷史及特點(diǎn)2
1.3 gcc的使用簡(jiǎn)介與命令行參數(shù)說(shuō)明4
1.3.1 gcc的基本用法4
1.3.2 警告提示功能選項(xiàng)7
1.3.3 庫(kù)操作選項(xiàng)8
1.3.4 代碼優(yōu)化選項(xiàng)9
1.3.5 調(diào)試選項(xiàng)10
1.3.6 交叉編譯選項(xiàng)11
1.3.7 鏈接器參數(shù)選項(xiàng)12
1.3.8 鏈接器描述文件格式12
1.3.9 gcc的錯(cuò)誤類型及對(duì)策15
第2章 適合于嵌入式開(kāi)發(fā)的平臺(tái)Debian17
2.1 Debian概述17
2.2 Debian的安裝18
2.3 Debian基本操作25
2.3.1 桌面環(huán)境25
2.3.2 常用應(yīng)用程序26
2.3.3 文件系統(tǒng)管理27
2.4 Debian系統(tǒng)維護(hù)與軟件的安裝37
2.4.1 apt包管理系統(tǒng)的管理37
2.4.2 軟件包管理與安裝命令38
2.4.3 dpkg底層的包管理工具39
2.4.4 軟件的其他安裝方法41
2.5 版本控制42
2.5.1 cvs概述42
2.5.2 Debian中安裝cvs服務(wù)器42
2.5.3 cvs的基本操作46
2.5.4 遠(yuǎn)程cvs操作54
2.5.5 cvs使用舉例54
2.5.6 Wincvs的使用56
第3章 makefile文件的編寫(xiě)66
3.1 概述66
3.2 makefile的基本語(yǔ)法和簡(jiǎn)單實(shí)例67
3.2.1 基本語(yǔ)法67
3.2.2 make命令行參數(shù)定義67
3.2.3 簡(jiǎn)單實(shí)例71
3.3 常用命令72
3.3.1 @命令72
3.3.2 命令間的相互關(guān)聯(lián)72
3.3.3 忽略命令的錯(cuò)誤73
3.3.4 條件判斷73
3.3.5 定義命令序列73
3.4 目標(biāo)與規(guī)則74
3.4.1 偽目標(biāo)74
3.4.2 靜態(tài)目標(biāo)75
3.4.3 makefile中的常用目標(biāo)75
3.4.4 后綴規(guī)則76
3.4.5 模式規(guī)則76
3.4.6 多目標(biāo)與自動(dòng)推導(dǎo)77
3.4.7 makefile規(guī)則77
3.4.8 引入其他的makefile文件80
3.5 變量81
3.5.1 變量的定義81
3.5.2 與變量相關(guān)的操作符82
3.5.3 變量的應(yīng)用83
3.5.4 特殊變量84
3.6 函數(shù)87
3.6.1 函數(shù)的調(diào)用語(yǔ)法87
3.6.2 字符串處理函數(shù)88
3.6.3 文件操作函數(shù)90
3.6.4 循環(huán)函數(shù)91
3.6.5 條件函數(shù)92
3.6.6 其他函數(shù)92
3.6.7 makefile工作過(guò)程總結(jié)94
第4章 gdb調(diào)試技術(shù)95
4.1 概述95
4.1.1 簡(jiǎn)單的調(diào)試實(shí)例96
4.1.2 gdb啟動(dòng)退出與程序的加載98
4.1.3 gdb隨機(jī)幫助與常用命令99
4.2 gdb常用查看命令101
4.2.1 查看寄存器101
4.2.2 查看棧信息101
4.2.3 查看源程序103
4.2.4 查看源代碼的內(nèi)存104
4.3 變量操作命令105
4.3.1 查看單個(gè)數(shù)據(jù)105
4.3.2 輸出格式105
4.3.3 修改變量的值106
4.3.4 全局變量與局部變量106
4.3.5 表達(dá)式107
4.3.6 數(shù)組107
4.3.7 查看內(nèi)存108
4.3.8 變量自動(dòng)顯示108
4.4 程序斷點(diǎn)運(yùn)行調(diào)試命令109
4.4.1 斷點(diǎn)操作109
4.4.2 觀察點(diǎn)操作110
4.4.3 捕捉點(diǎn)操作110
4.4.4 重載函數(shù)的斷點(diǎn)操作111
4.4.5 各種斷點(diǎn)的維護(hù)111
4.5 程序的單步調(diào)試技術(shù)113
4.6 程序的信號(hào)調(diào)試技術(shù)114
4.7 程序的多線程調(diào)試技術(shù)115
4.8 程序控制命令116
4.8.1 跳轉(zhuǎn)控制命令116
4.8.2 函數(shù)控制命令116
4.9 gdb環(huán)境設(shè)置命令117
4.9.1 運(yùn)行環(huán)境設(shè)置117
4.9.2 顯示設(shè)置117
4.9.3 環(huán)境變量120
4.9.4 搜索源代碼121
4.9.5 指定源文件的路徑121
第5章 Linux常用編輯器122
5.1 vi編輯器122
5.1.1 概述122
5.1.2 多文件操作126
5.1.3 光標(biāo)移動(dòng)命令127
5.1.4 屏幕操作命令129
5.1.5 尋找與替換131
5.1.6 vi的基本編輯命令及操作133
5.1.7 多窗口操作138
5.1.8 寄存器與緩沖區(qū)操作140
5.1.9 與編程開(kāi)發(fā)相關(guān)操作141
5.1.10 配置設(shè)置143
5.1.11 其他編輯命令144
5.2 emacs編輯器146
5.2.1 概述146
5.2.2 emacs基本知識(shí)147
5.2.3 對(duì)目錄的操作154
5.2.4 編輯遠(yuǎn)程機(jī)器上的文件157
5.2.5 光標(biāo)操作157
5.2.6 基本編輯功能160
5.2.7 查找與替換163
5.2.8 多窗口操作164
5.2.9 emacs編程語(yǔ)言支持功能164
5.2.10 emacs設(shè)置172
5.2.11 版本控制174
5.2.12 隨機(jī)幫助的使用177
5.2.13 emacs的其他功能178
第6章 ATmega48/88/168硬件結(jié)構(gòu)與功能179
6.1 ATmega48/88/168概述179
6.1.1 產(chǎn)品特性179
6.1.2 引腳配置180
6.1.3 結(jié)構(gòu)框圖183
6.1.4 工作狀態(tài)與MCU控制寄存器185
6.1.5 AVRCPU通用工作寄存器186
6.2 存儲(chǔ)結(jié)構(gòu)186
6.2.1 ATmega48的程序存儲(chǔ)器映像186
6.2.2 SRAM數(shù)據(jù)存儲(chǔ)器187
6.2.3 EEPROM數(shù)據(jù)存儲(chǔ)器187
6.3 系統(tǒng)時(shí)鐘以及選擇189
6.3.1 時(shí)鐘分類189
6.3.2 時(shí)鐘源190
6.3.3 與系統(tǒng)時(shí)間相關(guān)寄存器191
6.4 電源管理與休眠模式192
6.4.1 工作模式192
6.4.2 休眠模式控制寄存器193
6.4.3 功耗最小化需要考慮的幾個(gè)問(wèn)題194
6.5 時(shí)間器與看門(mén)狗195
6.5.1 看門(mén)狗定時(shí)器195
6.5.2 看門(mén)狗控制寄存器195
6.5.3 看門(mén)狗安全操作時(shí)間序列196
6.5.4 看門(mén)狗熔絲位197
6.5.5 定時(shí)器的工作模式197
6.5.6 8位PWM定時(shí)器0199
6.5.7 16位PWM定時(shí)器1208
6.5.8 8位異步操作PWM定時(shí)器2216
6.6 復(fù)位與中斷221
6.6.1 復(fù)位221
6.6.2 中斷223
6.6.3 外部中斷224
6.6.4 ATmega48復(fù)位與中斷向量226
6.6.5 ATmega88復(fù)位與中斷向量228
6.6.6 ATmega168復(fù)位與中斷向量231
6.6.7 I/O端口234
6.8 串行通信接口238
6.8.1 USART串行通信238
6.8.2 SPI串行通信245
6.8.3 兩線串行通信249
6.9 模擬比較器與模/數(shù)轉(zhuǎn)換254
6.9.1 模擬比較器254
6.9.2 模/數(shù)轉(zhuǎn)換器256
6.10 熔絲位以及功能259
第7章 AVRgcc開(kāi)發(fā)技術(shù)262
7.1 Debian中的AVR交叉工具包262
7.1.1 AVR交叉工具包的安裝262
7.1.2 使用Linux平臺(tái)的優(yōu)勢(shì)263
7.1.3 準(zhǔn)備工作263
7.1.4 AVRgcc編譯及makefile的編寫(xiě)264
7.1.5 軟件模擬調(diào)試265
7.2 AVR的GNU下載工具266
7.2.1 PonyProg下載工具266
7.2.2 uisp下載工具269
7.2.3 stk200下載線電路圖274
7.3 procyonAVRLib的C語(yǔ)言庫(kù)函數(shù)274
7.3.1 AVRLib的下載與安裝274
7.3.2 與AVR芯片內(nèi)部設(shè)備相關(guān)函數(shù)275
7.3.3 常用外部設(shè)備函數(shù)285
7.3.4 常見(jiàn)通用設(shè)備的軟件模擬297
7.3.5 通用庫(kù)函數(shù)298
7.3.6 網(wǎng)絡(luò)庫(kù)函數(shù)305
第8章 AVR純固件USB協(xié)議314
8.1 USB總線協(xié)議概述314
8.1.1 基本概念314
8.1.2 USB總線狀態(tài)322
8.1.3 USB物理層定義323
8.1.4 USB數(shù)據(jù)鏈路層定義325
8.2 開(kāi)源純軟件模擬USB總線協(xié)議331
8.2.1 純軟件USB協(xié)議功能特性331
8.2.2 硬件電路331
8.2.3 軟件系統(tǒng)結(jié)構(gòu)333
8.3 純軟件USB應(yīng)用-USBASP下載線345
8.3.1 USBASP功能概述345
8.3.2 USBASP硬件電路345
8.3.3 USBASP固件程序分析346
8.3.4 USBASP制作過(guò)程347
8.3.5 USBASP使用方法348
第9章 ARMgcc開(kāi)發(fā)包ProcyonARMLib351
9.1 AtmelAT91SAM7S系列芯片概述351
9.1.1 AT91SAM7S的基本特點(diǎn)351
9.1.2 AT91SAM7S的基本結(jié)構(gòu)353
9.1.3 ARM7TDMI處理器概述355
9.1.4 存儲(chǔ)器356
9.1.5 外設(shè)358
9.1.6 定時(shí)器358
9.1.7 外設(shè)數(shù)據(jù)傳輸控制器359
9.1.8 高級(jí)中斷控制器360
9.1.9 并行輸入/輸出控制器361
9.1.10 通信總線361
9.1.11 脈寬調(diào)制控制器364
9.1.12 USB器件端口365
9.1.13 模/數(shù)轉(zhuǎn)換器366
9.2 ARM交叉工具軟件包366
9.2.1 gnuarm概述366
9.2.2 gnuarm應(yīng)用程序binutils366
9.3 ProcyonARMLib的C語(yǔ)言庫(kù)函數(shù)388
9.3.1 ARMLib的下載與安裝388
9.3.2 與ARM芯片內(nèi)部設(shè)備相關(guān)函數(shù)390
9.3.3 與AVRLib相同的部分398
9.4 OpenOCD398
9.4.1 OpenOCD概述398
9.4.2 OpenOCD的安裝399
9.4.3 OpenOCD芯片的配置文件400
9.4.4 OpenOCD芯片配置命令400
9.4.5 OpenOCD命令403
9.4.6 OpenOCD應(yīng)用舉例405
9.4.7 wiggler并口jtag408
參考文獻(xiàn)409
GNU項(xiàng)目計(jì)劃的主要目的是創(chuàng)建一個(gè)名叫GNU’s Not Unix(GNU)的完全免費(fèi)的操作系統(tǒng)。該操作系統(tǒng)將包括絕大多數(shù)自由軟件基金會(huì)所開(kāi)發(fā)的其他軟件,以對(duì)抗所有商業(yè)軟件,而這個(gè)操作系統(tǒng)的核心(kernel)就叫HURD。但是GNU在開(kāi)發(fā)完全免費(fèi)的操作系統(tǒng)上并未取得成功’直到20世紀(jì)90年代由林納斯.本納第克特.托瓦茲(Linus Benedict TorvaIds)開(kāi)發(fā)了Linux操作系統(tǒng),GNU才算在免費(fèi)操作系統(tǒng)上完成了任務(wù)。
雖然GNU計(jì)劃在開(kāi)發(fā)免費(fèi)操作系統(tǒng)上不成功,但是卻成功開(kāi)發(fā)幾個(gè)廣為流傳的GNU軟件’其中最著名的是GNU C Complier(gcc)。這個(gè)軟件成為歷史上最優(yōu)秀的C語(yǔ)言編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%-30%,使得那些靠販賣編譯器的公司大吃苦頭,因?yàn)樗鼈儫o(wú)法研制出與gcc同樣優(yōu)秀,卻又完全免費(fèi)、并開(kāi)放源代碼的編譯器來(lái)。而由于它又是copylefted,所以一旦有用戶發(fā)現(xiàn)錯(cuò)誤,就會(huì)通知Richard StaIlman,所以幾乎每個(gè)月都可以推出新版本。