內容簡介
《ARM嵌入式系統開發:軟體設計與最佳化》從軟體設計的角度,全面、系統地介紹了ARM處理器的基本體系結構和軟體設計與最佳化方法。內容包括:ARM處理器基礎;ARM/Thumb指令集;C語言與彙編語言程式的設計與最佳化;基本運算、操作的最佳化;基於ARM的DSP;異常與中斷處理;固件與嵌入式OS;cache與存儲器管理;ARMv6體系結構的特點等。全書內容完整,針對各種不同的ARM核心系統結構都有詳盡論述,並有大量的例子和原始碼。附錄給出了完整的ARMv4/v5/Thumb指令的功能、編碼、周期定時以及彙編參考。
作者簡介
Andrew N.Sloss於1992年獲得Herefordshire大學(英國)計算機科學學士學位,英國計算機協會認證註冊工程師(C.Eng,MBCS)。他已在計算機行業工作了16年,從1987年開始參與有關ARM處理器的研發,在ARM處理器上開發了眾多領域的套用項目,積累了豐富的經驗。他為Emerald出版集團(英國)設計了首個能夠在ARM2和ARM3處理器上運行的針對中文和埃及象形文字的編輯系統。他在ARM公司工作了6個多,2017年是ARM在美國加州Los Gatos的技術銷售工程師,負責為開發新產品的公司提供建議和支持。
媒體評論
書評
從事ARM嵌入式系統軟體開發的每一位工程師的桌上都應擺著這本書。對於初學者來說,它是一本詳盡、透徹的使用指南;對於ARM專家來說,它則是一本有益的參考書。從審閱本書的第一稿以來,我就一直在使用這本書,我願向任何希望從基於ARM的產品獲得最大收益的人推薦這本書。
在過去的10年間,ARM體系統結構已經成為世界上最流行的體系結構之一,從蜂窩電話到汽車制動系統,在這些產品中使用了超過20億片基於ARM的處理器。許多半導體廠商和產品設計公司組成了全球範圍的ARM開發者團體,包括軟體開發者、系統設計師和硬體設計師。就ARM系統和軟體開發來說,到2017年為止,還沒有其它任何一本書籍能夠真正滿足其需求,本書將填補這一空白。
本書涵蓋了ARM和Thumb指令集、Intel的XScale處理器,概括了ARM體系結構的不同版本之間的差異,示範了如何實現DSP算法,解釋了異常和中斷處理,描述了圍繞ARM核心的cache技術,以及最有效的存儲器管理技術。最後一章介紹了ARMv6體系結構的特徵和ARM未來的發展,以及對指令集所做的最新改進,這些改進增強了ARM體系結構的DSP和多媒體處理能務。
本收特色
·本書從系統和軟體我角度來描述了ARM核心,這是與其它書的顯著差別。
·作者結合了豐富的ARM軟體工程經驗和ARM開發者的需要的廣泛、透徹的知識。
·書中提供了許多實用的運行代碼範例,並作了詳盡的解釋,可以從出版商的網站下載: ·包含了一個簡單的嵌入式作業系統。
目錄
第1章 基於ARM的嵌入式系統
1.1 RISC設計思想
1.2 ARM設計思想
1.3 嵌入式系統的硬體
1.3.1 ARM匯流排技術
1.3.2 AMBA匯流排協定
1.3.3 存儲器
1.3.4 外設
1.4 嵌入式系統的軟體
1.4.1 初始化(啟動)代碼
1.4.2 作業系統
1.4.3 應用程式
1.5 總結
第2章 ARM處理器基礎
2.1 暫存器
2.2 當前程式狀態暫存器
2.2.1 處理器模式
2.2.2 分組暫存器
2.2.3 狀態和指令集
2.2.4 中斷禁止
2.2.5 條件標誌
2.2.6 條件執行
2.3 流水線
2.4 異常、中斷及向量表
2.5 核心擴展
2.5.1 cache和緊耦合存儲器
2.5.2 存儲管理
2.5.3 協處理器
2.6 體系結構的不同版本
2.6.1 命名規則
2.6.2 體系結構的發展
2.7 ARM處理器系列
2.7.1 ARM7系列
2.7.2 ARM9系列
2.7.3 ARM10系列
2.7.4 ARM11系列
2.7.5 專用處理器
2.8 總結
第3章 ARM指令集
3.1 數據處理指令
3.1.1 MOVE指令
3.1.2 桶形移位器
3.1.3 算術指令
3.1.4 算術指令使用桶形移位器
3.1.5 邏輯指令
3.1.6 比較指令
3.1.7 乘法指令
3.2 分支指令
3.3 load?store指令
3.3.1 單暫存器傳送指令
3.3.2 單暫存器load?store指令的定址方式
3.3.3 多暫存器傳送指令
3.3.4 交換指令
3.4 軟體中斷指令
3.5 程式狀態暫存器指令
3.5.1 協處理器指令
3.5.2 協處理器15(CP15)指令語法
3.6 常量的裝載
3.7 ARMv5E擴展
3.7.1 零計數指令
3.7.2 飽和算術指令
3.7.3 ARMv5E乘法指令
3.8 條件執行
3.9 總結
第4章 Thumb指令集
4.1 Thumb暫存器的使用
4.2 ARM-Thumb互動
4.3 其它分支指令
4.4 數據處理指令
4.5 單暫存器load-store指令
4.6 多暫存器load-store指令
4.7 堆疊指令
4.8 軟體中斷指令
4.9 總結
第5章 高效的C編程
5.1 C編譯器及其最佳化概述
5.2 基本的C數據類型
5.2.1 局部變數類型
5.2.2 函式參數類型
5.2.3 有符號數與無符號數
5.3 C循環結構
5.3.1 固定次數的循環
5.3.2 不定次數的循環
5.3.3 循環展開
5.4 暫存器分配
5.5 函式調用
5.6 指針別名
5.7 結構體安排
5.8 位域
5.9 邊界不對齊數據和位元組排列方式(大/小端)
5.10 除法
5.10.1 帶餘數的無符號重複除法
5.10.2 把除轉換為乘
5.10.3 除數是常數的無符號除法
5.10.4 除數是常數的有符號除法
5.11 浮點運算
5.12 內聯函式和內嵌彙編
5.13 移植問題
5.14 總結
第6章 ARM彙編與最佳化
6.1 編寫彙編代碼
6.2 性能分析和周期計數
6.3 指令調整
6.4 暫存器分配
6.4.1 分配變數給暫存器
6.4.2 使用超過14個的局部變數
6.4.3 最大限度地使用暫存器
6.5 條件執行
6.6 循環結構
6.6.1 減計數循環
6.6.2 展開計數循環
6.6.3 多層嵌套循環
6.6.4 其它計數循環
6.7 位操作
6.7.1 固定寬度的位域打包和解包
6.7.2 可變寬度編碼的位流打包
6.7.3 可變寬度編碼的位流解包
6.8 高效的switch
6.8.1 在範圍0≤x<N的switch
6.8.2 基於通用變數x的switch
6.9 邊界不對齊數據的處理
6.10 總結
第7章 基本運算最佳化
7.1 雙精度整數乘法
7.1.1 長整型乘法
7.1.2 128位結果的無符號64位乘法
7.1.3 128位結果的有符號64位整數乘法
7.2 整數規格化和前導0計數
7.2.1 ARMv5及以上體系結構的整數規格化
7.2.2 在ARMv4體系結構上的規格化
7.2.3 後綴0計數
7.3 除法
7.3.1 通過試探減法實現無符號數除法
7.3.2 無符號整數的NewtonRaphson除法
7.3.3 無符號小數NewtonRaphson除法
7.3.4 有符號數除法
7.4 平方根
7.4.1 通過試探減法計算平方根
7.4.2 使用NewtonRaphson疊代計算平方根
7.5 超越函式:log,exp,sin,cos
7.5.1 以2為底的對數運算
7.5.2 2的乘冪
7.5.3 三角函式
7.6 位元組順序反轉和位操作
7.6.1 位元組順序反轉
7.6.2 位變換
7.6.3‘1’位計數
7.7 飽和及捨入運算
7.7.1 飽和32位數到16位
7.7.2 飽和左移
7.7.3 捨入右移
7.7.4 飽和的32位加減法
7.7.5 飽和絕對值
7.8 隨機數產生
7.9 總結
第8章 數位訊號處理
8.1 表示一個數位訊號
8.1.1 選擇一種表示方法
8.1.2 操作以定點格式存儲的值
8.1.3 定點信號的加法和減法
8.1.4 定點信號的乘法
8.1.5 定點信號的除法
8.1.6 定點信號的平方根
8.1.7 小結:數位訊號的表示
8.2 基於ARM的DSP介紹
8.2.1 ARM7TDMI的DSP
8.2.2 ARM9TDMI的DSP
8.2.3 StrongARM的DSP
8.2.4 ARM9E的DSP
8.2.5 ARM10E的DSP
8.2.6 Intel Xscale的DSP
8.3 FIR濾波器
8.4 IIR濾波
8.5 離散傅立葉變換
8.6 總結
第9章 異常和中斷處理
9.1 異常處理
9.1.1 ARM處理器模式及異常
9.1.2 向量表
9.1.3 異常優先權
9.1.4 連結暫存器偏移
9.2 中斷
9.2.1 分配中斷
9.2.2 中斷延遲
9.2.3 IRQ與FIQ異常
9.2.4 基本的中斷堆疊設計與實現
9.3 中斷處理方法
9.3.1 非嵌套中斷處理
9.3.2 嵌套中斷處理
9.3.3 可重入中斷處理
9.3.4 優先權簡單中斷處理
9.3.5 優先權標準中斷處理
9.3.6 優先權直接中斷處理
9.3.7 優先權分組中斷處理
9.3.8 基於VIC PL190的中斷服務例程
9.4 總結
第10章 固件
10.1 固件和引導裝載程式
10.1.1 ARM Firmware Suite
10.1.2 Red Hat Redboot
10.2 例子:Sandstone
10.2.1 Sandstone的目錄結構
10.2.2 Sandstone的代碼結構
10.3 總結
第11章 嵌入式作業系統
11.1 基本模組
11.2 實例:簡單小型作業系統SLOS
11.2.1 SLOS目錄結構
11.2.2 初始化
11.2.3 存儲模型
11.2.4 中斷和異常處理
11.2.5 調度程式
11.2.6 上下文切換
11.2.7 設備驅動程式框架
11.3 總結
第12章 高速緩衝存儲器cache
12.1 存儲層次和cache
12.2 cache結構
12.2.1 cache存儲器的基本結構
12.2.2 cache控制器的基本操作
12.2.3 cache與主存的關係
12.2.4 組相聯
12.2.5 寫緩衝器
12.2.6 cache效率的衡量
12.3 cache策略
12.3.1 寫策略——直寫法或回寫法
12.3.2 cache行替換策略
12.3.3 cache失效時的分配策略
12.4 協處理器15與cache
12.5 清除和清理cache
12.5.1 清除cache
12.5.2 清理cache
12.5.3 清理D?cache
12.5.4 使用路和組索引定址清理D-cache
12.5.5 使用test-clean命令清理D-cache
12.5.6 在Intel XScale SA110和Intel StrongARM核心中清理D-cache
12.5.7 清理和清除部分cache
12.6 cache鎖定
12.6.1 在cache中鎖定代碼和數據
12.6.2 通過增加路索引來鎖定cache
12.6.3 使用鎖定位鎖定cache
12.6.4 在Intel XScale SA110中鎖定cache行
12.7 cache與軟體性能
12.8 總結
第13章 存儲器保護單元MPU
13.1 受保護的區域
13.1.1 重疊區域
13.1.2 背景區域
13.2 初始化MPU,cache和寫緩衝器
13.2.1 定義區域的大小和位置
13.2.2 訪問許可權
13.2.3 設定區域的cache和寫緩衝器屬性
13.2.4 使能區域和MPU
13.3 MPU系統示例
13.3.1 系統需求
13.3.2 使用存儲器映射分配區域
13.3.3 初始化MPU
13.3.4 初始化和配置區域
13.3.5 完成初始化MPU
13.3.6 受保護系統的上下文切換
13.3.7 mpuSLOS
13.4 總結
第14章 存儲管理單元
14.1 從MPU到MMU
14.2 虛存如何工作
14.2.1 使用頁定義區域
14.2.2 多任務和MMU
14.2.3 虛存系統的存儲器組織
14.3 ARM MMU的詳情
14.4 頁表
14.4.1 一級頁表項
14.4.2 L1轉換表基地址
14.4.3 二級頁表項
14.4.4 為嵌入式系統選擇合適的頁大小
14.5 轉換旁路緩衝器
14.5.1 單步頁表搜尋
14.5.2 2步頁表搜尋
14.5.3 TLB操作
14.5.4 TLB鎖定
14.6 域和存儲器訪問許可權
14.7 cache和寫緩衝器
14.8 協處理器CP15和MMU配置
14.9 快速上下文切換擴展
14.9.1 FCSE如何使用頁表和域
14.9.2 使用FCSE的提示
14.10 示例:一個簡單的虛擬存儲系統
14.10.1 第1步:定義固定的系統軟體區域
14.10.2 第2步:為每個任務定義虛存映射
14.10.3 第3步:在物理存儲器中定位區域
14.10.4 第4步:定義和定位頁表
14.10.5 第5步:定義頁表和區域數據結構
14.10.6 第6步:初始化MMU、Cache和寫緩衝器
14.10.7 第7步:建立上下文切換程式
14.11 MMUSLOS示例
14.12 總結
第15章 ARM體系結構的發展
15.1 ARMv6對高級DSP和SIMD的支持
15.1.1 SIMD算法操作
15.1.2 打包指令
15.1.3 複數運算支持
15.1.4 飽和指令
15.1.5 絕對差值求和指令
15.1.6 雙16位乘法指令
15.1.7 高位字乘法
15.1.8 密碼算法乘法擴展
15.2 ARMv6增加的系統和多處理器支持
15.2.1 混合大小端支持
15.2.2 異常處理
15.2.3 多處理同步原語(Multipro?cessing Synchronization Primitives)
15.3 ARMv6的實現
15.4 ARMv6之後的未來技術
15.4.1 TrustZone
15.4.2 Thumb-2
15.5 總結
附錄A ARM和Thumb彙編指令
A.1 如何使用這篇附錄
A.2 語法
A.2.1 可選表達式
A.2.2 暫存器
A.2.3 立即數
A.2.4 條件和標誌
A.2.5 移位操作
A.3 按字母順序列出ARM和Thumb指令
A.4 ARM彙編速查
A.4.1 ARM彙編變數
A.4.2 ARM彙編標註
A.4.3 ARM彙編表達式
A.4.4 ARM彙編保留字
A.5 GNU彙編快速查詢
附錄 BARM和Thumb指令編碼
B.1 ARM指令集編碼
B.2 Thumb指令集編碼
B.3 程式狀態暫存器
附錄C 處理器與體系結構
C.1 ARM命名規則
C.2 核心與體系結構
附錄D 指令周期定時
D.1指令周期定時表的使用
D.2 ARM7TDMI指令周期定時
D.3 ARM9TDMI指令周期定時
D.4 StrongARM1 指令周期定時
D.5 ARM9E指令周期定時
D.6 ARM10E指令周期定時
D.7 Intel XScale指令周期定時
D.8 ARM11指令周期定時
附錄E 建議的參考讀物
E.1 ARM參考
E.2 算法參考
E.3 存儲器管理與cache體系結構(硬體綜述與參考)
E.4 作業系統參考