7 嵌入式软件面试 — 嵌入式基础
7.1 嵌入式基础
问题1:GPIO的输入输出模式有哪些?()
浮空输入 | GPIO引脚没有上拉或下拉电阻,因此它们会处于浮动状态。这种模式通常用于读取外部信号,但容易受到噪声的干扰。 |
上拉输入 | 内部上拉电阻被激活,使得GPIO引脚在没有连接时默认为高电平。 |
下拉输入 | 内部下拉电阻被激活,使得GPIO引脚在没有连接时默认为低电平。 |
模拟输入 | GPIO引脚被配置为模拟模式,允许模拟信号直接输入到ADC |
开漏输出 | GPIO引脚只能输出低电平。要输出高电平,需要外部上拉电阻。 |
推挽输出 | GPIO引脚可以输出高电平和低电平,具有较好的驱动能力 |
开漏复用输出 | 结合了开漏输出和复用功能,允许GPIO引脚在开漏模式下作为特定外设功能使用。 |
推挽复用输出 | 结合了推挽输出和复用功能,允许GPIO引脚在推挽模式下作为特定外设功能使用。 |
问题2:介绍嵌入式系统总线()
微机中总线一般有内部总线、系统总线和外部总线。讲总线前,我们先明确一些概念,串行与并行、同步与异步、全双工与半双工。
系统总线:指连接计算机各部件的总线,系统总线通常包含数据总线(Data Bus)、地址总线(Address Bus)和控制总线(Control Bus)。数据总线用于传输数据,地址总线用于指定数据的来源或目的地的内存地址,控制总线用于传输控制信号,如读写指令、中断请求等。
内部总线:指芯片内部连接各元件的总线,例如寄存器之间和算术逻辑部件(ALU)与控制部件之间传输数据所用的总线。
外部总线:是计算机和外部设备之间的总线,如RS-232-C、RS-485、USB等,这些总线允许计算机与外部世界进行数据交换。
问题3:串行与并行()
串行与并行概念:串行是一个字节的数据,排成一行发送给接收设备。并行是一个字节的数据,排成一列发送给接收设备。那当然并行速率快、吞吐量大、不过消耗IO资源也很多。
串行与并行应用:串行口主要用在速度要求不高、有一定距离的传输场景,如UART,I2C通信;并行口多用于传输速率要求高、吞吐量大的场景,如FSMC,DVP等接口。
问题4:同步与异步()
同步通信:是指发送方和接收方在通信过程中需要保持步调一致,即发送方发送数据后必须等待接收方确认接收完毕。适用于需要严格时序控制的场景,例如实时控制系统。
异步通信:是指发送方和接收方不需要在通信过程中保持步调一致,发送方发送数据后不需要等待接收方的确认,可以继续执行其他任务。适用于通信双方不需要严格时序控制的场景,例如网络通信。
同步与异步区别:同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流,字节与字节之间没有间隙;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
问题5:单工、半双工和全双工()
单工:是指数据只能在一个方向上流动,即只能从发送方到接收方,而不能反向传输。
半双工:是指数据可以在两个方向上流动,但在同一时刻只能有一个方向的数据传输。
全双工:是指数据可以在两个方向上同时流动,即通信双方可以同时发送和接收数据。
7.2 常用通讯协议
问题6:UART()
通用异步收发传输器(UART):是一种串行异步收发协议,全双工通信,硬件连接比较简单,仅需要3条线, TX发送数据端,RX接收数据端,GND保证两设备共地。
UART通信的数据格式通常包括:
• 起始位:通常为0,标志数据传输的开始。
• 数据位:常见的数据位长度为8位,但也可以根据需要配置为5、6、7、9位等。
• 奇偶校验位(可选):用于错误检测,可以是奇校验、偶校验或无校验。
• 停止位:通常为1或2位,标志数据传输的结束。
UART通信的电气特性规定了信号的逻辑电平,通常是TTL电平,但在某些应用中可能需要转换为其他电平,如RS-232。
问题7:RS-232()
RS232通常使用DB9(9针)或DB25(25针)连接器,但实际应用中常用的信号线只有少数几根,如TXD(发送数据)、RXD(接收数据)和GND(地线)就能能实现简单的全双工通信过程。
RS323因为高电平+15V低电平-15V电位差30V容错空间大,抗干扰能力强。RS-232使用负逻辑,即逻辑“1”对应负电压(-3V至-15V),逻辑“0”对应正电压(+3V至+15V)。
因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接。一般用于工业设备直接通信电平转换芯片一般有MAX3232,SP3232。
问题8:RS-485()
RS-485 是一种串行半双工通信协议,是一种工业控制环境中常用的通讯协议,它具有抗干扰能力强、传输距离远的特点, RS-485 协议主要是把 RS-232 的信号改进成差分信号。
RS-485的工作原理基于差分信号传输,使用两根线来传输数,最大传输距离可达 1200 米,总线上可挂载 128 个通讯节点,而由于 RS-485 网络只有一对差分信号线,在同一时刻只能表达一个信号,所以它的通讯是半双工形式的。
RS-485是一种采用差分信号传输的串行通信标准,其电平定义如下:
- 逻辑"1"(正电平):当A线电平高于B线电平时,即A-B之间的电压差为+0.2V至+6V,表示逻辑"1"。
- 逻辑"0"(负电平):当B线电平高于A线时,即A-B之间的电压差为-0.2V至-6V,表示逻辑"0"。
- 不确定区域:当A-B之间的电压差在-0.2V至+0.2V之间时,RS-485接收器的输出是不确定的,这个区域通常被认为是无效的逻辑状态。
问题9:IIC()
I2C协议是一个允许多个 “从机” 芯片和一个或更多的 “主机” 芯片进行通讯的协议。实现I2C需要两根信号线完成信息交换,SCL时钟信号线,SDA数据输入/输出线它属于同步通信,由于输入输出数据均使用一根线,因此通信方向为半双工。
IIC接口为开漏输出,只能对外呈现低电平和高阻状态,通过外接上拉电阻,可以让接口获得输出高电平的能力,使接口可呈现高/低电平。
数据传输协议:主设备和从设备进行数据传输时遵循以下协议格式。数据通过一条SDA数据线在主设备和从设备之间传输0和1的串行数据。串行数据序列的结构可以分为:
- 开始位:当主设备决定开始通讯时,需要发送开始信号,并且执行以下过程:将SDA线由高电平切换成低电平;将SCL线由高电平切换成低电平;在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位。
- 地址位:地址位支持7bit、10bit,主设备如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址,故地址为主要用来辨识不同设备。
- 读写位由于I2C是半双工通讯,所以设备需要确定数据传输的方向,故引入了读写位。如果主设备需要将数据发送到从设备,则该位设置为 0;如果主设备需要往从设备接收数据,则将其设置为 1 ;
- 应答位:I2C最大的一个特点就是有完善的应答机制,从机接收到主机的数据时,会回复一个应答信号来通知主机表示“我收到了”。
- 数据位:I2C数据总线传输要保证在SCL为高电平时,SDA数据稳定,所以SDA上数据变化只能在SCL为低电平时。一次传输的数据总共有8位,由发送方设置,它需要将数据位传输到接收方。发送之后会紧跟一个ACK / NACK位,如果接收器成功接收到数据,则从机发送ACK。
- 停止位:当主设备决定结束通讯时,需要发送结束信号,需要执行以下动作:先将SDA线从低电压电平切换到高电压电平,再将SCL线从高电平拉到低电平。
问题10:CAN()
CAN总线,全称为Controller Area Network,即控制器局域网,CAN 总线具有的高可靠性和良好的错误检测能力。CAN总线特点:
- 多主方式:可以多主方式工作,网络上任意一个节点均可以在任意时刻主动地向网络上的其他节点发送信息,而不分主从,通信方式灵活。
- 速度快,距离远:CAN总线支持较高的数据传输速率,并且可以在较长的距离上稳定传输数据,这得益于其高效的通信协议和抗干扰能力。
- 具有错误检测和恢复功能:CAN总线使用循环冗余校验(CRC)等机制来检测数据在传输过程中是否出现错误。当检测到错误时,节点会发送错误帧,以通知网络上的其他节点。在检测到错误后,系统可以采取相应的措施,如重传数据,以确保数据的正确传输。
- 连接节点多:CAN总线理论上可以支持多达110个节点,这使得它非常适合大规模的网络通信。
闭环和开环总线网络:CAN总线物理层的网络形式主要有闭环总线网络和开环总线网络。
- 闭环总线网络是一种高速、短距离的网络,这种网络的最大特点是通信速率较高,可以达到125kbit/s到1Mbit/s。在1Mbit/s的通信速率下,总线长度最长可达40米。闭环网络的两端各需要一个120欧姆的电阻,以形成回路并提高抗干扰能力。
- 开环总线网络是一种低速、远距离的网络,这种网络的最大传输距离可达1km,最高通信速率为125kbit/s。与闭环网络不同,开环网络的两根信号线是独立的,不形成闭环,并且每根总线上各串联有一个2.2千欧的电阻。
从CAN通讯网络图可了解到, CAN 总线上可以挂载多个通讯节点,节点之间的信号经过总线传输,实现节点间通讯。由于 CAN 通讯协议不对节点进行地址编码,而是对数据内容进行编码的,所以网络中的节点个数理论上不受限制,只要总线的负载足够即可,可以通过中继器增强负载。CAN总线硬件电路一般包括:
• 微控制器(如51单片机):负责处理数据和控制通信。
• CAN控制器(如SJA1000):负责CAN协议的实现和数据帧的生成。
• CAN收发器(如PCA82C250):将CAN控制器的数字信号转换为适合在CAN总线上传输的电信号。
一些现代微控制器,如STM32系列,已经将CAN控制器集成到芯片内部,因此只需要外加一个CAN收发器,如SN65HVD230,来完成信号的转换。
CAN帧的种类:帧的种类有很多,其中错误帧、过载帧、帧间隔都是由硬件完成的,没有办法用软件来控制。对于一般使用者来说,只需要掌握数据帧与遥控帧。
数据帧 | 用于发送单元向接收单元传送数据的帧。 |
遥控帧 | 用于接收单元向具有相同 ID 的发送单元请求数据的帧。 |
错误帧 | 当CAN节点检测到错误时发送,用于通知网络上的其他节点存在错误。(硬件自动完成) |
过载帧 | 当CAN节点无法在当前的波特率下处理接收到的数据时发送。(硬件自动完成) |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开来的帧。(硬件自动完成) |
问题11:SPI()
SPI即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、 LCD 等设备与 MCU 间,要求通讯速率较高的场合。
SPI 通讯使用 3 条总线及片选线, 3 条总线分别为 SCK、 MOSI、 MISO,片选线为 SS,它们的作用介绍如下:
- SCK:时钟线,由主微控制器控制,用于同步数据传输。数据的发送和接收都是在SCK的时钟信号上升沿或下降沿进行的。
- MOSI:主设备数据输出,从设备数据输入线。主设备通过这条线向从设备发送数据。
- MISO:主设备数据输入,从设备数据输出线。从设备通过这条线向主设备发送数据。
- SS:从设备选择线,在SPI通信中,可以有多从设备,每台从设备都需要一条独立的SS线。SS线由主设备控制,用于激活特定的从设备。当SS线被拉低时,对应的从设备被选中并参与通信;当SS线为高电平时,从设备不参与通信。
SPI通信的时序:包括初始化、数据传输和传输结束三个阶段。在初始化阶段,主设备通过拉低SS线来激活从设备,并开始发送SCK时钟信号。数据传输阶段,主设备在SCK的上升沿或下降沿(取决于SPI模式)通过MOSI线发送数据,并通过MISO线接收从设备的数据。传输结束后,主设备停止SCK信号,并通过拉高SS线来取消对从设备的选中。整个过程中,数据的发送和接收是同步进行的,确保了高效的数据交换。
SPI通信四种不同的工作模式:这些模式由时钟极性(CPOL)和时钟相位(CPHA)两个配置参数决定,这两个参数的不同组合产生了四种不同的数据传输时序:
- 模式0(CPOL=0, CPHA=0):时钟空闲状态为低电平,数据在SCK的上升沿被采样,在下降沿改变。
- 模式1(CPOL=0, CPHA=1):时钟空闲状态为低电平,数据在SCK的下降沿被采样,在上升沿改变。
- 模式2(CPOL=1, CPHA=0):时钟空闲状态为高电平,数据在SCK的上升沿被采样,在下降沿改变。
- 模式3(CPOL=1, CPHA=1):时钟空闲状态为高电平,数据在SCK的下降沿被采样,在上升沿改变。
问题12:UART和TTL、RS-232、RS-485的关系?()
UART是一种具有协议特征的收发器/接口/总线,也就是说它是一个按照特定协议来收发数据的硬件,它规定了数据按照什么格式和时序来传输。
而TTL、RS-232、RS-485是三种不同的电气协议,是对电气特性的规定,作用于数据传输通路,但它并不包含对数据的处理方式。UART可以使用TTL电平,也可以使用RS-232、RS-485电平。
TTL(晶体管-晶体管逻辑电平) | 规定+5V(或>=2.4V)等于逻辑“1”,0V(或<=0.4V)等于逻辑“0”,噪声容限为0.4V。 |
RS-232 | 采用负逻辑传输,规定-5V ~ -15V等于逻辑“1”,+5V ~ + 15V为逻辑“0”,噪声容限为2V。 |
RS-485 | 采用差分传输,规定A线电平比B线电平高200mV以上时为逻辑“1”,A线电平比B线电平低200mV以上时为逻辑“0”。 |
问题13:CAN总线接口相对于RS-232、RS-485的优点是什么?()
(1)CAN总线接口相对于RS-232接口的优点是抗干扰能力强、传输距离远。它采用差分传输,内置CRC校验,传输可靠性强。
(2)CAN总线接口相对于RS-485接口的优点是能构成多主系统,同一时刻可以有两个或两个以上的设备处于发送状态,适用于实时性要求高的工控领域。
7.3 中断
问题14:简述处理器中断处理的过程()
处理器在中断处理的过程中,一般分为以下几个步骤:中断请求 -> 中断响应 -> 保护现场 -> 中断服务 -> 恢复现场 -> 中断返回。
问题15:复位中断与其他中断有什么不同?()
当中断产生后,复位中断立即中止当前指令的执行,其余情况都是当处理器完成当前指令后,再去响应中断。如果是复位中断,系统自动从0x00000000开始重新执行程序,无需中断返回。
问题16:什么是中断向量?什么是中断嵌套?()
中断向量:中断服务子程序的入口地址。
中断嵌套:中断系统正在执行一个中断服务程序时,有另一个优先级更高的中断源提出请求,这时会暂停当前正在执行的级别较低的中断源的服务程序,处理级别更高的中断源。处理完毕后再返回到被中断了的中断服务程序。
问题17:中断的优缺点?()
优点:实现CPU和I/O设备的并行,提高CPU的利用率和系统的性能。
缺点:中断处理过程需要保护现场、恢复现场,整个过程需要一定的时间和空间开销。如果中断的频率太高,会降低系统的性能。
问题18:中断服务程序能不能有参数和返回值?()
在单片机裸机程序中,中断服务程序既不能有参数,也不能有返回值。但是在带操作系统的嵌入式系统中,中断服务程序可以有参数,也可以有返回值。
7.4 寄存器与存储器
问题19:寄存器掉电会丢失数据吗?()
寄存器是由触发器构成的,因此掉电会丢失数据。
问题20:RAM和ROM()
RAM是随机存储器,速度很快,可随机读写,但断电则丢失数据,一般用作内存。RAM的种类有很多,常见的有SRAM、DRAM、SDRAM。
ROM是只读存储器,速度较慢,不能直接与CPU进行交互,断电后数据不丢失,一般用来保存断电不丢失的程序。常见的ROM有PROM、EPROM、EEPROM。
问题21:SRAM、DRAM和SDRAM的区别?()
类型 | 描述 |
SRAM | 静态随机存取存储器,速度快,容量小,成本高,用于高速缓存。 |
DRAM | 动态随机存取存储器,速度较慢,容量大,成本低,用于主内存。 |
SDRAM | 同步动态随机存取存储器,使用同步时钟,传输速率高。 |
问题22:ARM在不同工作模式时使用的寄存器有所不同,但共同点是?()
(1)R0~R7为公用的通用寄存器。
(2)CPSR为公用的当前程序状态寄存器。
(3)R15为公用的程序计数器PC。
嵌入式软件面试宝典包含简历制作、笔试准备、面试八股文、企业真题等。