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