目录
一、底层导学
1.课程回顾
2.嵌入式系统分层
3.Linux层次结构
二、ARM课该怎么学
1.课程内容
2.学习方法
三、计算机基础知识
1.计算机的进制
2.总线
四、ARM存储模型
1.三级存储结
五、CPU工作原理
1.CPU工作原理
2.指令的执行过程
3.地址空间
六、ARM体系结构
1.ARM处理器概述
1.1.ARM的含义
1.2.编译原理
2. 数据类型
2.1ARM数据的类型
2.2.字节序
七、ARM工作模式
1.ARM 8个基本的工作方式(只有A系列才有8种)
2.工作模式的理解
3.工作模式分类
八、寄存器
1.寄存器 通用寄存器
2.ARM寄存器
3.专用寄存器
4.CPSR寄存器
九、ARM异常处理
1.异常
2.异常处理机制
3.ARM异常源
4.ARM异常模式
5.ARM异常响应
6.异常向量表
7.异常返回
8.异常优先级
十、ARM微架构
1.流水线
(1)指令流水线
(2)多核处理器
一、底层导学
1.课程回顾
C语言基础:C语言工程师
C高级及Linux :C语言工程师
数据结构:C语言工程师
应用层开发:
IO进程:Linux C/C++ 开发 嵌入式软件
网络编程:Linux C/C++ 开发 嵌入式软件
C++ QT:C++工程师 QT工程师 嵌入式软件
底层开发:
STM32 嵌入式软件 单片机工程师
ARM 嵌入式软件 单片机工程师
系统移植 嵌入式软件 单片机工程师
驱动开发 驱动开发
2.嵌入式系统分层
应用开发: 使用系统提供的接口(API),做上层应用开发
底层开发:做操作系统本身
3.Linux层次结构
进程管理:管理进程的创建、调度、销毁、通信等
内存管理: 管理内存的申请、释放、映射等
文件管理: 管理和访问磁盘中的文件
设备管理: 硬件设备的驱动的管理
网络协议:通过网通协议栈(TCP\IP)进行通信
二、ARM课该怎么学
1.课程内容
ARM体系结构:
存储模型:程序的存储运行模式 架构
工作模式:
处理模式:发生中断或者异常进入
线程模式:正常时
寄存器:ARM内核内部的一些寄存器
异常机制:异常的优先级 异常源 中断向量表
流水线:三级线
指令集:ARM指令
接口技术:
GPIO:使能、配置模式(输入还是输出)、输出类型(推挽输出 开漏输出)、输出速度、输出数据寄存器(ODR\BSRR\BRR)
PWM:屏幕亮度 电机
UART:485 232 modbus
ADC:模数转换 需要得到真实数据的,需要用到ADC 只是开关量,的需要ADC
RTC\IIC\SPI\485\CAN\232
2.学习方法
三、计算机基础知识
1.计算机的进制
在计算机中数据的存储、运算、传输都是以高低电平的方式进行的,所以数字电路中高、低电平表示逻辑0和1
- 计算机的组成
输入设备:把其他信号转换成计算机能够识别的信号并送入计算机中:键盘、鼠标、麦克风
输出设备:把运算结果以人或其他设备能够识别的信号进行送到计算机外:显示器、音响
存储器:用来存储程序和数据的元件,实现存储控制程序的基础 :RAM ROM 软盘
运算器:CPU中负责进行数据运算的逻辑部件,其核心是算数逻辑单元ALU 加法器 减法器
控制器:控制器是CPU的指挥中心
2.总线
总线
总线是计算机中各个部件之间传送信息的公共通信干线, 在物理上就是一束导线按照其传递信息的类型可以分为数据总线、地址总线、控制总线
DMA总线
DMA(Direct Memory Access)即直接存储器访问,使用DMA总线可以不通过CPU直接在存储器之间进行数据传递
四、ARM存储模型
1.三级存储结
cache: 速度最快、价格最贵、容量最小、断电丢失、CPU可以直接访问
主存储器:速度、价格、容量介于CACHE和辅助存储器之间、断电丢失、CPU可以直接访问
辅助存储器:速度最慢、价格最低、容量最大、断电不丢失、cpu不可以直接访问
五、CPU工作原理
1.CPU工作原理
程序是指令的有序集合
2.指令的执行过程
取址:CPU将PC寄存器中的地址发送给内存,内存将其地址中对应的指令返回,存到CPU中的指令寄存器IR
译码:译码器对IR中的指令进行识别,将指令解析成具体的运算器
执行:控制器控制运算器对应的运算单元进行运算,运算的结果写入寄存器
注意:PC每取地址一次,自加一次
3.地址空间
一个处理器能够访问(读写)的存储空间是有限的,我们把这个空间称为地址空间(寻址空间)。通常情况下地址空间的大小2的N次方
六、ARM体系结构
1.ARM处理器概述
1.1.ARM的含义
1.ARM公司
1978年Acorn成立于应该剑桥
1980年晚期,苹果电脑开始与艾康电脑合作开发新版的ARM核心
1985年开发出全球第一款商用RISC处理器-ARM1
1990年艾康电脑财务危机,苹果和VLSI投资,独立出子公司Advanced RISC Machines(ARM)
1991年,ARM推出RISC处理器-ARM6 93-ARM7 97--ARM9TDMI 99--ARM9E
2001--ARMV6 2022--ARM11
2004年,发布ARMV7架构的Cortex系列处理器,同时推出Cortex-M3
2005年,发布Cortex-A8处理器 07 M1和Cortex-A9 09 实现Cortex-A9 发布 M0
2010--M4
2.微处理器的统称
早期经典处理器:ARM7 ARM9 ARM11
A: 高性能 电脑 平板
R:实时性高 航天 自动驾驶
M:微处理器:M0 M3 M4
3.一种指令集
指令:能够指示处理器执行某种云端的命令称为指令 + - << >>
指令集:处理器能够识别的指令的集合称为指令集
ARM指令集:所有指令(机器码),都专用32bit存储空间,代码灵活,指令简洁,执行ARM指令PC每次自加4
Thumb指令集:所有指令(机器码),都专用16bit存储空间,代码灵活,指令简洁,执行ARM指令PC每次自加2
4.RISC和CISC
RISC处理器
只保留常用的的简单指令,硬件结构简单,复杂操作一般通过简单指令的组合实现,一般指令长度固定,且多为单周期指令
RISC处理器在功耗、体积、价格等方面有很大优势,所以在嵌入式移动终端领域应用极为广泛
CISC处理器
不仅包含了常用指令,还包含了很多不常用的特殊指令,硬件结构复杂,指令条数较多,一般指令长度和周期都不固定
CISC处理器在性能上有很大优势,多用于PC及服务器等领域
1.2.编译原理
机器码(二进制)是处理器能直接识别的语言,不同的机器码代表不同的运算指令,处理器能够识别哪些机器码是由处理器的硬件设计所决定的,不同的处理器机器码不同,所以机器码不可移植
汇编语言是机器码的符号化,即汇编就是用一个符号来代替一条机器码,所以不同的处理器汇编也不一样,即汇编语言也不可移植
C语言在编译时我们可以使用不同的编译器将C源码编译成不同架构处理器的汇编,所以C语言可以移植
2. 数据类型
2.1ARM数据的类型
ARM采用32位架构,基本数据类型有以下三种:
Byte 8bits
Halfword 16bits
word 32bits
数据的存储
word型数据在内存的起始地址必须以4的整数倍存储
Halfword型数据在内存的起始地址必须以2的整数倍存储
2.2.字节序
大端对齐
低地址存到高地址,高地址存放到低地址
小端对齐
低地址存到低地址,高地址存放到高地址
注:ARM一般使用的是小端对齐
七、ARM工作模式
1.ARM 8个基本的工作方式(只有A系列才有8种)
User 非特权模式,一般在执行上层的应用程序时ARM处于该模式
FIQ 当一个高优先级中断产生后ARM将进入这种模式
IRQ 当一个低优先级中断产生后ARM将进入这种模式
SVC 当复位或执行软中断指令后ARM将进入这种模式
Abort 当产生存取异常时ARM将进入这种模式
Undef 当执行未定义的指令时ARM将进入这种模式
System 使用和User模式相同寄存器集的特权模式
Monitor 为了安全而扩展出的用于执行安全监控代码的模式(只有A系列才有)
2.工作模式的理解
不同的模式拥有不同的权限
不同的模式执行的代码不同
不同的模式拥有不同的功能
3.工作模式分类
八、寄存器
1.寄存器 通用寄存器
概念:寄存器是处理器内部的存储器,没有地址
作用:一般用于暂时存储参与运算的数据和运算结果
分类:
通用寄存器、专用寄存器、控制寄存器
2.ARM寄存器
3.专用寄存器
R15(PC,Program Counter)
程序计数器,用于存储当前取址指令的地址
R14(LR,Link Register)
链接寄存器,一般有以下两种用途:
> 执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址
程序需要返回时将LR的值复制到PC即可实现
> 产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下
一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回
R13(SP,Stack Pointer)
栈指针,用于存储当前模式下的栈顶地址
4.CPSR寄存器
CPSR(Current Program Status Register),当前程序状态寄存器
CPSR寄存器分为四个域,[31:24]为条件域用F表示、[23:16]为状
态域用S表示、[15:8]为预留域用X表示、[8:0]为控制域用C表示
Bit[4:0]
[10000]User [10001]FIQ [10010]IRQ [10011]SVC
[10111]Abort [11011]Undef [11111]System [10110]Monitor
Bit[5]
[0]ARM状态 [1]Thumb状态
Bit[6]
[0]开启FIQ [1]禁止FIQ
Bit[7]
[0]开启IRQ [1]禁止IRQ
Bit[28]
> 当运算器中进行加法运算且产生符号位进位时该位自动置1,否则为0
> 当运算器中进行减法运算且产生符号位借位时该位自动置0,否则为1
Bit[29]
> 当运算器中进行加法运算且产生进位时该位自动置1,否则为0
> 当运算器中进行减法运算且产生借位时该位自动置0,否则为1
Bit[30]
当运算器中产生了0的结果该位自动置1,否则为0
Bit[31]
当运算器中产生了负数的结果该位自动置1,否则为0
九、ARM异常处理
1.异常
概念:
处理器在正常执行过程中可能遇到一些不正常的事件发生,这时处理器就要将当前程序暂停下来转而去执行这个异常事件,异常事件处理完之后返回被异常大端的地方继续执行。
2.异常处理机制
不同的处理器对异常的处理的流程大体相似,但是不同的处理器在具体实现的机制上有所不同;比如处理器遇到哪些事件认为是异常事件遇到异常事件之后处理器有哪些动作、处理器如何跳转到异常处理程序如何处理异常、处理完异常之后又如何返回到被打断的程序继续执行等我们将这些细节的实现称为处理器的异常处理机制
3.ARM异常源
概念
导致异常产生的事件称为异常源
ARM异常源
FIQ 快速中断请求引脚有效
IRQ 外部中断请求引脚有效
Reset 复位电平有效
Software Interrupt 执行swi指令
Data Abort 数据终止
Prefetch Abort 指令预取终止
Undefined Instruction 遇到不能处理的指令
4.ARM异常模式
异常模式
在ARM的基本工作模式中有5个属于异常模式,即ARM遇到异常后会切换成对应的异常模式
5.ARM异常响应
ARM产生异常后的动作(自动完成)
- 拷贝CPSR中的内容到对应的异常模式下的SPSR
- 修改CPSR的值
2.1修改终端禁止位禁止相应的中断
2.1修改模式位进入相应的异常模式
2.3修改状态位进入ARM状态
- 保存返回地址到对应模式下的LR中
- 设置PC位相应的异常向量
6.异常向量表
异常向量表
> 异常向量表的本质是内存中的一段代码
> 表中为每个异常源分配了四个字节的存储空间
> 遇到异常后处理器自动将PC修改为对应的地址
> 因为异常向量表空间有限一般我们不会再这里
写异常处理程序,而是在对应的位置写一条跳转指令使其跳转到指定的异常处理程序的入口
注:ARM的异常向量表的基地址默认在0x00地址但可以通过配置协处理器来修改其地址
7.异常返回
ARM异常返回动作(自己编写)
- 将SPSR的值复制给CPSR-》恢复为跳转之前的模式
- 将LR的值复制给PC-》返回跳转之前程序执行的地方
- IRQ异常举例
2.异常优先级
8.异常优先级
十、ARM微架构
1.流水线
(1)指令流水线
指令流水线机制的引入确实能够大大的提升指令执行的速度,但在实际执行程序的过程中很多情况下流水线时是无法形成的,比如芯片刚上电的前两个周期、执行跳转指令后的两个周期等
所以指令流水线的引入以及优化只能使平均指令周期不断的接近1而不可能真正的达到1,且流水线级数越多芯片设计的复杂,程度就越高,芯片的功耗就越高.
单片机是3级流水线