本書從組件技術的視角出發,介紹了嵌入式系統設計技術和技巧,并將安全性貫穿全書。全書每一章涵蓋一個專題,包括與嵌人式系統設計相關的若干主要內容:指令系統、CPU、計算平臺、程序設計與分析、進程和操作系統、系統設計技術、物聯網、汽車與航天系統以及嵌入式多處理器等。本書適合作為計算機、電子信息、通信工程、自動化、機電一體化、儀器儀表及相關專業高年級本科生和研究生的教材,也適合相關的工程技術人員參考。
第4版前言準備本書第4版的過程使我意識到我的年齡有多大。在1999年年底,我完成了第1版的最終草稿。從那時起,嵌入式計算技術發展迅猛,但是核心原理依然基本保持不變。我對整本書進行了修改:整理問題,修改文稿,對某些章節重新排序以改進思路,并刪除了一些不重要的內容。
本書在兩方面做出了巨大改動。第一,新增了物聯網(IoT)這一章;第二,將安全性貫穿全書。自第3版出版以來,IoT就已作為一個重要主題出現,但是它的實現依賴于現存的技術和知識。在第4版中,新的IoT章節綜述了幾個用于IoT應用的無線網絡,也給出了一些IoT系統組織的模型。安全性對于嵌入式系統一直都很重要,雖然本書第1版就已討論過醫療設備的安全性,但是一系列事件又突出了這一主題的關鍵特性。
在前幾版中,一些高級的知識點都放在第8章,包括多處理器片上系統和網絡嵌入式系統等。第4版將這些內容擴展,并分為三章:第8章涵蓋OSI和網絡協議,以及IoT特定主題的知識;第9章探討汽車環境中的網絡嵌入式系統,并涵蓋安全性方面的幾個例子;第10章講述多處理器片上系統及其應用。
和前幾版一樣,在本書網站http://www.marilynwolf.us可以找到所有相關內容。一些外部Web資源的鏈接也在該網站上。此外,我的新博客http://embeddedcps.blogspot.com/提供了一些嵌入式計算人員感興趣的話題。
我要感謝編輯Nate McFadden給予的幫助和指導。當然,本書中的任何問題都是我的責任。
Marilyn Wolf第3版前言本書第3版反映了我對嵌入式計算的深入思考以及對本書讀者的若干建議,其中一個重要的目標是擴大嵌入式計算應用的范圍。學習有關數碼相機和汽車之類的主題需要付出很多努力。我希望本書可以為這些系統中直接影響嵌入式計算設計者決策的部分提供一些有用的見解。我也擴大了示例處理器的范圍,包括尖端的處理器,如TI C64x和高級ARM擴展(advanced ARM extension),同時還包括PIC16F,并通過它描述小型RISC嵌入式處理器的特性。最后重新組織了網絡和多處理器章節,使這些緊密相關的主題看起來更統一。讀者可以在課程網站http://www.marilynwolf.us尋找附加的材料,這個網站包含了上面所說的所有內容,還有實驗樣例以及獲取附加信息的提示。
我要感謝Nate McFadden、Todd Green和Andre Cuello的耐心編輯以及在本書修訂過程中對我的關心。我還要感謝匿名評論者和科羅拉多大學的Andrew Pleszkun教授對本書草稿的中肯建議。特別感謝David Anderson、Phil Koopman和Bruce Jacob幫助我理解了一些內容。同樣要感謝2011年的亞特蘭大“末日暴雪”給了我大量不受打擾的寫作時間。
最重要的是,這是我感謝父親的最好時機。他教會我如何工作:不僅僅是教會我怎樣做具體的事情,更重要的是教會我如何處理問題,開拓思路,然后把它們轉化為成果。一直以來,他教我如何體貼關心他人。感謝您,父親。
Marilyn Wolf第2版前言相對2000年本書第1版出版的時候,如今嵌入式計算更為重要。更多的產品中使用了嵌入式處理器,從玩具到飛機都有應用。片上系統現在使用幾百個CPU。手機朝著新的標準計算平臺方向發展。就像2006年9月《IEEE Computer》雜志上我的專欄中所指出的那樣,當今世界至少有50萬嵌入式系統程序員,可能接近80萬。
在這一版中,我盡力做了更新和補充。本書的一個主要改變是使用TI C55x DSP。我慎重地重寫了關于實時調度的討論。嘗試將性能分析主題盡可能在更多的抽象層次上擴展。指出多處理器在甚至最平凡的嵌入式系統中的重要性,此版對硬/軟件協同設計和多處理器也進行了更通用的介紹。
計算機教學領域的一個改變是,本教材成為越來越低年級的課本。過去用于研究生的教材現在用于高年級本科生;在可預見的未來,本書的部分內容將可作為大學二年級教材。我認為可以選取本書的部分內容去覆蓋更先進和更基礎的課程。一些高年級學生可能不需要前面章節的背景知識,這樣可以把更多時間花在軟件性能分析、調度和多處理器上。當開設介紹性課程時,軟件性能分析可作為探索微處理器體系結構和軟件體系結構的一個可選方案;這樣的課程可以關注前幾章的內容。
本書和我的其他書的新網站是http://www.waynewolf.us。在這個網站里,可以找到本書相關材料的概括、實驗建議,還可找到關于嵌入式系統的更多信息的網站鏈接。
致謝感謝許多幫助我完成第2版的人。德州儀器的Cathy Wicks和Naser Salameh在理解C55x上給了我非常有價值的幫助。FreeRTOS.org的Richard Barry不僅慷慨地允許我引用其操作系統的源碼,還幫我澄清代碼的解釋。本書的編輯是Morgan Kaufmann出版社的Chuck Glaser,他知道何時需要耐心,何時需要鼓勵,何時需要誘導。當然,還要感謝Nancy和Alec耐心為我錄入。本書的任何問題,不管是大是小,自然都是我個人的責任。
Marilyn Wolf第1版前言微處理器早已成為我們生活的一部分,然而,微處理器足夠強大到能執行真正復雜的功能還是近幾年的事。在摩爾定律的驅動下,微處理器飛速發展,同時促使嵌入式計算成為一門學科。在微處理器的早期階段,所有組件相對較小也較簡單,
---作者簡介---
瑪里琳·沃爾夫(Marilyn Wolf) 佐治亞理工學院教授,佐治亞研究聯合會學者,IEEE會士,ACM會士。1984~1989年任職于貝爾實驗室,1989~2007年執教于普林斯頓大學。她于2003年獲得ASEE Frederick E. Terman獎,于2006年獲得IEEE電路與系統教育獎。
---譯者簡介---
林水生 電子科技大學通信與信息工程學院教授,物聯網工程系主任,全國物聯網工程及相關專業教學指導小組成員。目前主要從事無線通信系統、無線傳感器網絡、通信集成電路設計等方面的研究工作。
目 錄
出版者的話
譯者序
第1版序言
第4版前言
第3版前言
第2版前言
第1版前言
第1章 嵌入式計算1
1.1 引言1
1.2 復雜系統與微處理器1
1.2.1 嵌入式計算機2
1.2.2 嵌入式計算應用的特點3
1.2.3 為什么使用微處理器4
1.2.4 信息物理系統6
1.2.5 防危性和安全性6
1.2.6 嵌入式計算系統設計所面臨的挑戰8
1.2.7 嵌入式計算系統的性能9
1.3 嵌入式系統設計過程9
1.3.1 需求10
1.3.2 規格說明14
1.3.3 體系結構設計14
1.3.4 設計硬件與軟件組件16
1.3.5 系統集成16
1.3.6 系統設計的形式化方法16
1.3.7 結構描述17
1.3.8 行為描述20
1.4 設計示例:模型火車控制器22
1.4.1 需求23
1.4.2 DCC24
1.4.3 概念性規格說明25
1.4.4 詳細規格說明27
1.4.5 經驗總結32
1.5 本書導讀32
1.5.1 第2章:指令集33
1.5.2 第3章:CPU33
1.5.3 第4章:計算平臺33
1.5.4 第5章:程序設計與分析34
1.5.5 第6章:進程和操作系統34
1.5.6 第7章:系統設計技術35
1.5.7 第8章:物聯網系統35
1.5.8 第9章:汽車和航天系統35
1.5.9 第10章:嵌入式多處理器36
1.6 總結36
我們學到了什么36
擴展閱讀36
問題37
上機練習38
第2章 指令集39
2.1 引言39
2.2 預備知識39
2.2.1 計算機體系結構分類39
2.2.2 匯編語言41
2.2.3 VLIW處理器42
2.3 ARM處理器43
2.3.1 處理器和存儲體系44
2.3.2 數據運算44
2.3.3 控制流程49
2.3.4 ARM的高級特性54
2.4 PICmicro系列中端微處理器55
2.4.1 處理器和存儲體系55
2.4.2 數據操作55
2.4.3 控制流程57
2.5 TI C55x DSP58
2.5.1 處理器和存儲體系58
2.5.2 尋址模式61
2.5.3 數據操作62
2.5.4 控制流程63
2.5.5 C語言編程指南64
2.6 TI C64x65
2.7 總結68
我們學到了什么68
擴展閱讀68
問題68
上機練習69
第3章 CPU70
3.1 引言70
3.2 輸入/輸出編程70
3.2.1 輸入/輸出設備70
3.2.2 輸入/輸出原語72
3.2.3 忙等待I/O73
3.2.4 中斷74
3.3 特權模式、異常和陷阱85
3.3.1 特權模式85
3.3.2 異常85
3.3.3 陷阱86
3.4 協處理器86
3.5 存儲系統機制86
3.5.1 高速緩存87
3.5.2 存儲管理單元和地址轉換91
3.6 CPU性能94
3.6.1 流水線技術94
3.6.2 高速緩存的性能98
3.7 CPU的功耗99
3.7.1 CMOS功耗99
3.7.2 電源管理模式99
3.7.3 程序級電源管理101
3.8 防危性和安全性102
3.9 設計示例:數據壓縮器103
3.9.1 需求和算法103
3.9.2 規格說明105
3.9.3 程序設計106
3.9.4 測試111
3.10 總結112
我們學到了什么112
擴展閱讀112
問題112
上機練習115
第4章 計算平臺116
4.1 引言116
4.2 基本的計算平臺116
4.2.1 平臺硬件組件116
4.2.2 平臺軟件組件118
4.3 CPU總線119
4.3.1 總線結構和協議119
4.3.2 直接內存訪問124
4.3.3 系統總線配置125
4.4 存儲設備和系統127
4.5 基于計算平臺的系統設計129
4.5.1 示例平臺129
4.5.2 選擇平臺129
4.5.3 知識產權131
4.5.4 開發環境132
4.5.5 看門狗定時器132
4.5.6 調試技術133
4.5.7 調試中的困難和挑戰135
4.6 消費類電子設備的體系結構136
4.6.1 消費類電子設備的用例和需求136
4.6.2 文件系統137
4.7 平臺級性能分析138
4.8 平臺級電源管理141
4.9 設計示例:鬧鐘142
4.9.1 需求142
4.9.2 規格說明143
4.9.3 系統體系結構146
4.9.4 組件設計和測試147
4.9.5 系統集成和測試147
4.10 設計示例:音頻播放器147
4.10.1 工作原理和需求147
4.10.2 規格說明149
4.10.3 系統體系結構150
4.10.4 組件設計和測試151
4.10.5 系統集成和調試151
4.11 總結151
我們學到了什么151
擴展閱讀151
問題152
上機練習154
第5章 程序設計與分析155
5.1 引言155
5.2 嵌入式程序的組件155
5.2.1 狀態機155
5.2.2 循環緩沖區和面向流的程序設計157
5.2.3 隊列與生產者/消費者系統161
5.3 程序模型163
5.3.1 數據流圖163
5.3.2 控制/數據流圖164
5.4 匯編、鏈接和加載166
5.4.1 匯編器167
5.4.2 鏈接170
5.4.3 目標代碼設計171
5.5 編譯技術172
5.5.1 編譯過程172
5.5.2 基本編譯方法173
5.5.3 編譯器優化方法179
5.6 程序級性能分析185
5.6.1 程序性能分析186
5.6.2 測量驅動的性能分析190
5.7 軟件性能優化193
5.7.1 循環的基本優化193
5.7.2 針對高速緩存的優化194
5.7.3 性能優化策略196
5.8 程序級的能量和功率分析及優化197
5.9 程序長度的分析和優化199
5.10 程序驗證和測試200
5.10.1 白盒測試201
5.10.2 黑盒測試205
5.10.3 功能性測試206
5.11 防危性與安全性207
5.12 設計示例:軟件調制解調器207
5.12.1 工作原理和需求207
5.12.2 規格說明209
5.12.3 系統體系結構209
5.12.4 組件設計和測試210
5.12.5 系統集成和測試210
5.13 設計示例:數碼相機210
5.13.1 工作原理和需求210
5.13.2 規格說明214
5.13.3