關于我們
書單推薦
新書推薦
|
ARM Cortex-M0與Cortex-M0+權威指南
本書共分為23章, 內容包括: 概論、技術綜述、嵌入式軟件開發(fā)介紹、架構、指令集、指令使用示例、存儲器系統(tǒng)、異常和中斷、系統(tǒng)控制和低功耗特性、操作系統(tǒng)支持特性、錯誤處理、存儲器保護單元、調試特性, 等等。
本書是系統(tǒng)論述ARM Cortex-M0與Cortex-M0 處理器及其編程的圖書,作者Joseph Yiu是英國ARM公司的主管工程師,著有久負盛名的暢銷圖書《ARM Cortex-M3與Cortex-M4權威指南(第3版)》(清華大學出版社)。本書適合的讀者對象包括:嵌入式產品設計工程師、嵌入式軟件開發(fā)人員、電子愛好者以及學習嵌入式系統(tǒng)課程(ARM Cortex-M0與Cortex-M0 )的高年級本科生及研究生等。作者提供了詳實的配書工程源文件(見封面下載地址)。l 深度剖析系統(tǒng)模型、指令集以及中斷處理,以利于理解ARM Cortex-M0與Cortex-M0 的工作方式;l 綜合運用匯編語言和C語言實現的豐富的ARM Cortex-M0與Cortex-M0 編程案例,有助于快速動手實踐;l 系統(tǒng)論述軟件的開發(fā)流程,并以常用軟件開發(fā)工具為例,介紹程序設計的實例及如何定位程序代碼問題和軟件移植等方面的知識;l 全面揭秘從其他架構處理器進行軟件移植的方法,包括ARM7TDMI、ARM Cortex-M3以及8051微控制器移植的實例;l 深入解析Cortex-M0和Cortex-M0 處理器架構特性的差異(如非特權執(zhí)行等級、向量表重定位);l 細致分析了Cortex-M0 處理器的優(yōu)勢,比如新的單周期I/O接口、更優(yōu)的能耗效率、更高的性能以及微跟蹤緩沖(MTB)特性;l 詳盡介紹了軟件開發(fā)工具方面的新內容,如Keil MDK版本5、IAR Embedded Workbench for ARM、ARM gcc、CooCox及mbed使用示例;l 提供了基于CMSIS-RTOS API的Keil RTX實時操作系統(tǒng)的新實例;l 提供了Cortex-M0和Cortex-M0 微控制器使用實例,包括Freescale Freedom板(FRDM-KL25Z)、STM32F0 Discovery、STM32L0 Discovery和NXP LPC1114(DIP封裝)面包板等。
Joseph Yiu 英國ARM公司資深專家,12年半導體行業(yè)從業(yè)經歷(在ARM公司工作15年以上)。曾參與多個處理器設計項目,包括ARM Cortex-M3和Cortex-M0,并參與了多種ARM IP(知識產權)產品的開發(fā)。Joseph Yiu為微控制器系統(tǒng)級設計專家,并涉獵了諸多相關領域,包括ARM Cortex-M系列微控制器軟件開發(fā)、微控制器市場以及片上系統(tǒng)設計技術。其他代表性著作有《The Definitive Guide to the ARM Cortex-M3, 2nd Edition》、《The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition》(中文翻譯版均由清華大學出版社出版發(fā)行)。
目錄 譯者序1
推薦序3
前言5
致謝7
術語和縮寫9
本書約定13
第1章概論
1.1歡迎來到嵌入式處理器的世界
1.1.1處理器有什么作用
1.1.2處理器、CPU、內核、微控制器及其命名
1.1.3嵌入式系統(tǒng)的編程
1.1.4學習微控制器需要了解什么
1.2理解處理器的類型
1.2.1處理器為什么有很多種類
1.2.2ARM處理器家族概述
1.2.3模糊邊界
1.2.4ARM CortexM處理器系列
1.2.5ARM CortexM0和CortexM0 處理器簡介
1.2.6從CortexM0處理器到CortexM0 處理器
1.2.7CortexM0和CortexM0 處理器的應用
1.3微控制器內部有什么
1.3.1微控制器內常見部件
1.3.2微控制器應用的處理器的特點
1.3.3硅片技術
1.4ARM介紹
1.4.1ARM生產芯片嗎
1.4.2ARM的產品是什么
1.4.3芯片廠商為什么不設計自己的處理器
1.4.4ARM生態(tài)系統(tǒng)有什么特殊之處
1.5ARM處理器和ARM微控制器方面的資源
1.5.1ARM主頁
1.5.2微控制器廠商提供的資源
1.5.3工具廠商提供的資源
1.5.4其他資源
第2章技術綜述
2.1CortexM0和CortexM0 處理器
2.2模塊框圖
2.3典型系統(tǒng)
2.4什么是ARMv6M架構
2.5CortexM處理器間的軟件可移植性
2.6ARM CortexM0和CortexM0 處理器的優(yōu)勢
2.6.1低功耗和能耗效率
2.6.2高代碼密度
2.6.3低中斷等待和確定行為
2.6.4易于使用
2.6.5系統(tǒng)級特性和OS支持特性
2.6.6調試特性
2.6.7可配置性、靈活性和可擴展性
2.6.8軟件可移植性和可重用性
2.6.9產品選擇的多樣性
2.6.10生態(tài)系統(tǒng)支持
2.7CortexM0和CortexM0 處理器的應用
2.7.1微控制器
2.7.2傳感器
2.7.3傳感器集線器
2.7.4電源管理IC
2.7.5ASSP和ASIC
2.7.6片上系統(tǒng)中的子系統(tǒng)
2.8為什么要在微控制器應用中使用32位處理器
2.8.1性能
2.8.2代碼密度
2.8.3ARM架構的其他優(yōu)勢
2.8.4軟件可重用性
第3章嵌入式軟件開發(fā)介紹
3.1歡迎進入嵌入式系統(tǒng)編程
3.2基本概念
3.2.1復位
3.2.2時鐘
3.2.3電壓
3.2.4輸入和輸出
3.2.5嵌入式軟件程序流程介紹
3.2.6編程語言選擇
3.3ARM CortexM編程介紹
3.3.1C編程數據類型
3.3.2用C訪問外設
3.3.3程序映像內有什么
3.3.4SRAM中的數據
3.3.5微控制器啟動時會發(fā)生什么
3.4軟件開發(fā)流程
3.5Cortex微控制器軟件接口標準
3.5.1CMSIS介紹
3.5.2CMSISCORE所做的標準化
3.5.3CMSISCORE的組織
3.5.4使用CMSISCORE
3.5.5CMSIS的優(yōu)勢
3.6軟件開發(fā)的其他信息
第4章架構
4.1ARMv6M架構綜述
4.1.1架構的含義
4.1.2ARMv6M架構背景
4.2編程模型
4.2.1操作模式和狀態(tài)
4.2.2寄存器和特殊寄存器
4.2.3APSR的行為
4.3存儲器系統(tǒng)
4.3.1概述
4.3.2單周期I/O接口
4.3.3存儲器保護單元
4.4棧存儲操作
4.5異常和中斷
4.6嵌套向量中斷控制器
4.6.1靈活的中斷管理
4.6.2嵌套中斷支持
4.6.3向量異常入口
4.6.4中斷屏蔽
4.7系統(tǒng)控制塊
4.8調試系統(tǒng)
4.9程序映像和啟動流程
第5章指令集
5.1指令集是什么
5.2ARM和Thumb指令集背景
5.3匯編基礎
5.3.1匯編語法一覽
5.3.2后綴的使用
5.3.3統(tǒng)一匯編語言(UAL)
5.4指令列表
5.4.1處理器內傳送數據
5.4.2存儲器訪問
5.4.3棧存儲訪問
5.4.4算術運算
5.4.5邏輯運算
5.4.6移位和循環(huán)移位運算
5.4.7展開和順序反轉運算
5.4.8程序流控制
5.4.9存儲器屏障指令
5.4.10異常相關指令
5.4.11休眠模式特性相關指令
5.4.12其他指令
5.5偽指令
第6章指令使用示例
6.1概述
6.2程序控制
6.2.1ifthenelse
6.2.2循環(huán)
6.2.3跳轉指令
6.2.4跳轉指令的典型用法
6.2.5函數調用和函數返回
6.2.6跳轉表
6.3數據訪問
6.3.1簡單數據訪問
6.3.2使用存儲器訪問指令的例子
6.4數據類型轉換
6.4.1數據大小的轉換
6.4.2大小端轉換
6.5數據處理
6.5.164位/128位加法
6.5.264位/128位減法
6.5.3整數除法
6.5.4無符號整數開方根
6.5.5位和位域計算
第7章存儲器系統(tǒng)
7.1微控制器中的存儲器系統(tǒng)
7.2CortexM0和CortexM0 處理器中的總線系統(tǒng)
7.3存儲器映射
7.3.1概述
7.3.2系統(tǒng)級設計
7.4程序存儲器、Bootloader和存儲器重映射
7.4.1程序存儲器和Bootloader
7.4.2存儲器映射
7.5數據存儲器
7.6小端和大端支持
7.7數據類型
7.8存儲器屬性和存儲器訪問權限
7.9硬件行為對編程的影響
7.9.1數據對齊
7.9.2訪問非法地址
7.9.3多加載和存儲指令的使用
7.9.4等待狀態(tài)
第8章異常和中斷
8.1異常和中斷的含義
8.2CortexM0和CortexM0 處理器內的異常類型
8.2.1概述
8.2.2不可屏蔽中斷
8.2.3HardFault
8.2.4SVC
8.2.5可掛起的系統(tǒng)調用
8.2.6系統(tǒng)節(jié)拍
8.2.7中斷
8.3NVIC簡介
8.4異常優(yōu)先級定義
8.5向量表
8.6異常流程概述
8.6.1接受異常
8.6.2壓棧和出棧
8.6.3異常返回指令
8.6.4末尾連鎖
8.6.5延遲到達
8.7EXC_RETURN
8.8用于中斷控制的NVIC控制寄存器
8.8.1NVIC控制寄存器概述
8.8.2中斷使能和清除使能
8.8.3中斷掛起和清除掛起
8.8.4中斷優(yōu)先級
8.9異常屏蔽寄存器(PRIMASK)
8.10中斷輸入和掛起行為
8.10.1簡單中斷處理
8.10.2簡單的脈沖中斷處理
8.10.3中斷掛起狀態(tài)在得到服務前取消
8.10.4外設在確認中斷請求時清除掛起狀態(tài)
8.10.5ISR完成后中斷請求保持為高
8.10.6進入ISR前產生了多個中斷請求脈沖
8.10.7在ISR執(zhí)行期間產生了中斷請求脈沖
8.10.8已禁止中斷的中斷請求確認
8.11異常入口流程
8.11.1壓棧
8.11.2取出向量并更新PC
8.11.3更新寄存器
8.12異常退出流程
8.12.1寄存器出棧
8.12.2從返回地址取指并執(zhí)行
8.13中斷等待
第9章系統(tǒng)控制和低功耗特性
9.1系統(tǒng)控制寄存器簡介
9.2SCB中的寄存器
9.2.1SCB中的寄存器列表
9.2.2CPU ID寄存器
9.2.3用于系統(tǒng)異常管理的控制寄存器
9.2.4向量表偏移寄存器
9.2.5應用中斷和復位控制寄存器
9.2.6系統(tǒng)控制寄存器
9.2.7配置和控制寄存器
9.2.8系統(tǒng)處理控制和狀態(tài)寄存器
9.3使用自復位特性
9.4使用向量表重定位特性
9.5低功耗特性
9.5.1概述
9.5.2休眠模式
9.5.3等待事件和等待中斷
9.5.4喚醒條件
9.5.5退出時休眠特性
9.5.6喚醒中斷控制器
第10章操作系統(tǒng)支持特性
10.1支持OS的特性概述
10.2嵌入式系統(tǒng)的操作系統(tǒng)介紹
10.3SysTick定時器
10.3.1SysTick寄存器
10.3.2設置SysTick
10.3.3SysTick用于時間測量
10.3.4將SysTick用作單發(fā)定時器
10.4進程棧和PSP
10.5SVCall異常
10.6PendSV
10.7高級話題: 在編程中使用SVC和PendSV
10.7.1使用SVC異常
10.7.2使用PendSV異常
10.8高級話題: 實際的上下文切換
第11章錯誤處理
11.1錯誤異常概述
11.2錯誤是如何產生的
11.3分析錯誤
11.4意外切換至ARM狀態(tài)
11.5實際應用中的錯誤處理
11.6軟件開發(fā)期間的錯誤處理
11.7鎖定
11.7.1鎖定的原因
11.7.2鎖定期間發(fā)生了什么
11.8避免鎖定
11.9和ARMv7M架構中錯誤處理的對比
第12章存儲器保護單元
12.1MPU是什么
12.2MPU適用的情形
12.3技術介紹
12.4MPU寄存器
12.4.1MPU類型寄存器
12.4.2MPU控制寄存器
12.4.3MPU區(qū)域編號寄存器
12.4.4MPU區(qū)域基地址寄存器
12.4.5MPU區(qū)域基本屬性和大小寄存器
12.5設置MPU
12.6存儲器屏障和MPU配置
12.7使用子區(qū)域禁止
12.7.1允許高效的存儲器劃分
12.7.2減少所需的區(qū)域總數
12.8使用MPU時的注意事項
12.8.1程序代碼
12.8.2數據存儲器
12.9和CortexM3/M4/M7處理器的MPU間的差異
第13章調試特性
13.1軟件開發(fā)和調試特性
13.2調試接口
13.2.1JTAG和串行線調試通信協(xié)議
13.2.2CortexM處理器和CoreSight調試架構
13.2.3調試接口的設計考慮
13.3調試特性一覽
13.4調試系統(tǒng)
13.5暫停模式和調試事件
13.6利用MTB實現指令跟蹤
第14章Keil微控制器開發(fā)套件入門
14.1Keil微控制器開發(fā)套件介紹
14.1.1概述
14.1.2工具
14.1.3Keil MDK的優(yōu)勢
14.1.4安裝
14.2典型的程序編譯流程
14.3硬件介紹
14.3.1Freescale Freedom開發(fā)板(FRDMKL25Z)
14.3.2STMicroelectronics STM32L0 Discovery
14.3.3STMicroelectronics STM32F0 Discovery
14.3.4NXP LPC1114FN28
14.4μVision IDE入門
14.4.1如何開始
14.4.2啟動Keil MDK
14.4.3Freescale FRDMKL25Z工程設置步驟
14.4.4STMicroelectronics STM32L0 Discovery工程設置步驟
14.4.5STMicroelectronice STM32F0 Discovery工程設置步驟
14.4.6NXP LPC1114FN28工程設置步驟
14.5使用IDE和調試器
14.6底層內容
14.6.1CMSIS文件
14.6.2時鐘設置
14.6.3棧和堆的設置
14.6.4編譯
14.7工程環(huán)境的優(yōu)化
14.7.1目標選項
14.7.2優(yōu)化選項
14.7.3運行時環(huán)境選項
14.7.4工程管理
14.8使用模擬器
14.9在SRAM中執(zhí)行程序
14.10使用MTB指令跟蹤
第15章IAR embedded workbench for ARM入門
15.1IAR embedded workbench for ARM概述
15.2典型的程序編譯流程
15.3創(chuàng)建簡單的blinky工程
15.4工程選項
15.5在IAR EWARM中使用MTB指令跟蹤
15.6提示和要點
第16章GCC入門
16.1GCC工具鏈
16.2關于本章中的例子
16.3典型開發(fā)流程
16.4創(chuàng)建簡單的Blinky工程
16.5命令行選項概述
16.6Flash編程
16.7在Keil MDKARM中使用ARM嵌入式處理器GNU工具
16.8在CooCox IDE中使用ARM嵌入式處理器GNU工具
16.8.1概述和設置
16.8.2創(chuàng)建新的工程
16.8.3使用IDE和調試器
第17章mbed入門
17.1什么是mbed
17.2mbed系統(tǒng)是怎么工作的
17.3mbed的優(yōu)勢
17.4設置FRDMKL25Z板和mbed賬號
17.4.1檢查mbed Web網頁
17.4.2注冊mbed賬號
17.4.3個人計算機的設置
17.5創(chuàng)建blinky程序
17.5.1只開關紅色LED的簡單版本
17.5.2利用脈寬調試控制LED
17.6支持的常用外設對象
17.7使用printf
17.8應用實例: 火車模型控制器
17.9中斷
17.10要點和提示
第18章編程實例
18.1利用通用異步收發(fā)器來產生輸出
18.1.1通用異步收發(fā)器通信概述
18.1.2微控制器上的UART配置概述
18.1.3配置FRDMKL25Z中的UART
18.1.4配置STM32L0 Discovery板中的UART
18.1.5配置STM32F0 Discovery板上的UART
18.1.6配置LPC1114FN28上的UART
18.2實現printf
18.2.1概述
18.2.2Keil MDK的重定向
18.2.3IAR EWARM的重定向
18.2.4GNU編譯器套件的重定向
18.2.5IAR EWARM的半主機
18.2.6CoIDE的半主機
18.3開發(fā)輸入和輸出函數
18.3.1為何要重新開發(fā)
18.3.2其他接口
18.3.3有關scanf的其他信息
18.4中斷編程實例
18.4.1中斷處理概述
18.4.2中斷控制函數概述
18.5應用實例: 火車模型用的另一個控制器
18.6CMSISCORE的不同版本
第19章超低功耗設計
19.1超低功耗使用示例
19.1.1概述
19.1.2進入休眠模式
19.1.3WFE與WFI
19.1.4利用退出時休眠特性
19.1.5利用掛起發(fā)送事件特性
19.1.6利用喚醒中斷控制器
19.1.7利用事件通信接口
19.2低功耗設計要求
19.3能量去哪里了
19.4開發(fā)低功耗應用
19.4.1低功耗設計概述
19.4.2降低功耗的各種方法
19.4.3選擇正確的方法
19.5調試考慮
19.5.1調試和低功耗
19.5.2調試和Flash編程的“安全模式”
19.5.3低電壓引腳和調試接口
19.6低電壓設備的檢測
19.6.1ULPBench的背景
19.6.2ULPBenchCP概述
19.7Freescale KL25Z低功耗特性使用示例
19.7.1目標
19.7.2測試設置
19.7.3KL25Z的低功耗模式
19.7.4時鐘設計
19.7.5測試設置
19.7.6測量結果
19.8LPC1114低功耗特性使用示例
19.8.1LPC1114FN28概述
19.8.2實驗1:使用12MHz內部和外部晶振
19.8.3實驗2:使用降頻1MHz和100kHz
19.8.4其他改進
19.8.5利用LPC1114的深度休眠
第20章嵌入式OS編程
20.1介紹
20.1.1背景
20.1.2嵌入式OS和RTOS
20.1.3為什么要使用嵌入式OS
20.1.4CMSISRTOS的作用
20.1.5關于Keil RTX Kernel
20.1.6在Keil MDK中構建一個簡單RTX實例
20.2RTX Kernel概述
20.2.1線程
20.2.2RTX配置
20.2.3深入研究第一個例子
20.2.4線程間通信概述
20.2.5信號事件通信
20.2.6互斥體(Mutex)
20.2.7信號量
20.2.8消息隊列
20.2.9郵件隊列
20.2.10內存池管理特性
20.2.11通用等待函數和超時數值
20.2.12定時器特性
20.2.13給非特權線程增加SVC服務
20.3在應用中使用RTX
20.4調試RTX應用
20.5疑難解答
20.5.1棧大小需求
20.5.2優(yōu)先級
20.5.3利用OS錯誤報告
20.5.4OS特性配置
20.5.5其他問題
20.6其他要點和提示
20.6.1修改RTX_Config_CM.c
20.6.2線程優(yōu)先級
20.6.3縮短等待時間
20.6.4其他信息
第21章混合語言工程
21.1匯編在工程開發(fā)中的應用
21.2匯編編程實踐和AAPCS
21.3匯編函數概述
21.3.1ARM工具鏈
21.3.2GCC工具鏈
21.3.3IAR Embedded Workbench for ARM
21.3.4匯編函數結構
21.4內聯匯編
21.4.1ARM工具鏈
21.4.2GNU編譯器組件
21.5嵌入匯編特性(ARM工具鏈)
21.6混合語言工程
21.6.1概述
21.6.2在匯編代碼中調用C函數
21.6.3在C代碼中調用匯編函數
21.7在Keil MDKARM中創(chuàng)建匯編工程
21.7.1一個簡單的工程
21.7.2Hello World
21.7.3其他文本輸出函數
21.8用于中斷控制的通用匯編代碼
21.8.1使能和禁止中斷
21.8.2設置和清除中斷掛起狀態(tài)
21.8.3設置中斷優(yōu)先級
21.9匯編語言的其他編程技巧
21.9.1為變量分配數據空間
21.9.2復雜跳轉處理
21.10使用特殊指令
21.10.1CMSISCORE
21.10.2習語識別
第22章軟件移植
22.1概述
22.2從8位/16位微控制器向ARMCortexM移植軟件
22.2.1通用改動
22.2.2存儲器需求
22.2.38位或16位微控制器不再適用的優(yōu)化
22.2.4實例: 從8051移植到ARM CortexM0/CortexM0
22.3ARM7TDMI和CortexM0/M0 處理器間的差異
22.3.1經典ARM處理器概述
22.3.2操作模式
22.3.3寄存器
22.3.4指令集
22.3.5中斷
22.4從ARM7TDMI向CortexM0/CortexM0 處理器移植軟件
22.4.1啟動代碼和向量表
22.4.2中斷
22.4.3C程序代碼
22.4.4匯編代碼
22.4.5原子訪問
22.4.6優(yōu)化
22.5各種CortexM處理器間的差異
22.5.1概述
22.5.2系統(tǒng)模型
22.5.3NVIC和異常
22.5.4指令集
22.5.5系統(tǒng)級特性
22.5.6調試和跟蹤特性
22.6在CortexM處理器間移植時的通用改動
22.7CortexM0/M0 和CortexM1間的軟件移植
22.8CortexM0/M0 和CortexM3間的軟件移植
22.9CortexM0/M0 和CortexM4/M7間的軟件移植
第23章高級話題
23.1C語言實現的位數據處理
23.2C實現的啟動代碼
23.3棧溢出檢測
23.3.1什么是棧溢出
23.3.2工具鏈的棧分析
23.3.3棧的測試分析
23.3.4利用存儲器保護單元對棧進行限制
23.3.5OS上下文切換期間的棧檢測
23.4中斷服務程序重入
23.5信號量設計
23.6存儲器順序和存儲器屏障
附錄A指令集快速參考
附錄B異常類型快速參考
B.1異常類型
B.2異常壓棧后棧的內容
附錄CCMSISCORE快速參考
C.1數據類型
C.2異常枚舉
C.3嵌套向量中斷控制器訪問函數
C.4系統(tǒng)和SysTick操作函數
C.5內核寄存器操作函數
C.6特殊指令操作函數
附錄DNVIC、SCB和SysTick寄存器快速參考
D.1NVIC寄存器一覽
D.2中斷設置使能寄存器(NVICISER)
D.3中斷清除使能寄存器(NVICICER)
D.4中斷設置掛起寄存器(NVICISPR)
D.5中斷清除掛起寄存器(NVICICPR)
D.6中斷優(yōu)先級寄存器(NVICIRQ[0]到NVICIRQ[7])
D.7SCB寄存器一覽
D.8CPU ID寄存器(SCBCPUID)
D.9中斷控制狀態(tài)寄存器(SCBICSR)
D.10向量表偏移寄存器(SCBVTOR,0xE000ED08)
D.11應用中斷和控制狀態(tài)寄存器(SCBAIRCR)
D.12系統(tǒng)控制寄存器(SCBSCR)
D.13配置控制寄存器(SCBCCR)
D.14系統(tǒng)處理優(yōu)先級寄存器2(SCBSHR[0])
D.15系統(tǒng)處理優(yōu)先級寄存器3(SCBSHR[1])
D.16系統(tǒng)處理控制和狀態(tài)寄存器
D.17SysTick寄存器一覽
D.18SysTick控制和狀態(tài)寄存器(SysTickCTRL)
D.19SysTick重裝載值寄存器(SysTickLOAD)
D.20SysTick當前值寄存器(SysTickVAL)
D.21SysTick校準值寄存器(SysTickCALIB)
附錄E調試寄存器快速參考
E.1內核調試寄存器
E.2斷點單元
E.3數據監(jiān)視點單元
E.4ROM表寄存器
E.5微跟蹤緩沖
E.6POSITION寄存器
E.7MASTER寄存器
E.8FLOW寄存器
E.9BASE寄存器
E.10包格式
E.11實例
附錄F調試接頭分配
F.110針Cortex調試連接頭
F.220針Cortex調試 ETM接頭
F.3老式的20針I(yè)DC接頭排列
附錄G疑難解答
G.1程序不運行/啟動
G.1.1向量表丟失或位置錯誤
G.1.2使用了錯誤的C啟動代碼
G.1.3復位向量中的值錯誤
G.1.4程序映像沒有被正確地編程到Flash中
G.1.5錯誤的工具鏈配置
G.1.6錯誤的棧指針初始值
G.1.7錯誤的大小端設置
G.2程序啟動,卻進入了硬件錯誤
G.2.1非法存儲器訪問
G.2.2非對齊數據訪問
G.2.3存儲器訪問權限(只限于CortexM0 處理器)
G.2.4從總線返回錯誤
G.2.5異常處理中的棧被破壞
G.2.6程序在某些C函數中崩潰
G.2.7意外地試圖切換至ARM狀態(tài)
G.2.8在錯誤的優(yōu)先級上執(zhí)行SVC
G.3休眠問題
G.3.1執(zhí)行WFE不進入休眠
G.3.2退出時休眠過早地引起休眠
G.3.3中斷已經在掛起態(tài)時SEVONPEND不工作
G.3.4由于休眠模式可能禁止了某些時鐘,處理器無法喚醒
G.3.5競態(tài)
G.4中斷問題
G.4.1執(zhí)行了多余的中斷處理
G.4.2執(zhí)行了多余的SysTick處理
G.4.3在中斷處理中禁止中斷
G.4.4錯誤的中斷返回指令
G.4.5異常優(yōu)先級設置的數值
G.5其他問題
G.5.1錯誤的SVC參數傳遞方法
G.5.2調試連接受到I/O設置或低功耗模式的影響
G.5.3調試協(xié)議選擇/配置
G.5.4使用事件輸出作為脈沖I/O
G.5.5向量表和代碼位置的設備實際需求
G.6其他可能的編程陷阱
G.6.1中斷優(yōu)先級
G.6.2同時使用主棧和進程棧時的棧溢出
G.6.3數據對齊
G.6.4丟失volatile關鍵字
G.6.5函數指針
G.6.6讀修改寫
G.6.7中斷禁止
G.6.8SystemInit函數
G.6.9斷點和內聯
附錄HARM CortexM0微控制器面包板工程
H.1背景
H.2硬件設計
附錄I參考文檔
你還可能感興趣
我要評論
|