嵌入式期末复习
2023-02-28 11:42:41 7 举报
AI智能生成
为你推荐
查看更多
嵌入式期末复习
作者其他创作
大纲/内容
系统内核小:系统资源相对有限
专用性强:个性化强,软件和硬件的结合非常紧密
系统精简:一般没有系统软件和应用软件的明显区分
实时性要求高:软件质量要求高,要求固化存储,以提高速度
使用多任务操作系统
特点
嵌入式系统是应用于特定环境下,针对特定用途设计的,力争在较少的资源上实现更高的性能
专用性强:面向特定应用,完成特定功能
系统内核小:采用专用中央处理器,系统配置够用即可
实时性要求高:或不用操作系统,或选配实时操作系统
运行环境苛刻:对体积、功耗、可靠性、运行环境有严格要求
程序固化:运行程序固化在存储器芯片中
专用开发工具:自身不具备自主开发能力,需专用开发工具支持
与PC机的区别
一般以32位嵌入式微处理器为核心的硬件设计;而单片机系统多为4位、8位、16位机,不适合运行操作系统,难以完成复杂的运算及处理功能;
嵌入式系统强调基于平台的设计、软硬件协同设计;单片机大多采用软硬件流水设计;
与单片机的区别
区别
循环轮询系统
前后台系统
多任务系统
按嵌入式软件的结构分类
芯片级嵌入(含程序或算法的处理器)
模块级嵌入(系统中的某个核心模块)
系统级嵌入(软件和硬件的结合体)
按表现形式分类(硬件范畴)
实时系统:如果逻辑和时序出现偏差将会引起严重后果的系统(响应时间在ms或s级)
软实时系统:系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必须在多长时间内完成(响应时间为数十秒)
硬实时系统:各任务不仅要执行无误而且要做到准时(响应时间在ms或us级)
按实时性要求分(软件范畴)
分类
应用层——OS层——驱动层——硬件层(软件和硬件)
体系结构
数据与指令都存储在同一存储空间中
统一编址,指令和数据通过同一总线访问
取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行;高速运行时,形成传输瓶颈。
缺点
冯·诺依曼结构
程序与数据在不同存储空间;每个存储器独立编址、独立访问
使用程序和数据总线,使数据吞吐率提高一倍
适合于数字信号处理
由于取指令和存取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,这样,也就克服了数据流传输的瓶颈,提高了运算速度
优点
哈佛体系结构
CPU的体系结构
CISC:复杂指令集(Complex Instruction Set Computer):具有大量的指令和寻址方式,80%的程序只使用20%的指令,大多数程序只使用少量的指令就能够运行
RISC:精简指令集(Reduced Instruction Set Computer):在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,使CPU硬件结构设计变得更为简单
对比
两种指令集
CPU中的流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠执行,从而实现几条指令并行处理,以加速程序运行过程的技术。掌握流水线的周期运算方法!
流水线:几个指令可以并行执行,提高了CPU的运行效率
超标量执行:配置多个执行部件和指令译码电路,能同时执行多条指令,并且每条电路都采用流水线执行
把被频繁访问的信息,成批地从主存中读到一个能高速存取的小容量存储器中存放起来,提高效率
概念
cache和主存可能不会同步更新,导致读脏数据
存在的问题
刷新与回写:在CPU访问异步事件控制的数据前一定要强行刷新cache中的内容;反之,从内存到外部设备搬移数据前一定要回写内存。
解决方案
存取buffer不需要CPU干预
与Buffer的区别
高速缓存cache
影响CPU性能的因素
主要依靠:中央处理器CPU:由运算器、控制器、寄存器组和内部总线构成
采用SoC设计(SoC是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上的设计(部件包括CPU在内))
结构
体积小、重量轻、成本低、可靠性高
功耗低
工作温度、抗电磁干扰、可靠性等方面增强
以嵌入式微处理器为核心
存储结构
使各个任务作为各自独立的程序在其自己的私有存储空间中运行,运行的任务无须知道其他与之无关的任务的存储需求情况
虚拟存储空间到物理存储空间的映射
存储器访问权限的控制
设置虚拟存储空间的缓冲特性
存储管理单元:MMU
RAM:随机存取存储器
SRAM:静态随机存储器
DRAM:动态随机存储器
ROM:只读存储器(Read Only Memory)
NOR:芯片其内部结构是采用并行方式工作的,内部的地址线和数据线是分开的。其特点可以按字节随机读取任意单元的内容。
NAND:基本工作方式是按顺序串行读取,一个区块写入或读出结束再进行下一个操作,采用的是串行方式工作。
FLASH:闪存
种类
(1)SRAM比DRAM快(2)DRAM比SRAM耗电多 (3)DRAM存储密度比SRAM高得多(4)DRAM需要周期性刷新
存储器
总线是CPU与存储器和设备通信的机制,是计算机各部件之间传送数据、地址和控制信息的公共通道。
一个微处理器系统可能含有多条总线,不同速度的总线间用桥连接
总线带宽(单位:MB/s) =(总线宽度32bit/8)× 总线频率(Hz)1/250ns
计算
总线
I/O单元电路
通信模块
外部设备
硬件系统组成
BSP(板级支持包,也叫硬件抽象层)是介于底层硬件和操作系统之间的软件层,它完成系统上电后最初的硬件和软件初始化,完成硬件相关的设备驱动,并对底层硬件进行封装,使得操作系统不再面对具体的操作。
BSP
可固化存储
可配置、可剪裁
独立的板级支持包,可修改
不同的CPU有不同的版本
应用的开发需要有集成的交叉开发工具
只提供基本功能,如建立和管理进程、提供文件系统、管理设备等,这些功能以系统调用方式提供给用户
内核层
如,网络功能、文件系统、GUI系统等均工作,以系统进程或函数调用的方式工作
应用层
层次
低优先的任务正在执行时,有高优先的要等在运行完成后再执行
非抢占式
低优先的任务正在执行时,有高优先的会立刻打断并开始执行
抢占式
实时操作系统
一个任务一旦获得CPU就独占其运行,除非由于某种原因使它决定放弃CPU的使用权
不可抢占式调度
基于任务优先级的,当前正在运行的任务可以随时让位给优先级更高的处于就绪态的其他任务
可抢占式调度
当两个或两个以上任务有同样的优先级时,不同任务轮转使用CPU,直到系统分配的CPU时间片用完
时间片轮转调度
任务的调度方式
主要用于多任务环境中,可以被中断的函数,在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误
可重入函数
由于使用了一些系统资源(全局变量区,中断向量表等)它如果被中断的话,可能会出现问题,不能运行在多任务环境下
不可重入函数
函数
操作系统
开发环境与工具链
中断与驱动
硬件资源限制
位运算
头文件
文件包含
提高代码运行效率
预处理参数宏时使用两遍宏展开,第一遍展开宏体,第二遍对展开的宏体用实参替换形参
参数宏的形式参数表中没有类型说明符
在程序开头声明,接下来遇到#define中的标识符时,将其中的内容在当前位置中进行替换或插入(宏展开)
宏定义#define
#ifndef __COMPLEX__ #define __COMPLEX__ //头文件主体#endif
使用条件编译避免头文件重复
条件编译
预处理伪指令
extern:外部存储类型,表明该变量是外部变量(全局变量)其作用域为从变量的定义开始到本程序文件的末尾。编译时外部变量被分配在静态存储区。其能否被存取,由该外部变量定义性说明与使用它的函数之间的位置关系决定。
const修饰符:常量修饰符(只读)内存中单独开辟有一个常量区用于存放const变量变量被const修饰后就不再变了。
volatile修饰符:易失性修饰符说明所定义的变量或指针可以被多种原因修改编译器在用到该变量时,必须每次都小心地重新读取其值,而不能使用保存在寄存器里的备份。
static:在本文件定义前和非被函数定义文件中,该函数不能被调用
interrupt:将函数修饰为中断函数,返回类型和参数均必须为void
参数类型及修饰符
嵌入式C语言编程基础
交叉开发是指在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中进行调试的开发方式构成这种开发方式的环境称为交叉开发环境。
交叉开发
调试工具和待调试的嵌入式软件都在主机上运行,由主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。
简单方便,不需要目标板,成本低
功能非常有限,无法实时调试
模拟调试
软件调试
BDM/JTAG调试
全仿真调试
四种调试方法
开发与调试
软件系统
组成
低功耗、低成本、高性能
采用RISC体系结构
大量使用寄存器(31个通用寄存器、6个状态寄存器)
32位,典型的RISC体系结构:简洁、高效、便于实现
指令编码
当处理器工作在ARM状态时,几乎所有的指令均可以包含一个可选的条件码只有CPSR中的条件标志满足指定条件时,指令才被执行不符合条件的代码依然占用一个时钟周期
条件执行
向后兼容:新版本增加指令,并保持指令向后兼容
在通用寄存器中操作(指令集仅能处理寄存器中的数据)
Load-store 结构
数据处理指令 – 使用和改变寄存器的值
数据传送指令 – 把存储器的值拷贝到寄存器中 (load) 或者把寄存器中的值拷贝到存储器中(store)
分支
陷入系统代码
控制流指令
指令分类
操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数
立即寻址
利用寄存器中的数值作为操作数:ADD R0,R1,R2
寄存器寻址
以寄存器中的值作为操作数的地址:LDR R0,[R1]
寄存器间接寻址
将寄存器的内容与指令中给出的地址偏移量相加,得到操作数的有效地址并且在加到基址寄存器前还可以经过移位操作:LDR r0,[r1,r2]
基址变址寻址
使用一个称作堆栈指针的专用寄存器指示当前的操作位置
堆栈寻址
多寄存器传送指令LDM/STM的寻址方式
块拷贝寻址
以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址
相对寻址
寻址方式
完成常用的算术与逻辑运算不但将运算结果保存在目的寄存器中,还可以更新CPSR 中的相应条件标志位
数据处理指令
存储器数据的操作是通过将数据从存储器加载到片内寄存器中进行处理结果经寄存器存回到存储器,以加快对片外存储器数据处理的执行速度
Load/Store指令(存储器访问)
(MRS)读
(MSR)写
用于在状态寄存器和通用寄存器之间传送数据
程序状态寄存器读、写指令
B 跳转指令
BX 带状态切换的跳转指令
BL 带链接的跳转指
BLX 带链接和状态切换的跳转指令
跳转(分支)指令
软件中断指令SWI用于产生SWI异常中断,用来实现在用户模式下对操作系统中特权模式的程序调用
断点中断指令BKPT主要用于产生软件断点,供调试程序用
异常中断(产生)指令
用于系统控制、存储管理单元控制、浮点运算和系统性能监测等
协处理器指令
指令类别
ARM指令集
是ARM指令集的扩展,节省存储空间,具备32位代码的所有优点
概述
以更低的成本取得更好的性能和代码密度
产生原因
代码少,性能高,解码逻辑简单
Thumb指令集
高效的指令系统
Thumb架构扩展
3级流水线
冯诺依曼体系
64位结果
实例:ARM7TDMI
ARM状态,处理器执行32位的字对齐的ARM指令
Thumb状态,处理器执行16位的、半字对齐的Thumb指令。程序计数器PC使用位1选择另一个半字
两种
ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容
ARM指令集和Thumb指令集都有相应的状态切换命令
ARM处理器在开始执行代码时,只能处于ARM状态
通过BX指令(分支和交换指令)在ARM状态和Thumb状态之间切换实例:将跳转地址放入寄存器R0;为切换状态修改最低位(1表示切换为Thumb,0表示切换到ARM)
转换方式
工作状态
程序不能访问有些受保护的资源只能通过异常的形式来改变CPU的当前运行模式
User模式
非特权模式
与User模式的运行环境一样但是它可以不受任何限制的访问任何资源该模式主要用于运行系统中的一些特权任务
System模式
IRQ模式:处理普通中断
Supervisor模式:操作系统保护模式处理软件中断(SWI)、reset
Abort模式:处理存储器故障、实现虚拟存储器和存储器保护
Undefined模式:处理未定义的指令陷阱,支持硬件协处理器的软件仿真
特权模式(可以存取系统中的任何资源)
异常模式:主要是在外部中断或者程序执行非法操作时会触发
软件控制(系统调用)异常(CPU内部)外部中断(中断控制器)
方法
用户和系统模式并不通过异常进入
内核级的中断使能也要考虑在用户模式进行。过早地打开中断可能会造成系统死机
注:
模式切换
工作模式
R0~R7为未分组的寄存器,对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。
R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。
寄存器R13、R14分别有6个分组的物理寄存器一个用于用户和系统模式,其余5个分别用于5种异常模式
在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。
寄存器R13常作为堆栈指针(SP)
在每种模式下,模式自身的R14版本用于保存子程序返回地址
发生异常时,将R14对应的异常模式版本设置为异常返回地址
R14为链接寄存器(LR)
读取的值是处理器正在取指的地址值的改变将引起程序执行顺序的变化,这有可能引起程序执行中出现一些不可预料的结果
寄存器R15被用作程序计数器,也称为PC
31个通用寄存器
CPSR(当前程序状态寄存器),CPSR可在处理器任何模式下被访问它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位每一种异常模式下又都有一个专用的物理状态寄存器,称为SPSR(备份的程序状态寄存器)异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR
程序状态寄存器(CPSR/SPSR)
6个状态寄存器
Thumb状态下的寄存器集是ARM状态下寄存器集的子集
程序员可以直接访问8个通用的寄存器(R0~R7),程序计数器PC、堆栈指针SP、链接寄存器LR和当前状态寄存器CPSP
在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分但可使用汇编语言程序受限制地访问这些寄存器,将其用作快速的暂存器
Thumb状态下的寄存器组织
寄存器
当正常的程序执行流程发生暂时的停止时,称之为异常(例如处理一个外部的中断请求或发生存储器故障)
在处理异常之前,当前处理器的状态必须保留,以便当异常处理完成之后,当前程序可以继续执行
原则
软件中断未定义指令陷阱(它不是真正的“意外”事件)系统复位(它在逻辑上发生在程序执行前而不是在程序执行中,尽管处理器在运行中可能再次复位)外部事件
原因
当异常发生时,系统执行完当前指令后,将跳转到相应的异常处理程序处执行异常处理,异常处理完成后,程序返回
机制
同步异常是由内部事件(如处理器指令运行产生的事件)引起的异常
按同异步
总是返回到下一条指令
异步
来自I/O设备的信号
中断
同步
有意的异常
陷井
可能返回到当前指令
潜在可恢复的错误
故障
不会返回
不可恢复的错误
终止
按原理
将CPSR的内容保存到将要执行的异常对应的SPSR中
设置CPSR模式控制位CPSR[4:0],使处理器进入相应的执行模式
CPSR[5] = 0,保障在ARM状态下执行
设置中断标志位(CPSR[7]=1),禁止IRQ中断
当进入Reset或FIQ模式时,还要设置快速中断标志位(CPSR[6]=1),禁止FIQ中断
设置当前状态寄存器CPSR中的相应位
将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14中
给程序计数器(PC)强制赋值,使程序从相应的矢量地址开始执行中断处理程序
复位异常处理程序执行完后不需要返回,因为系统复位后将开始整个用户程序的执行
其他异常一旦处理完毕,必须恢复用户任务的正常执行,要求异常处理程序能精确恢复异常发生时的用户状态
说明
所有修改过的用户寄存器必须从处理程序的保护堆栈中恢复(即出栈)
将SPSR_mode寄存器内容复制到CPSR中,使得CPSR从相应的SPSR中恢复,即恢复被中断程序的工作状态
根据异常类型将PC变回到用户指令流中相应指令处
步骤
返回
过程
异常向量表中指定了各异常向量与其处理程序的对应关系
每个异常对应的向量表的4个字节的空间中存放一个跳转指令或者一个向PC寄存器中赋值的数据访问指令
通过这两种指令,程序将跳转到相应的异常处理程序处执行
存储器的前8个字中除了地址0x00000014之外,全部被用作异常矢量地址
异常向量表
7种异常类型、优先级、对应工作状态
FIQ 模式有5个额外的私有寄存器(r8-r12)中断处理必须保护其使用的非私有寄存器
FIQ向量位于中断向量表的最末,可以使中断处理程序可从中断向量处连续执行
FIQ比IRQ快的原因
ARM的异常
地址空间、存储器格式、存储器访问对准、存储器映射I/O
面临的问题
字:32位,需4字节对齐
半字:16位,需2字节对齐
字节:8位,可以任意地址对齐
数据类型
大端模式:字数据的高位字节存储在低地址中,低位字节存放在高地址中
小端模式:字数据的低位字节存储在低地址中,高位字节存放在高地址中
存储模式
存储器映射I/O
AHB(Advanced High-performance Bus):用于连接高性能系统模块支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟沿
ASB(Advanced System Bus):用于连接高性能系统模块,它支持突发数据传输模式
APB(Advance Peripheral Bus):是一个简单接口,支持低性能的外围接口
片上总线
ARM系列微处理器
基于ARM Cortex-M3的内核开发的芯片,主要面向低成本低功耗的领域
内核CPU,系统时钟发生器,复位电路,程序存储器,数据存储器
能引发中断的事件
中断源
每个中断源都有与之对应的中断标志位一旦中断发生,标志位被置位。若标志位被清除,对应中断便不会再被响应因此,中断服务程序最后要将对应的中断标志位清零
中断标志位
设置相应的中断屏蔽位,禁止CPU响应某个中断
中断屏蔽
有多个中断时判断谁先响应
中断优先级
在执行中断程序时,插入的新的中断
中断嵌套
名词
保护现场找到该中断对应的中断服务器程序的地址(中断向量表)执行对应中断响应程序还原现场
处理过程
更好更快地利用有限的系统资源解决系统响应速度和运行效率的一种控制技术
应用程序不必关心中断的发生与处理
中断服务程序不必关心应用程序执行状态
增加程序执行的不确定性和时间长度
抢占正在使用的资源
中断嵌套会增加栈空间
中断基本概念
NVIC集成在ARM Cortex-M3内核中与中央处理器核心CM3Core紧密耦合从而实现低延迟的中断处理和高效地处理晚到的较高优先级的中断。
快;标准化
嵌套向量中断控制器NVIC
所有IO口都可作为外部中断使用
STM32F103各个中断对应的中断服务程序的入口地址统一存放在STM32F103的中断向量表中STM32F103的中断向量表,一般位于其存储器的0地址处。
STM32中断向量表
STM32所有的中断服务函数,在该微控制器所属产品系列的启动代码文件中都有预先定义
STM32中断服务函数
在通用I/O引脚上产生中断∕事件请求(外部中断)
每个外部中断∕事件输入线都可以独立地配置它的触发事件(上升沿、下降沿或双边沿)并能够单独地被屏蔽
每个外部中断都有专用的标志位(请求挂起寄存器),保持着它的中断请求
可以将多达112个通用I/O引脚映射到16个外部中断∕事件输入线上
STM32外部中断/事件控制器EXTI
STM32的中断系统
中断程序的优先级、使能设置
中断控制
上位机调试与烧写程序的接口
调试接口
通用输入输出端口,可以理解为软件可控制的引脚
浮空输入上拉输入下拉输入模拟输入
输入
开漏输出推挽输出复用推挽输出复用开漏输出
输出
端口复用功能:一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚,最大限度的利用端口资源
端口重映射功能:可以把某些功能引脚映射到其他引脚
功能
直接操作ODR寄存器(置1或清0)
操作BSRR和BRR寄存器(写1完成)
对芯片底层的寄存器进行直接操作
使用官方提供的标准函数库
GPIO端口操作方式
把每个比特膨胀为一个32位的字,这样就可以映射到一个地址上,方便控制,简化跳转的判断
位带操作(位绑定)
通用输入输出口:GPIO
传输原理:数据各个位同时传输
优点:速度快
缺点:占用引脚资源多
并行通信,是指使用多条数据线传输数据。并行通信时,各个位(bit)同时在不同的数据线上传送,数据可以字或字节为单位并行进行传输。
传输原理:数据按位顺序传输。
优点:占用引脚资源少
缺点:速度相对较慢
串行通信,是指使用一条数据线,将数据一位一位地在这条数据线上依次传输。
串并行
单工通信,是最简单的一种通信方式。数据只能单向传送
半双工通信,指在同一条通路上数据可以双向传输,但在同一时刻这条通路上只能有一个方向的数据在传输
全双工通信,是指使用不同通路实现数据两个方向的传输,从而使数据在两个方向上可以同时进行传送。它要求发送设备和接收设备都有独立的接收和发送能力。
单半双
同步通信,通过在发送端和接收端之间使用共同的时钟从而使得它们保持“协调”。虽多占了一根IO线,数据传输速度快,适于需要高速通信的场合
异步通信,是指在发送端和接收端之间不存在共同的时钟。虽然传输速率远低于同步通信,但在发送端和接收端无需额外的时钟线。
同异步
通信基本概念
UART采用TTL/CMOS的逻辑电平标准表示数据,用高电平表示逻辑1,用低电平表示0。
物理层:规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬件部分。
数据传输方式:UART数据是按照一定格式打包成帧,以帧为单位在物理链路上进行传输
UART以115.2Kbps的速率使用8个数据位、奇校验、1个停止位的数据格式传输一个大小为1K字节的文件所需时间为: (1024*(8+1+1+1))/(115.2*1000) = 97.8ms
数据传输速率:用比特率或者波特率来表示
协议层:协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。
串口通信协议
UART(通用异步收发器)是最常见、最方便、使用最频繁的、与外围设备(如LCD、传感器等)或其他微控制器进行交换数据的通信接口
UART
在具备UART异步全双工串行通信传输基本功能的同时,还具有同步单向通信的功能
USART1位于高速APB2总线上,其他的USART和UART位于APB1总线上
全功能可编程串行接口特性:数据位(8或9位);校验位(奇、偶或无);停止位(1或2位);支持硬件流控制(CTS和RTS)
自带可编程波特率发生器(整数部分12位、小数部分4位),最高传输速率可达4.5Mbps
两个独立带中断的标志位:发送标志位TXE(发送数据寄存器空)和接收标志位RXNE(接收数据寄存器非空);
支持DMA传输(直接内存访问,不经过CPU处理)
特性
USART
用printf函数将数据格式化为一个字符串,将其发到串口,使用串口输出函数(fput)将字符写入串口缓冲区
串口通信中使用printf和scanf
编程
串行通信接口
外设(功能部件)
时钟
STM32处理器芯片
典型芯片讲解
嵌入式系统
0 条评论
回复 删除
下一页