姓名:王天浩 || 学号:22009200221
文章转载自知乎:嵌入式系统知识点总结【1-12章】 - 知乎 (zhihu.com)
第一章 嵌入式系统概述
**1、嵌入式系统的定义及特点**
定义
从广义的角度:嵌入式系统是一切非PC和大型机的计算机系统
从应用的角度:嵌入式系统是以应用为中心,以计算机技术为基础,采用可剪裁软硬件,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
从技术的角度:嵌入式系统是一个以应用为中心、以计算机技术为基础,并融合微电子技术、通信技术和自动控制技术,而且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗和应用环境有特殊要求的专用计算机系统。
特点
较长的生命周期
与具体嵌入的产品同步:导入期→成长期→成熟期→衰退期
不易垄断
将计算机技术、电子技术与各行业的具体应用相结合的产物
资金密集、技术密集、高度分散、不断创新的知识集成系统
**2、嵌入式系统中使用的操作系统一般是实时操作系统**
例如
VxWorks Windows CE pSOS QNX uc/OS HOPEN
DeltaOS
**3、嵌入式系统的硬件组成部分包括那些**
嵌入式处理器(核心)
嵌入式存储器
嵌入式I/O设备
嵌入式I/O接口
**4、嵌入式系统的分类:按有无操作系统及实时性分**
按软件(有无嵌入式操作系统)划分
无操作系统控制的嵌入式系统
小型操作系统控制的嵌入式系统
大型操作系统控制的嵌入式系统
按实时性划分
非实时嵌入式系统 不具备实时性要求的嵌入式系统(温湿度计)
软实时嵌入式系统 外部事件在截止期限到达时偶尔未得到及时处理并不会带来致命失误的嵌入式系统(DVD播放器、机顶盒)
硬实时嵌入式系统 外部事件在截止期限到达时偶尔未得到及时处理,会带来致命失误的嵌入式系统(导弹控制系统、雷达导航系统)
**5、常见的嵌入式系统应用领域**
军事电子 科学探测 工业控制 智能仪表 汽车电子 路由器/交换机/防火墙 信息家电 消费电子
**6、哈佛结构及冯诺依曼结构定义**
指令与数据分开存储在不同的存储空间,使得指令读取和数据访问可以并行处理,显著提高了系统性能,但需要较多数量的总线。大多数嵌入式处理器都采用哈佛结构。
指令和数据不加以区分,都通过数据总线进行传输。因此,指令读取和数据访问不能同时进行,数据吞吐量低,但总线数量相对较少且管理统一。大多数通用计算机的处理器(如Intel X86)和嵌入式系统中的ARM7处理器均采用冯诺依曼结构。
**7、哈佛结构及冯诺依曼结构区别**
哈弗结构指令与数据分开存储在不同的存储空间,具有不同的宽度,独立编址和访问可同时读指令和数据;冯诺依曼结构指令和数据存储在同一存储空间,统一编制访问,具有相同的宽度。
哈弗体系结构总线数量较多,冯诺依曼结构总线数量相对较少。
哈弗结构相对冯诺依曼结构执行效率较高
**8、嵌入式编程中为什么要加while(1)**
防止程序跑飞,因为很多时候执行完某段程序后单片机的程序指针PC(就是程序指针)并不会停止,仍然会继续从ROM中读取指令并执行,这样一来可能会出现程序跑飞的情况,进而出现不确定的结果,加个while(1)就能让程序在执行完后在原地循环,相当于停在原地,防止跑飞。
第二章 嵌入式系统开发
**1、嵌入式系统开发过程**
第1步 嵌入式系统需求分析(前期)成果物嵌入式系统规格说明书
第2步 嵌入式系统设计(中期) 系统设计中包括体系架构设计、软硬件划分、硬件设计
第3步 嵌入式系统实现(中期)
第4步 嵌入式系统测试(中期)
第5步 嵌入式系统发布(后期)
**2、嵌入式系统硬件设计包括哪些**
硬件设计包含以下几个部分:
1嵌入式处理器的选择 考虑因素:处理器性能(时钟频率,寄存器大小)、功耗、成本
2外围设备的选择 考虑因素:根据嵌入式系统需求规格说明书确定相应外围设备、外设性能参数、电源电压范围
3.硬件和仿真工具的选择 选择满足处理器,外设等选择要求的集成电路芯片。如果没有,PCB自己画电路去吧。
**3、嵌入式系统的软件设计包括哪些**
首先进行嵌入式软件架构设计,分为有操作系统的软件架构和无操作系统的软件架构。其次再进行嵌入式软件模块的划分,如果架构是无操作系统,则进行主模块、子模块的划分,如果架构是有操作系统,择进行实时性、资源需求、任务粒度的确定。
**4、嵌入式系统开发工具的组成**
1.编辑器 编辑源代码
2.编译器 用于在嵌入式应用程序交叉编译阶段根据不同目标机的处理器芯片来产生运行于目标机上的目标文件。通用编译器:GNU 专用编译器:ARM,MIPS
3.链接器 把所有的目标文件和相关的库函数组合成一个可重定址的目标程序文件,该文件由txt段(代码)、data段(初始化的全局变量)和bss段(未初始化的全局变量)构成。
4.定址器 根据预设的描述各段在存储器中地址信息的脚本文件,对可重定址的目标程序文件的每个段指定物理内存地址,并输出包含二进制内存映像的可执行文件
5.调试工具 用于在嵌入式应用程序交叉调试阶段进行代码调试软件仿真器(基于宿主机的调试)
ROM监控器
ROM仿真器
在线仿真器
片上调试 边界扫描寄存器JTAG
**5、嵌入式系统开发环境**
交叉编译环境:宿主机-仿真器-目标机
第三章
ARM Cortex-M3处理器由Cortex-M3内核和调试系统两部分组成。
**1、Cortex M3的总线类型**
I-CODE总线:用于从代码存储区取指令和向量
D-CODE总线:用于对代码存储区进行数据访问
系统总线:用于访问内存和外设
私有外设总线:用于访问私有外设,主要是访问调试组件。
**2、Cortex M3的总线接口类型**
I-CODE总线 D-CODE总线 系统总线 外部私有外设总线 调试访问端口总线
**3、Cortex M3的寄存器及其作用**
1.通用寄存器R0-R12:用来进行数据操作
2.堆指针寄存器R13(SP寄存器):被用作堆栈指针,用于访问堆栈。
3.链接寄存器:调用子程序时保存返回地址。
4.程序计数器:用于存放下一条执行的指令的地址。
5.特殊功能寄存器:预定义功能
**4、Cortex M3的工作状态、特权分级及操作模式**
特权分级:
1. 用户级 不能执行特权级指令(如MSR/MRS)
2. 特权级 可以执行所有指令,访问MPU限定外所有存储空间
操作模式
1. 线程模式:普通应用程序的代码运行模式
2. 处理者模式:中断服务程序或OS内核的代码运行模式
**5、Cortex M3的中断与异常的处理过程**
1异常响应 (入栈 取向量 更新寄存器)
2执行异常程序
3异常返回
**6、Cortex M3的双堆栈及其作用**
ARM Cortex-M3有两个堆栈:MSP主堆栈和PSP进程堆栈
双堆栈机制可防止用户程序的堆栈错误破坏os使用的堆栈
**7、Cortex M3的存储映射**
背书上p108页图
**8、位带操作的作用**
位带操作使代码量减少,防止错误写入。
**9、大小端格式**
小端格式:将高字节数据存放到高地址,低字节数据存放到低地址,高高低低
大端格式:将高字节数据存放到低地址,低字节数据存放到低地址,高低高低
Cortex-m3既支持小端模式,也支持大端模式,基于Cortex-m3的处理器大多数情况下使用小端模式。
第五章
**1、STM32 F103系列微控制器中GPIO端口特性**
总共112个多功能双向i/O引脚,每个端口有16个I/O引脚
端口号以大写字母命名,从A到G.
**2、GPIO的工作模式**
输入浮空
输入上拉
输入下拉
模拟输入
开漏输出
推挽输出
推挽复用功能
开漏复用功能
**3、GPIO的引脚复用功能重映射**
用户根据实际需要可以把某些外设的“复用功能”从“默认引脚”转移到“备用引脚”上,这就是外设复用功能的I/O引脚重映射。
**4、GPIO常用库函数**(引脚的选择、工作模式、速度的设置及引脚的置位、复位与数据的读取)
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHZ;
GPIO_SetBits(GPIOA,GPIO_Pin_8);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8);
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8);
GPIO初始化过程及使用方式
GPIO_Init TypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHZ;
GPIO_Init(GPIOA,&GPIO_InitStructure);
第六章
**1、嵌入式系统中延时实现的方式及其优缺点**
1.完全硬件实现
优点:使用电容及电阻即可完成特定的振荡延时作用
缺点:延时时间无法改变
2纯软件方式
优点:实现简单
缺点:由于不同的微控制器,每条指令执行的时间不一样,很难做到精确延时
cpu被占用,利用率不高。
3. 微控制器中的可编程/可定时计数器
优点:通用强,用户可编程,可重复利用,不占用cpu,成本低
**2、STM32 F103中的基本定时器、通用定时器及高级定时器的区别(包括所在总线及功能区别)**
总线:基本定时器APB1、通用定时器APB1、高级定时器APB2
功能区别:基本定时器相对通用定时器和高级定时器,无外部事件计数,定时器或触发级联、4个独立的输入捕获、输出比较通道、单脉冲输出方式等.。通用定时器相比高级定时器少了刹车信号输入,没有7路3对pwm互补输出带死区产生。P252
**3、定时器的时钟源有哪些?**
基本定时器的时钟
来源于内部时钟CK_INT,内部时钟CK_INT来源于RCC的TIM_CLK,TIM_CLK来源于APB1的分频输出。 TIM6.TIM7
通用定时器的时钟源
内部时钟CK_INT、内部触发输入ITRX、外部输入捕获引脚TIx、外部触发输入引脚。TIM2-TIM5 APB1
高级定时器的时钟源
TIM1和TIM8的内部时钟CK_INT的来源TIMxCLK来自于APB2的预分频器的输出。
**4、定时器的工作模式**
基本定时器(只能工作在向上计数模式)
计数模式
向上计数:计数器在计数器时钟作用下累加,从0开始计数到自动重装在寄存器TIMx_ARR的预设值。
通用定时器
计数模式
向上计数:计数器在计数器时钟作用下累加,从0开始计数到自动重装在寄存器TIMx_ARR的预设值。
向下计数:计数器在计数器时钟作用下从自动重装在寄存器TIMx_ARR预设值开始向下计数到0。
双向计数:先向下计数然后向上计数,或相反
输出比较模式
输出比较模式用于控制一个输出波形或指示已经持续的一段时间。
PWM输出模式
PWM(Pulse Width Modulation),脉冲宽度调制,简称脉宽调制,利用微控制器的数字输出来对模拟电路进行控制
TIM6和TIM无PWM输出 TIM1和TIM8可以同时产生7路PWM输出; TIM2-5可以同时产生4路PWM输出。
输入捕获模式
PWM输入模式
单脉冲模式
同步(接力模式)
**5、PWM的作用及其实现方式**
作用:利用微控制器的数字输出来对模拟电路进行控制
实现方式:
1传统的数字电路方式2.微控制器普通I/O模拟方式3.微控制器的PWM直接输出模式。
**6、定时器中预分频、自动重装载、捕获/比较寄存器的初始值的设置**
捕获/比较寄存器预设值为A,自动重装载寄存器的预设值N,
,PWM输出信号的占空比为A/(N+1)
**7、定时器延时时间的计算**
延时时间=(Timx_ARR+1)*(TIMx_PSC+1)/TIMxCLK
例:
以时钟频率72MHZ为例,要计数500us,则预分频值和计数值为多少?
解:时钟频率72MHZ,其时钟周期为1/72000000 s,500us则需要500*72个时钟周期。若预分频值为71,则计数器时钟频率为1MHZ,时钟周期为1/1000000s, 500us需要500个时钟周期,则计数值为499.
**8、定时器相关库函数的使用**(arr,psc及ccr值的设置,定时器中断的使用)
以精确定时led闪烁(熄灭500ms,亮500ms)为例
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_TimeBaseStructure.TIM_Prescaler=3600-1;
TIM_TimeBaseStructure.TIM_Period=1000-1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_Init(Tim2,&TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
TIM_Cmd(TIM2,ENABLE);
while(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update)==RESET);
以pwm输出为例
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 1-1; //0-65535
TIM_TimeBaseStructure.TIM_Period = 720-1; //0-65535
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
//PWM Output Active(during the TIM_Pulse) Polarity
TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
TimOCInitStructure.TIM_Pulse =72;
//Enable Output State
TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
//Initialize TIM1_CH1
TIM_OC1Init(TIM1, &TimOCInitStructure);
定时器中断的使用
配置中断
NVIC_Config()
{
NVIC_InitStructure.NVIC_IRQNChannel=TIM2_IRQn;
}
打开TIM中断
TIM_ITConfig(TIM2,ENABLE)
——————————————————————————————————————————————————