ARM Cortex-M0与Cortex-M0+指南(第2版) Jsoseph Yiu,吴

ARM Cortex-M0与Cortex-M0+指南(第2版) Jsoseph Yiu,吴 pdf epub mobi txt 电子书 下载 2025

Jsoseph Yiu,吴常玉 张淑 吴卫东 著
图书标签:
  • ARM
  • Cortex-M0
  • Cortex-M0+
  • 嵌入式系统
  • 单片机
  • C语言
  • 编程
  • 指南
  • 开发
  • 微控制器
  • Jsoseph Yiu
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
店铺: 读者科技图书专营店
出版社: 清华大学出版社
ISBN:9787302473312
商品编码:29701043010
包装:平装-胶订
出版时间:2018-01-01

具体描述

基本信息

书名:ARM Cortex-M0与Cortex-M0+指南(第2版)

定价:128.00元

作者:Jsoseph Yiu,吴常玉 张淑 吴卫东

出版社:清华大学出版社

出版日期:2018-01-01

ISBN:9787302473312

字数:

页码:

版次:1

装帧:平装-胶订

开本:16开

商品重量:0.4kg

编辑推荐


本书是系统论述ARM Cortex-M0与Cortex-M0 处理器及其编程的图书,作者Joseph Yiu是英国ARM公司的主管工程师,著有久负盛名的畅销图书《ARM Cortex-M3与Cortex-M4指南(第3版)》(清华大学出版社)。本书适合的读者对象包括:嵌入式产品设计工程师、嵌入式软件开发人员、电子爱好者以及学习嵌入式系统课程(ARM Cortex-M0与Cortex-M0 )的高年级本科生及研究生等。作者提供了详实的配书工程源文件(见封面下载地址)。l 深度剖析系统模型、指令集以及中断处理,以利于理解ARM Cortex-M0与Cortex-M0 的工作方式;l 综合运用汇编语言和C语言实现的丰富的ARM Cortex-M0与Cortex-M0 编程案例,有助于快速动手实践;l 系统论述软件的开发流程,并以常用软件开发工具为例,介绍程序设计的实例及如何定位程序代码问题和软件移植等方面的知识;l 全面揭秘从其他架构处理器进行软件移植的方法,包括ARM7TDMI、ARM Cortex-M3以及8051微控制器移植的实例;l 深入解析Cortex-M0和Cortex-M0 处理器架构特性的差异(如非特权执行等级、向量表重定位);l 细致分析了Cortex-M0 处理器的优势,比如新的单周期I/O接口、更优的能耗效率、更高的性能以及微跟踪缓冲(MTB)特性;l 详尽介绍了软件开发工具方面的新内容,如Keil MDK版本5、IAR Embedded Workbench for ARM、ARM gcc、CooCox及mbed使用示例;l 提供了基于CMSIS-RTOS API的Keil RTX实时操作系统的新实例;l 提供了Cortex-M0和Cortex-M0 微控制器使用实例,包括Freescale Freedom板(FRDM-KL25Z)、STM32F0 Discovery、STM32L0 Discovery和NXP LPC1114(DIP封装)面包板等。

内容提要


本书是ARM公司微控制器系统级设计专家Joseph Yiu的作品。本书全面系统论述Cortex-M0与Cortex-M0 的内核、体系结构、指令集、编译器、程序设计及软件移植。全书共23章,近700页。深度剖析系统模型、指令集以及中断处理,以利于理解ARM Cortex-M0与Cortex-M0 的工作方式;综合运用汇编语言和C语言实现的丰富的ARM Cortex-M0与Cortex-M0 编程案例,有助于快速动手实践;系统论述软件的开发流程,并以常用软件开发工具为例,介绍程序设计的实例及如何定位程序代码问题和软件移植等方面的知识;全面揭秘从其他架构处理器进行软件移植的方法,包括ARM7TDMI、ARM Cortex-M3以及8051微控制器移植的实例;深入解析Cortex-M0和Cortex-M0 处理器架构特性的差异(如非特权执行等级、向量表重定位);细致分析了Cortex-M0 处理器的优势,比如新的单周期I/O接口、更优的能耗效率、更高的性能以及微跟踪缓冲(MTB)特性;详尽介绍了软件开发工具方面的新内容,如Keil MDK版本5、IAR Embedded Workbench for ARM、ARM gcc、CooCox及mbed的实例。另外,为便于读者学习,全书提供了完整的案例源代码!

目录


目录

译者序1

推荐序3

前言5

致谢7

术语和缩写9

本书约定13

章概论

1.1欢迎来到嵌入式处理器的世界

1.1.1处理器有什么作用

1.1.2处理器、CPU、内核、微控制器及其命名

1.1.3嵌入式系统的编程

1.1.4学习微控制器需要了解什么

1.2理解处理器的类型

1.2.1处理器为什么有很多种类

1.2.2ARM处理器家族概述

1.2.3模糊边界

1.2.4ARM Cortex�睲处理器系列

1.2.5ARM Cortex�睲0和Cortex�睲0 处理器简介

1.2.6从Cortex�睲0处理器到Cortex�睲0 处理器

1.2.7Cortex�睲0和Cortex�睲0 处理器的应用

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生态系统有什么特殊之处

1.5ARM处理器和ARM微控制器方面的资源

1.5.1ARM主页

1.5.2微控制器厂商提供的资源

1.5.3工具厂商提供的资源

1.5.4其他资源

第2章技术综述

2.1Cortex�睲0和Cortex�睲0 处理器

2.2模块框图

2.3典型系统

2.4什么是ARMv6�睲架构

2.5Cortex�睲处理器间的软件可移植性

2.6ARM Cortex�睲0和Cortex�睲0 处理器的优势

2.6.1低功耗和能耗效率

2.6.2高代码密度

2.6.3低中断等待和确定行为

2.6.4易于使用

2.6.5系统级特性和OS支持特性

2.6.6调试特性

2.6.7可配置性、灵活性和可扩展性

2.6.8软件可移植性和可重用性

2.6.9产品选择的多样性

2.6.10生态系统支持

2.7Cortex�睲0和Cortex�睲0 处理器的应用

2.7.1微控制器

2.7.2传感器

2.7.3传感器集线器

2.7.4电源管理IC

2.7.5ASSP和ASIC

2.7.6片上系统中的子系统

2.8为什么要在微控制器应用中使用32位处理器

2.8.1性能

2.8.2代码密度

2.8.3ARM架构的其他优势

2.8.4软件可重用性

第3章嵌入式软件开发介绍

3.1欢迎进入嵌入式系统编程

3.2基本概念

3.2.1复位

3.2.2时钟

3.2.3电压

3.2.4输入和输出

3.2.5嵌入式软件程序流程介绍

3.2.6编程语言选择

3.3ARM Cortex�睲编程介绍

3.3.1C编程数据类型

3.3.2用C访问外设

3.3.3程序映像内有什么

3.3.4SRAM中的数据

3.3.5微控制器启动时会发生什么

3.4软件开发流程

3.5Cortex微控制器软件接口标准

3.5.1CMSIS介绍

3.5.2CMSIS�睠ORE所做的标准化

3.5.3CMSIS�睠ORE的组织

3.5.4使用CMSIS�睠ORE

3.5.5CMSIS的优势

3.6软件开发的其他信息

第4章架构

4.1ARMv6�睲架构综述

4.1.1架构的含义

4.1.2ARMv6�睲架构背景

4.2编程模型

4.2.1操作模式和状态

4.2.2寄存器和特殊寄存器

4.2.3APSR的行为

4.3存储器系统

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系统控制块

4.8调试系统

4.9程序映像和启动流程

第5章指令集

5.1指令集是什么

5.2ARM和Thumb指令集背景

5.3汇编基础

5.3.1汇编语法一览

5.3.2后缀的使用

5.3.3统一汇编语言(UAL)

5.4指令列表

5.4.1处理器内传送数据

5.4.2存储器访问

5.4.3栈存储访问

5.4.4算术运算

5.4.5逻辑运算

5.4.6移位和循环移位运算

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.1if�瞭hen�瞖lse

6.2.2循环

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章存储器系统

7.1微控制器中的存储器系统

7.2Cortex�睲0和Cortex�睲0 处理器中的总线系统

7.3存储器映射

7.3.1概述

7.3.2系统级设计

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等待状态

第8章异常和中断

8.1异常和中断的含义

8.2Cortex�睲0和Cortex�睲0 处理器内的异常类型

8.2.1概述

8.2.2不可屏蔽中断

8.2.3HardFault

8.2.4SVC

8.2.5可挂起的系统调用

8.2.6系统节拍

8.2.7中断

8.3NVIC简介

8.4异常优先级定义

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中断优先级

8.9异常屏蔽寄存器(PRIMASK)

8.10中断输入和挂起行为

8.10.1简单中断处理

8.10.2简单的脉冲中断处理

8.10.3中断挂起状态在得到服务前取消

8.10.4外设在确认中断请求时清除挂起状态

8.10.5ISR完成后中断请求保持为高

8.10.6进入ISR前产生了多个中断请求脉冲

8.10.7在ISR执行期间产生了中断请求脉冲

8.10.8已禁止中断的中断请求确认

8.11异常入口流程

8.11.1压栈

8.11.2取出向量并更新PC

8.11.3更新寄存器

8.12异常退出流程

8.12.1寄存器出栈

8.12.2从返回地址取指并执行

8.13中断等待

第9章系统控制和低功耗特性

9.1系统控制寄存器简介

9.2SCB中的寄存器

9.2.1SCB中的寄存器列表

9.2.2CPU ID寄存器

9.2.3用于系统异常管理的控制寄存器

9.2.4向量表偏移寄存器

9.2.5应用中断和复位控制寄存器

9.2.6系统控制寄存器

9.2.7配置和控制寄存器

9.2.8系统处理控制和状态寄存器

9.3使用自复位特性

9.4使用向量表重定位特性

9.5低功耗特性

9.5.1概述

9.5.2休眠模式

9.5.3等待事件和等待中断

9.5.4唤醒条件

9.5.5退出时休眠特性

9.5.6唤醒中断控制器

0章操作系统支持特性

10.1支持OS的特性概述

10.2嵌入式系统的操作系统介绍

10.3SysTick定时器

10.3.1SysTick寄存器

10.3.2设置SysTick

10.3.3SysTick用于时间测量

10.3.4将SysTick用作单发定时器

10.4进程栈和PSP

10.5SVCall异常

10.6PendSV

10.7高级话题: 在编程中使用SVC和PendSV

10.7.1使用SVC异常

10.7.2使用PendSV异常

10.8高级话题: 实际的上下文切换

1章错误处理

11.1错误异常概述

11.2错误是如何产生的

11.3分析错误

11.4意外切换至ARM状态

11.5实际应用中的错误处理

11.6软件开发期间的错误处理

11.7锁定

11.7.1锁定的原因

11.7.2锁定期间发生了什么

11.8避免锁定

11.9和ARMv7�睲架构中错误处理的对比

2章存储器保护单元

12.1MPU是什么

12.2MPU适用的情形

12.3技术介绍

12.4MPU寄存器

12.4.1MPU类型寄存器

12.4.2MPU控制寄存器

12.4.3MPU区域编号寄存器

12.4.4MPU区域基地址寄存器

12.4.5MPU区域基本属性和大小寄存器

12.5设置MPU

12.6存储器屏障和MPU配置

12.7使用子区域禁止

12.7.1允许高效的存储器划分

12.7.2减少所需的区域总数

12.8使用MPU时的注意事项

12.8.1程序代码

12.8.2数据存储器

12.9和Cortex�睲3/M4/M7处理器的MPU间的差异

3章调试特性

13.1软件开发和调试特性

13.2调试接口

13.2.1JTAG和串行线调试通信协议

13.2.2Cortex�睲处理器和CoreSight调试架构

13.2.3调试接口的设计考虑

13.3调试特性一览

13.4调试系统

13.5暂停模式和调试事件

13.6利用MTB实现指令跟踪

4章Keil微控制器开发套件入门

14.1Keil微控制器开发套件介绍

14.1.1概述

14.1.2工具

14.1.3Keil MDK的优势

14.1.4安装

14.2典型的程序编译流程

14.3硬件介绍

14.3.1Freescale Freedom开发板(FRDM�睰L25Z)

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 FRDM�睰L25Z工程设置步骤

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工程环境的优化

14.7.1目标选项

14.7.2优化选项

14.7.3运行时环境选项

14.7.4工程管理

14.8使用模拟器

14.9在SRAM中执行程序

14.10使用MTB指令跟踪

5章IAR embedded workbench for ARM入门

15.1IAR embedded workbench for ARM概述

15.2典型的程序编译流程

15.3创建简单的blinky工程

15.4工程选项

15.5在IAR EWARM中使用MTB指令跟踪

15.6提示和要点

6章GCC入门

16.1GCC工具链

16.2关于本章中的例子

16.3典型开发流程

16.4创建简单的Blinky工程

16.5命令行选项概述

16.6Flash编程

16.7在Keil MDK�睞RM中使用ARM嵌入式处理器GNU工具

16.8在CooCox IDE中使用ARM嵌入式处理器GNU工具

16.8.1概述和设置

16.8.2创建新的工程

16.8.3使用IDE和调试器

7章mbed入门

17.1什么是mbed

17.2mbed系统是怎么工作的

17.3mbed的优势

17.4设置FRDM�睰L25Z板和mbed账号

17.4.1检查mbed Web网页

17.4.2注册mbed账号

17.4.3个人计算机的设置

17.5创建blinky程序

17.5.1只开关红色LED的简单版本

17.5.2利用脉宽调试控制LED

17.6支持的常用外设对象

17.7使用printf

17.8应用实例: 火车模型控制器

17.9中断

17.10要点和提示

8章编程实例

18.1利用通用异步收发器来产生输出

18.1.1通用异步收发器通信概述

18.1.2微控制器上的UART配置概述

18.1.3配置FRDM�睰L25Z中的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开发输入和输出函数

18.3.1为何要重新开发

18.3.2其他接口

18.3.3有关scanf的其他信息

18.4中断编程实例

18.4.1中断处理概述

18.4.2中断控制函数概述

18.5应用实例: 火车模型用的另一个控制器

18.6CMSIS�睠ORE的不同版本

9章超低功耗设计

19.1超低功耗使用示例

19.1.1概述

19.1.2进入休眠模式

19.1.3WFE与WFI

19.1.4利用退出时休眠特性

19.1.5利用挂起发送事件特性

19.1.6利用唤醒中断控制器

19.1.7利用事件通信接口

19.2低功耗设计要求

19.3能量去哪里了

19.4开发低功耗应用

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.2ULPBench�睠P概述

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.4CMSIS�睷TOS的作用

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优先级

20.5.3利用OS错误报告

20.5.4OS特性配置

20.5.5其他问题

20.6其他要点和提示

20.6.1修改RTX_Config_CM.c

20.6.2线程优先级

20.6.3缩短等待时间

20.6.4其他信息

第21章混合语言工程

21.1汇编在工程开发中的应用

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 MDK�睞RM中创建汇编工程

21.7.1一个简单的工程

21.7.2Hello World

21.7.3其他文本输出函数

21.8用于中断控制的通用汇编代码

21.8.1使能和禁止中断

21.8.2设置和清除中断挂起状态

21.8.3设置中断优先级

21.9汇编语言的其他编程技巧

21.9.1为变量分配数据空间

21.9.2复杂跳转处理

21.10使用特殊指令

21.10.1CMSIS�睠ORE

21.10.2习语识别

第22章软件移植

22.1概述

22.2从8位/16位微控制器向ARMCortex�睲移植软件

22.2.1通用改动

22.2.2存储器需求

22.2.38位或16位微控制器不再适用的优化

22.2.4实例: 从8051移植到ARM Cortex�睲0/Cortex�睲0

22.3ARM7TDMI和Cortex�睲0/M0 处理器间的差异

22.3.1经典ARM处理器概述

22.3.2操作模式

22.3.3寄存器

22.3.4指令集

22.3.5中断

22.4从ARM7TDMI向Cortex�睲0/Cortex�睲0 处理器移植软件

22.4.1启动代码和向量表

22.4.2中断

22.4.3C程序代码

22.4.4汇编代码

22.4.5原子访问

22.4.6优化

22.5各种Cortex�睲处理器间的差异

22.5.1概述

22.5.2系统模型

22.5.3NVIC和异常

22.5.4指令集

22.5.5系统级特性

22.5.6调试和跟踪特性

22.6在Cortex�睲处理器间移植时的通用改动

22.7Cortex�睲0/M0 和Cortex�睲1间的软件移植

22.8Cortex�睲0/M0 和Cortex�睲3间的软件移植

22.9Cortex�睲0/M0 和Cortex�睲4/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异常压栈后栈的内容

附录CCMSIS�睠ORE快速参考

C.1数据类型

C.2异常枚举

C.3嵌套向量中断控制器访问函数

C.4系统和SysTick操作函数

C.5内核寄存器操作函数

C.6特殊指令操作函数

附录DNVIC、SCB和SysTick寄存器快速参考

D.1NVIC寄存器一览

D.2中断设置使能寄存器(NVIC�睮SER)

D.3中断清除使能寄存器(NVIC�睮CER)

D.4中断设置挂起寄存器(NVIC�睮SPR)

D.5中断清除挂起寄存器(NVIC�睮CPR)

D.6中断优先级寄存器(NVIC�睮RQ[0]到NVIC�睮RQ[7])

D.7SCB寄存器一览

D.8CPU ID寄存器(SCB�睠PUID)

D.9中断控制状态寄存器(SCB�睮CSR)

D.10向量表偏移寄存器(SCB�睼TOR,0xE000ED08)

D.11应用中断和控制状态寄存器(SCB�睞IRCR)

D.12系统控制寄存器(SCB�睸CR)

D.13配置控制寄存器(SCB�睠CR)

D.14系统处理优先级寄存器2(SCB�睸HR[0])

D.15系统处理优先级寄存器3(SCB�睸HR[1])

D.16系统处理控制和状态寄存器

D.17SysTick寄存器一览

D.18SysTick控制和状态寄存器(SysTick�睠TRL)

D.19SysTick重装载值寄存器(SysTick�睱OAD)

D.20SysTick当前值寄存器(SysTick�睼AL)

D.21SysTick校准值寄存器(SysTick�睠ALIB)

附录E调试寄存器快速参考

E.1内核调试寄存器

E.2断点单元

E.3数据监视点单元

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针IDC接头排列

附录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存储器访问权限(只限于Cortex�睲0 处理器)

G.2.4从总线返回错误

G.2.5异常处理中的栈被破坏

G.2.6程序在某些C函数中崩溃

G.2.7意外地试图切换至ARM状态

G.2.8在错误的优先级上执行SVC

G.3休眠问题

G.3.1执行WFE不进入休眠

G.3.2退出时休眠过早地引起休眠

G.3.3中断已经在挂起态时SEVONPEND不工作

G.3.4由于休眠模式可能禁止了某些时钟,处理器无法唤醒

G.3.5竞态

G.4中断问题

G.4.1执行了多余的中断处理

G.4.2执行了多余的SysTick处理

G.4.3在中断处理中禁止中断

G.4.4错误的中断返回指令

G.4.5异常优先级设置的数值

G.5其他问题

G.5.1错误的SVC参数传递方法

G.5.2调试连接受到I/O设置或低功耗模式的影响

G.5.3调试协议选择/配置

G.5.4使用事件输出作为脉冲I/O

G.5.5向量表和代码位置的设备实际需求

G.6其他可能的编程陷阱

G.6.1中断优先级

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 Cortex�睲0微控制器面包板工程

H.1背景

H.2硬件设计

附录I参考文档

作者介绍


Joseph Yiu 英国ARM公司专家,12年半导体行业从业经历(在ARM公司工作15年以上)。曾参与多个处理器设计项目,包括ARM Cortex-M3和Cortex-M0,并参与了多种ARM IP(知识产权)产品的开发。Joseph Yiu为微控制器系统级设计专家,并涉猎了诸多相关领域,包括ARM Cortex-M系列微控制器软件开发、微控制器市场以及片上系统设计技术。其他代表性著作有《The Definitive Guide to the ARM Cortex-M3, 2nd Edition》、《The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition》(中文翻译版均由清华大学出版社出版发行)。

文摘






序言



深入剖析嵌入式系统核心:ARM Cortex-M0与Cortex-M0+架构与编程实战 在物联网(IoT)、嵌入式设备和低功耗应用日益普及的今天,掌握一款高效、低功耗的微控制器核心至关重要。ARM Cortex-M0和Cortex-M0+处理器家族,以其卓越的性能、极低的功耗和精巧的架构,成为了嵌入式领域炙手可热的选择。本书旨在为开发者提供一套全面、深入的学习指南,从核心架构到实际应用,逐层解析Cortex-M0和Cortex-M0+的精髓,助力读者掌握其精湛技艺,构建更加智能、高效的嵌入式系统。 内容概览: 本书内容涵盖了ARM Cortex-M0和Cortex-M0+处理器设计的方方面面,从底层的指令集、寄存器,到上层的中断处理、内存管理,再到实际的编程技巧和开发流程。我们将循序渐进,由浅入深,确保读者能够建立起扎实的理论基础,并将其应用于实际的项目开发中。 第一部分:ARM Cortex-M处理器家族概览 嵌入式处理器的演进之路: 简要回顾嵌入式处理器技术的发展历程,引出ARM架构在其中的重要地位。 ARM Cortex-M系列家族: 介绍ARM Cortex-M系列处理器(包括M0, M0+, M3, M4, M7等)的定位、特点及其在不同应用领域的优势。重点阐述Cortex-M0和Cortex-M0+作为入门级高性能核心的独特魅力。 Cortex-M0与Cortex-M0+的定位与差异: 详细对比Cortex-M0和Cortex-M0+在功耗、性能、指令集、内存访问等方面的主要区别,帮助读者根据实际需求选择最适合的处理器。例如,Cortex-M0+在功耗优化方面做得更为极致,而Cortex-M0则提供了更广泛的应用范围。 第二部分:Cortex-M0/M0+处理器架构详解 ARMv6-M架构: 深入解析Cortex-M0/M0+所采用的ARMv6-M架构,这是其高效、低功耗特性的基石。 指令集架构(ISA): Thumb指令集: 重点讲解Cortex-M0/M0+所支持的Thumb指令集,包括其16位和32位指令的特点、编码方式以及与传统ARM指令集的主要区别。 常用指令剖析: 详细解读数据处理指令、跳转指令、分支指令、内存访问指令、状态寄存器访问指令等,并提供实际示例。 Cortex-M0+新增指令与优化: 针对Cortex-M0+,介绍其在指令集上针对功耗和性能的进一步优化,例如一些单周期指令和更高效的内存访问机制。 寄存器模型: 通用寄存器: 详细说明R0-R12通用寄存器的作用和使用方式。 堆栈指针(SP): 深入理解MSP(主堆栈指针)和PSP(进程堆栈指针)的概念及其切换机制,这对于理解函数调用和中断处理至关重要。 链接寄存器(LR): 讲解LR寄存器在函数返回和中断返回中的作用。 程序计数器(PC): 解释PC寄存器如何指示下一条将要执行的指令。 特殊功能寄存器(SFRs): 介绍包括状态寄存器(xPSR)、NVIC(嵌套向量中断控制器)、SCB(系统控制块)、SysTick定时器等在内的核心控制和状态寄存器,并详细说明它们的功能。 内存模型与总线接口: 内存映射: 理解Cortex-M0/M0+的内存空间划分,包括闪存、RAM、外设寄存器等。 AHB-Lite总线接口: 讲解AHB-Lite总线接口的工作原理,以及它如何与外设进行高效的数据传输。 位带操作(Bit-banding): (如果目标处理器支持)介绍位带操作的概念及其在高效修改单个比特位时的优势。 第三部分:中断与异常处理 中断与异常的概念: 区分中断和异常,理解其触发机制和执行流程。 嵌套向量中断控制器(NVIC): NVIC架构: 详细介绍NVIC的结构、功能、中断使能、优先级配置、中断分组等。 中断向量表: 理解中断向量表的概念,以及如何解析中断向量。 中断优先级: 讲解中断优先级设置的重要性,以及多级中断嵌套的处理方式。 中断延迟: 分析影响中断延迟的因素,并给出优化建议。 异常处理流程: 详细描述从异常发生到异常服务程序执行,再到异常返回的完整流程,包括寄存器的自动保存与恢复。 系统异常: 介绍如NMI(不可屏蔽中断)、HardFault(硬错误)、MemManage(内存管理错误)、BusFault(总线错误)等系统异常的产生原因、处理方式和调试方法。 SysTick 定时器: 深入解析SysTick定时器的功能,包括其作为系统时钟源、定时器以及实现 RTOS(实时操作系统)的基石作用。 第四部分:低功耗设计与优化 Cortex-M0/M0+的低功耗特性: 阐述Cortex-M0/M0+在设计之初就融入的低功耗理念,例如精简指令集、单周期执行、更小的核心面积等。 工作模式与功耗管理: 运行模式(Run Mode): 介绍处理器在正常运行时的功耗。 休眠模式(Sleep Mode): 详细讲解不同级别的休眠模式(Sleep, Deep Sleep等),以及如何通过中断唤醒。 待机模式(Standby Mode): (如果目标处理器支持)介绍更深层次的功耗节省模式。 功耗优化策略: 时钟门控(Clock Gating): 介绍如何通过关闭不使用的时钟源来降低功耗。 电源门控(Power Gating): (如果硬件支持)讲解如何关闭不使用的模块的电源。 指令优化: 通过使用更高效的指令和算法来减少CPU的执行时间,从而降低功耗。 外设功耗管理: 介绍如何针对外设进行功耗优化,例如关闭不使用的外设,或者将其配置到低功耗模式。 功耗分析工具与方法: (简要介绍)提及一些常用的功耗分析工具和测量方法,帮助读者量化和优化系统的功耗。 第五部分:内存管理与数据访问 内存布局与分配: 详细讨论程序在内存中的分布,包括代码段(.text)、数据段(.data, .bss)、堆(heap)和栈(stack)。 数据类型与对齐: 讲解Cortex-M0/M0+对数据类型的处理方式,以及数据对齐的重要性,错误的对齐可能导致总线错误。 指针与内存访问: 深入理解指针的概念,以及通过指针进行高效、安全的内存访问。 内存保护单元(MPU): (如果目标处理器支持)介绍MPU的功能,包括区域划分、访问权限设置,以及在嵌入式操作系统和多任务环境中的应用。 第六部分:实际开发与调试技巧 开发环境搭建: 集成开发环境(IDE): 介绍主流的嵌入式开发IDE,如Keil MDK, IAR Embedded Workbench, STM32CubeIDE等,以及它们在Cortex-M0/M0+开发中的使用。 交叉编译工具链: 讲解GCC ARM Embedded Toolchain等交叉编译器的使用。 编写高效的C/C++代码: 内联汇编: 介绍何时以及如何使用内联汇编来优化关键代码段,实现更精细化的控制。 编译器优化选项: 讲解不同的编译器优化级别及其对代码性能和大小的影响。 代码结构与可读性: 强调编写清晰、模块化代码的重要性。 调试技术: 断点与单步执行: 掌握在IDE中设置断点、单步执行代码、查看变量值等基本调试技巧。 内存查看器与寄存器查看器: 学习使用内存查看器和寄存器查看器来分析程序运行时的状态。 逻辑分析仪与示波器: (简要提及)介绍使用硬件调试工具来分析信号和时序。 代码覆盖率与性能分析: (简要提及)介绍如何分析代码的执行效率。 固件更新与升级: Bootloader设计: 介绍Bootloader的作用和基本设计思路,实现固件的远程更新。 OTA(Over-The-Air)更新: (可选)提及无线固件更新的概念。 第七部分:典型应用场景与项目实践 传感器数据采集与处理: 结合实际传感器(如温度、湿度、加速度计等),演示如何通过GPIO、ADC等外设读取数据,并进行简单处理。 通信协议实现: UART通信: 实现串行通信,与其他设备进行数据交换。 I2C/SPI通信: 与其他外设(如EEPROM、显示屏、传感器等)进行通信。 低功耗蓝牙(BLE): (如果适用)介绍如何利用Cortex-M0/M0+实现BLE通信。 实时操作系统(RTOS)应用: 介绍RTOS(如FreeRTOS, Zephyr等)的基本概念,以及如何在Cortex-M0/M0+上运行RTOS,实现多任务并发。 物联网节点开发: 结合实际项目,演示如何构建一个简单的物联网传感器节点,实现数据采集、发送和低功耗管理。 电源管理系统: (可选)设计一个简单的电源管理模块,实现高效的电源切换和监控。 本书特点: 理论与实践相结合: 不仅深入解析Cortex-M0/M0+的底层架构,更注重实际编程应用,提供丰富的代码示例和项目实践。 面向广泛读者: 无论您是初学者还是有一定经验的嵌入式开发者,本书都能为您提供有价值的学习内容。 清晰易懂的语言: 采用通俗易懂的语言,配合大量的图示和表格,帮助读者轻松掌握复杂的技术概念。 关注实际问题: 针对嵌入式开发中常见的难题,如功耗优化、中断处理、实时性要求等,提供切实可行的解决方案。 目标读者: 嵌入式系统工程师 物联网开发者 硬件设计工程师 计算机科学与电子工程专业的学生 对低功耗、高性能嵌入式微控制器感兴趣的爱好者 通过本书的学习,您将能够深刻理解ARM Cortex-M0和Cortex-M0+处理器的强大之处,掌握其核心指令集和架构,并能熟练运用各种开发工具和技术,自信地设计、开发和调试各种嵌入式系统,为您的项目注入更强的生命力。

用户评价

评分

这次入手这本《ARM Cortex-M0与Cortex-M0+指南(第2版)》,主要是冲着它在嵌入式开发领域口碑相当不错的作者 Joseph Yiu,加上又是中文版,看名字吴(作者之一)应该也是国内的专家,感觉在理解和消化上应该会更顺畅些。虽然我个人目前的项目主力并非 Cortex-M0/M0+ 系列,但这个系列凭借其低功耗和高性价比的特点,在物联网、传感器节点以及一些入门级微控制器应用中依然占据着重要的地位。因此,深入了解其架构和特性,对于拓宽技术视野、应对未来可能遇到的不同平台需求,无疑是大有裨益的。这本书的定价也算合理,对于一本技术专著来说,它的厚度和内容深度似乎预示着物有所值。我尤其期待书中对 M0 和 M0+ 之间关键差异的阐述,毕竟 M0+ 在 M0 的基础上做了不少优化,这些细节的对比和分析,对于工程师在实际选型时提供有力的参考。另外,章节的编排和内容的过渡是否自然,会不会因为涉及两个处理器版本而显得零散,也是我关注的重点。希望这本书能够提供清晰的系统框图、指令集解析以及常用的外设接口应用示例,这样能让我在学习过程中更容易将理论与实践相结合,毕竟光看理论容易枯燥,而缺少实践指导的书籍往往难以真正解决实际问题。

评分

收到《ARM Cortex-M0与Cortex-M0+指南(第2版)》这本厚实的著作,迫不及待地翻阅。作为一名在嵌入式领域摸爬滚打多年的工程师,我对 Cortex-M 系列处理器并不陌生,但 M0 和 M0+ 因其特殊的定位,总是让我觉得有些“似曾相识”又“有所保留”,因此一直想找一本权威且深入的读物来系统梳理。Joseph Yiu 的大名在外,加上国内专家吴的加盟,让这本中文版显得格外亲切。书的封面设计简洁大方,一看就是硬核技术类的书籍。我尤其好奇书中对于 M0 和 M0+ 在功耗优化、指令集效率、中断响应机制等方面具体采用了哪些设计策略。对于这些微处理器的深度优化,往往藏着许多玄机,直接影响到其在资源受限场景下的表现。希望本书能有详细的图示和代码示例,能够把我从模糊的认知带入到清晰的理解,甚至能够举一反三,触类旁通。阅读一本好书,就像与一位经验丰富的导师对话,能够快速拨开迷雾,少走弯路。我期待这本书能成为我手中那份最可靠的“兵器谱”,让我在面对 Cortex-M0/M0+ 项目时,能够游刃有余,信心十足。

评分

我一直关注着 ARM Cortex-M 系列处理器在嵌入式领域的演进,尤其是 Cortex-M0 和 Cortex-M0+ 这两个面向低功耗和成本优化的核心。这次入手《ARM Cortex-M0与Cortex-M0+指南(第2版)》,是希望能够更系统、更深入地理解这两个系列的精髓。Joseph Yiu 的著作在业内享有盛誉,其对 ARM 架构的剖析一直以严谨和透彻著称。再加上中文版由吴参与,我相信它在语言表达和技术细节的翻译上能够做到信达雅,更容易被国内的开发者所接受。我非常期待书中能对 M0 和 M0+ 的微架构进行详细解读,例如它们在流水线设计、指令解码、寄存器组等方面的异同,以及这些差异如何体现在性能和功耗上的权衡。此外,对于中断控制器(NVIC)的配置和中断向量表的处理,以及低功耗模式的深入分析,也是我非常感兴趣的部分。能够拥有这样一本指南,可以帮助我在学习和实践过程中,更准确地把握这两个处理器的特性,从而在项目开发中做出更优化的设计选择,最大化地发挥它们的优势。

评分

这次入手《ARM Cortex-M0与Cortex-M0+指南(第2版)》,最吸引我的还是其权威的作者阵容。Joseph Yiu 的名字在 Cortex-M 系列书籍中绝对是响当当的招牌,而中文版又加入了吴,这对我来说是极大的福音,毕竟能够用母语来理解如此深入的技术细节,无疑会大大提高学习效率。我一直觉得 M0 和 M0+ 系列是 ARM 家族中极具性价比和市场覆盖率的代表,尤其是在物联网和消费电子领域,它们的应用无处不在。因此,掌握这两个系列的深入知识,对于任何一个嵌入式开发者来说都是一项重要的技能。我非常期待书中能够详细阐述 M0 和 M0+ 在指令集架构(ISA)、执行单元、功耗管理单元以及总线接口等方面的具体实现和区别。对于中断处理流程、调试接口(如 SWD)的使用,以及如何优化代码以达到最佳性能和最低功耗,这些都是我迫切希望从书中找到答案的。一本优秀的指南,应该能够帮助读者建立起清晰的认知框架,并提供解决实际问题的能力,我对此书抱有很高的期望。

评分

收到这本《ARM Cortex-M0与Cortex-M0+指南(第2版)》着实让我眼前一亮。作为一名经常需要处理嵌入式系统底层开发的工程师,我深知对于像 Cortex-M0 和 Cortex-M0+ 这样广泛应用于低成本、低功耗设备的处理器,有一个扎实的理论基础和详细的参考手册是多么重要。Joseph Yiu 的名声在外,他编写的书籍质量一直很高,而这次中文版的出现,更是让我不用担心翻译的问题。我非常期待书中能对这两个处理器核心的架构进行细致的讲解,特别是它们在指令集、中断处理、内存管理以及与外设接口的交互方面有哪些精妙的设计。我尤其想了解 M0+ 在 M0 的基础上做了哪些改进,这些改进是如何实现的,以及这些改进在实际应用中能带来哪些好处。这本书的厚度也让我感觉内容应该会很充实,希望它能提供一些实用的编程技巧和调试方法,帮助我更高效地进行开发。如果能有清晰的框图和实际的代码示例,那将是锦上添花。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有