240328Note: em - arm
Opened this issue · 0 comments
Geekiter commented
1.ARM处理器与中断
1.1 CPU的内部结构?
CPU的内部结构大致可以分为?
- 控制单元(指令寄存器、指令译码器、操作控制器)
- 运算单元(算数逻辑单元)
- 存储单元(专用寄存器和通用寄存器)
- 时钟
1.2 CPU跟内存、虚拟内存、硬盘的关系
- CPU要调用的程序和数据来自硬盘,但是CPU又不能直接读写硬盘上的系统、程序和数据,所以必须先将硬盘的内容存储在内存中,才能被CPU读写
- 内存是一个中转站,对计算机的运行速度有较大的影响
- 当系统需要的内存空间大于实际的物理内存空间时,就需要用到虚拟内存。虚拟内存可以将部分硬盘空间模拟成内存空间,将暂时不运行的程序和不使用的数据存储到硬盘上,需要时再将其存储到内存上。
1.3 ARM结构处理器可以分为哪几类?
- 嵌入式微处理器
- 由通用计算机的CPU演变而来,位数在32位以上,具有较高的性能
- 嵌入式微控制器
- 又成单片机,一般以某一种微处理器内核为核心,芯片内部集成ROM、RAM、总线、定时/计数器、I/O、A/D等各种必要的功能和外设
- 嵌入式DSP
- 嵌入式数字信号处理器,硬件结构和指令进行特殊设计,非常擅长高速实现各种数字信号处理运算(如数字滤波、频谱分析)
1.4 嵌入式微处理器和DSP有什么区别?
- 微处理器偏控制、DSP偏运算
- 微处理器外围接口丰富,标准化、通用性、功耗控制等做的更好,适用于消费电子、家用电器等控制领域
- DSP对系统结构和指令做了优化,能进行大量数据的快速计算,适用于音视频处理等领域
1.5 ARM处理器有哪些工作状态?ARM指令和Thumb指令有什么区别?
- ARM处理器共有ARM、Thumb/Thumb-2、调试三种状态
- ARM指令是32位,较全面;Thumb指令是16位,较精简
- Thumb-2,Thumb-2状态兼容16位和32位指令,具有Thumb-2计数的ARM处理器无需在ARM和Thumb-2状态之间切换
- 调试状态,处理器处于停机调试
1.6 RISC精简指令集计算机和CISC复杂指令集计算机的区别
- RISC控制器多采用硬件连线控制方式,以期更快的执行速度;而CISC控制器绝大多数采用微程序控制方式
- RISC只有加载和存储指令可以访问内存,数据处理指令只对寄存器的内容操作,为了加速程序的运算,RISC会设置多组寄存器,并指定特殊用途的寄存器,因此通用寄存器数量较CISC多。CISC架构允许数据处理指令对内存进行操作,因此需要的寄存器数量比较少。
- RISC大多数是在一个时钟周期内完成,且指令长度统一、数量少;而CISC的复杂指令通过CPU内的微码来完成,需要多个时钟周期,而指令长度不一、数量多
- RISC在实现一个功能的时候,需要的指令数目多,编译器设计就更复杂;CISC的指令丰富,它的编译器可以少做很多事
- RISC较CISC更容易实现指令流水线,因为其指令大多在一个时钟周期内完成。
1.7 ARM内部传输数据的总线有哪些?
ARM内部传输数据采用ARMA总线,共4个版本
- AMBA1:ASB、APB
- AMBA2:AHB、APB
- AMBA3:AHB、AXI、ATB、APB
- AMBA4:AXI、ATB、ACE、APB
1.8 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供了一种扩展:让标准C支持中断。具体表现是,产生了一新的关键字_interrupt,下面的代码就是使用了_interrupt关键字去定义了一个中断服务子程序ISR,这段代码有什么问题
__interrupt double compute_area(double radius){
double area = PI * radius * radius;
printf("Area = %f", area);
return area;
}
- 对于单片机来说,ISR不能传递参数
- 对于单片机来说,ISR不能有返回值
- 在许多的处理器/编译器中,浮点运算一般都是不可重入的。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。
- 与第三点一样,printf()经常有重入和性能问题。
- 重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等中断的时候会发生重入的现象。以下情况之一的多数是不可重入函数:
- 使用了静态数据结构
- 调用了malloc或free
- 调用了标准I/O函数,标准IO库很多实现都以不可重入的方式使用全局数据结构
- 进行浮点运算。许多的处理器/编译器中,浮点一般都是不可重入的,浮点运算大多使用协处理器或者软件模拟来实现
1.9 简述处理器中断处理的过程
处理器在中断处理的过程中,一般分为以下几个步骤:
- 中断请求
- 中断响应
- 保护现场
- 中断服务
- 恢复现场
- 中断返回
1.10 保护现场、恢复现场的过程?
- 保护现场
- 中断进栈:首先将r0-r7快速中断或r0-r12其他中断push进堆栈中保存,并将堆栈指针保存在对应中断模式的R13(SP)中
- 保存下一条指令:把即将执行的下一条指令(PC-4)的地址保存到对应中断模式的R14(LR)中;把CPSR的值保存到对应中断模式的SPSR中,以实现对处理器当前状态、中断屏蔽及各标志位的保护
- 设置CPSR的相应位:设置CPSR的相应位:设置CPSR[4:0]的5位以相应的工作模式;CPSR[5] = 0 切换到ARM状态;设置CPSR[7] = 1禁止IRQ中断;如果进入复位模式或FIQ模式,还要设置CPSR[6] = 1 以禁止FIQ中断
- 执行中断程序:给程序计数器PC强制赋值,转入中断向量,执行相应的中断服务程序
- 恢复现场
- 将原来保存在堆栈的R0-R12或R0-R7 POP出栈,赋值给相应的寄存器
- 将LR的值赋值给PC,将SPSR的值赋值给CPSR中,恢复被中断的程序状态
1.11 复位中断与其他中断有什么不同?
- 当中断产生后,复位中断立即中止当前指令的执行,其余情况都是当处理器完成当前指令后,再去响应中断
- 如果是复位中断,系统自动从0x00000000(8个0)开始重新执行程序,无需中断返回
1.12 什么是中断向量?什么是中断嵌套?
- 中断向量:中断服务子程序的入口地址
- 中断嵌套:中断系统正在执行一个中断服务程序时,有另一个优先级更高的中断源提出请求,这时会暂停当前正在执行的级别较低的中断源的服务程序,处理级别更高的中断源。处理完毕后再返回到被中断了的中断服务程序。
1.13 外部中断请求IRQ和快速中断请求FIQ的异常向量地址分别为?
0x0000 0018,0x0000 001C
1.14 中断的优缺点
- 优点:实现CPU和I/O设备的并行,提高CPU的利用率和系统的性能
- 缺点:中断处理过程需要保护现场、恢复现场,整个过程需要一定的时间和空间开销。如果中断的频率太高,会降低系统的性能
1.15 中断服务程序能不能有参数和返回值?
- 在单片机裸机程序中,中断服务既不能有参数,也不能有返回值
- 但是在带操作系统的嵌入式系统中,中断服务程序可以有参数,也可以有返回值
2. 寄存器与存储器
2.1 ARM的31个通用寄存器R0-R15中,程序计数器PC位R15,程序链接寄存器为R14,堆栈指针寄存器SP位R13.
2.2 寄存器掉电会丢失数据吗?
寄存器是由触发器构成的,因此掉电会丢失数据
2.3 NOR Flash与NAND Flash的区别和联系?
特性 | NOR Flash | NAND Flash |
---|---|---|
单位 | 字节 | 页,一般位512字节 |
容量 | 一般为1-16MB | 一般为8-128M |
成本 | 较高 | 较低 |
性能 | 比NAND Flash稍快 | 写入、擦除速度比NOR Flash快很多 |
接口 | 带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节 | 使用复杂的I/O来串行地存取数据,8个引脚用来传送控制、地址和数据信息 |
耐用性 | 最大擦写次数是十万次 | 最大擦写次数是一百万次 |
软件支持 | 写入和查出需要MTD,Memory Technology Devices,内存计数驱动程序,运行代码不需要任何软件 | 写入、擦除、运行代码都需要MTD |
2.4 SRAM、DRAM、SDRAM的区别
- SRAM:静态的随机存储器,加电情况下,不需要刷新,数据不会丢失,CPU的缓存就是SRAM
- DRAM:动态随机存储器,加电情况下,也需要不断刷新,才能保存数据,最为常见的系统内存
- SDRAM:同步动态随机存储器,即数据的读取需要时钟来同步,也用作内存
2.5 磁盘和硬盘的关系
磁盘包括软盘和硬磁盘,硬磁盘又叫硬盘
2.6 RAM是什么?
- RAM是随机存储器,速度快,可随机读写,但断电则丢失数据,一般用作内存
- RAM的种类有很多,常见的有SRAM、DRAM、SDRAM
2.7 ROM是什么?
- ROM是只读存储器,速度慢,不能直接与CPU进行交互,断电后数据部丢失,一般用来保存断电不丢失的程序
- 常见的ROM有,PROM、EPROM、EEPROM
2.8 SRAM跟DRAM的区别?
特性 | SRAM | DRAM |
---|---|---|
存储原理 | 触发器 | 电容 |
是否刷新 | 不需要 | 需要 |
运行速度 | 快 | 慢 |
存储成本 | 高 | 低 |
发热量 | 大 | 小 |
送行列地址 | 同时送 | 分两次送 |
破坏性读出 | 否 | 是 |
集成度 | 低 | 高 |
2.9 ARM在不同工作模式时使用的寄存器有所不同,但共同点是?
- R0-R7为公用的通用寄存器
- CPSR为公用的当前程序状态寄存器
- R15为公用的程序计数器PC
2.10 CPU要先对cache做什么,才能读取DMA数据?
答案:CPU要先对cache做一个invalidate作废操作,再从内存中读取数据到缓存,保证缓存和内存中数据的一致性,才能读取DMA数据。
解读:
- 为了正确进行DMA操作,DMA,direct memory access,必须进行必要的缓存操作,缓存操作分为invalidate作废和writeback写回
- DMA从外设读取数据供CPU使用,可先进行invalidate作废操作,这样一来,处理器在读取缓存中的数据前,会先从内存中读取数据到缓存,保存缓存和内容中数据的一致性
- DMA初始化设置由处理器提供数据时,可先进行writeback写回操作。这样一来,可以在DMA传输前将缓存的数据写回到内存中,保证内存和缓存中数据的一致性
2.11 大小端各自的优点是什么?
- 大端优点:符号位在低地址的第一个字节中,便于快速判断数据的正负和大小
- 小端优点:CPU做数值运算的时候是依次从内存的低位到高位取数据进行运算,这样运行效率更高。强制数据转换不需要调整字节内容,因为1、2、4字节数据的存储方式一样
2.12 缓存技术的作用是什么?
- 改善CPU与I/O设备间速度不匹配的矛盾
- 提高CPU和I/O设备之间的并行性,提高系统的吞吐量和设备的利用率
- 减少对CPU中断频率,放宽对中断响应时间的限制
2.13 缓存技术的种类
- 单缓冲
- 双缓冲
- 多缓冲
- 缓冲池
I/O接口,17
3.1 GPIO口一般有哪三个寄存器
以S3C2410为例,有控制寄存器、数据寄存器、上拉寄存器
- 控制
- 数据
- 上拉
3.2 GPIO的输入输出模式有哪些?
- 输入:浮空输入、带上拉输入、带下拉输入、模拟输入
- 输出:开漏输出、推挽输出、开漏复用输出、推挽复用输出
模式 | 解释 |
---|---|
浮空输入 _IN_FLOATING | 浮空输入,可以做KEY识别 |
带上拉输入_IPU | IO内部上拉电阻输入 |
带下拉输入_IPD | IO内部下拉电阻输入 |
模拟输入_AIN | 应用ADC模拟输入,或者低功耗下省电 |
开漏输出_OUT_OD | IO输出0接GND,IO输出1则悬空,需要外接上拉电阻才能输出高电平。当输出1时,IO口的状态由上拉电阻拉高,但同时IO口也可由外部电路拉低,可以通过输入数据寄存器读取电平变化,实现C51的IO双向功能 |
推挽输出_OUT_PP | IO输出0接GND,IO输出1接VCC,读输入值是未知的 |
复用功能的推挽输出_AF_PP | 片内外设功能(I2C的SCL,SDA) |
复用功能的开漏输出_AF_OD | 片内外设功能(TX1,MOSI,MISO,SCK,SS) |
3.3 请说明总线接口UART、USB、SPI、IIC的异同点
总线接口 | 串/并 | 同步/异步 | 速率 | 线路 | 线路 | 距离 | 大小端 |
---|---|---|---|---|---|---|---|
UART | 串行 | 异步 | 全双工 | 慢、最快只有1.5Mbps | 3线,RX、TX、GND | 远,RS-485可达1200m | 小端模式 |
USB | 串行 | 同步 | 半双工 | 快,USB 3.0可达5Gbps | 4线,Vbus,GND,D+,D- | 近,不超过5m | 小端模式 |
SPI | 串行 | 同步 | 全双工 | 快,可达50Mbps | 3线或4线,SCLK,SIMO,SOMI,SS | 远,可达10m | 大端模式 |
IIC | 串行 | 同步 | 半双工 | 慢,最快只有3.4Mbps | 2线,SCL,SDA | 近,不超过30cm | 大端模式 |
大端模式(Big Endian)和小端模式(Little Endian)是用于存储和访问多字节数据类型(如整数、浮点数等)的两种不同的方式。
-
大端模式:
- 在大端模式下,数据的高位字节(最高有效字节)存储在低地址处,而低位字节(最低有效字节)存储在高地址处。
- 举例来说,对于一个16位整数0x1234,大端模式下存储方式如下:
- 地址 | 数据
- 0x1000 | 0x12
- 0x1001 | 0x34
-
小端模式:
- 在小端模式下,数据的高位字节存储在高地址处,低位字节存储在低地址处。
- 举例来说,对于同样的16位整数0x1234,小端模式下存储方式如下:
- 地址 | 数据
- 0x1000 | 0x34
- 0x1001 | 0x12
总结起来,两种模式之间的主要区别在于字节的存储顺序。在大端模式下,数据的高位字节存储在低地址处,而在小端模式下,数据的低位字节存储在低地址处。这种差异主要影响了多字节数据类型的存储和访问方式,在进行数据交换或者与不同端模式的系统交互时需要注意转换。
3.4 什么是异步串行?什么是同步串行?
- 异步串行的特点:
- 以字符为单位传送信息,相邻两个字符间的间隔是任意长;即字符内部各位同步,字符间异步;
- 因为一个字符中的比特位长度有限,所以接收时钟和发送时钟只要相近就可以了
- 同步串行的特点
- 以数据块为单位传送信息,在一个数据块内,字符与字符之间无间隔;即字符内部各位同步,字符间也同步
- 因为一次传输的数据块中包含的数据较多,所以接收时钟与发送时钟需要严格同步
3.5 IIC总线时序图
- 时序总结
![[Pasted image 20240408202042.png]]
状态 | 动作 |
---|---|
总线空闲状态 | SCL和SDA均为高电平,接上拉电阻 |
启动信号,START | 在SCL保持高电平期间,SDA由高电平被拉低,由主控器发出 |
数据位传送,DATA | 在SCL保持高电平期间,SDA上的电平保持稳定,低电平为数据0、高电平为数据1。用法:主控器和被控器都可发出 |
应答信号:ACK | 在SCL保持高电平期间,SDA保持低电平,IIC总线上所有数据都是以8位字节传送的,发送起每发送一个字节,就在第9个时钟脉冲期间释放SDA高电平,由接收器反馈一个ACK |
非应答信号:NACK | 在SCL保持高电平期间,SDA保持高电平,如果接收器是主控制器,则它在收到最后一个字节后,发送一饿NACK,通知被控制器结束数据发送,并释放SDA(高电平),以便主控器发送一个STOP |
停止信号 | 在SCL保持高电平时间,SDA由低电平被释放(拉高),由主控器发出 |
- 写数据步骤:
- 主机发出一个启动信号START
- 主机发送7bit从机地址+1bit读写选择位,1表示读,0表示写
- 从机产生应答信号ACK
- 主机发送8bit从机寄存器地址
- 从机产生应答信号ACK
- 主机发送一个字节数据
- 从机产生应答信号ACK
- 主机发送一个停止信号STOP
- 读数据不走
- 主机发送一个启动信号START
- 主机发送7bit地址+1bit读写选择位,1表示读,0表示写
- 从机产生一个应答信号ACK
- 主机发送8bit从机寄存器地址
- 从机产生一个应答信号
- 主机再次发送一次启动信号START
- 主机再次发送7bit从机地址+1bit读写选择位,1表示读,0表示写
- 从机产生一个应答信号ACK
- 主机读取一个字节数据
- 主句产生一个非应答信号NACK,之后产生一个停止信号STOP
3.6 SPI的四种操作时序分别是什么?
SPI的时钟极性CPOL和时钟相位CPHA可以分别为0或1,由此构成了四种组合
- COPL=0,CPHA=0,空闲时SCLK为低电平,在第一个边沿开始采样
- CPOL=0,CPHA=1,空闲时SCLK为低电平,在第二个边沿开始采样
- CPOL=1,CPHA=0,空闲时SCLK为高电平,在第一个边沿开始采样
- CPOL=1,CPHA=1,空闲时SCLK为高电平,在第二个边沿开始采样
![[Pasted image 20240408211543.png]]
![[Pasted image 20240408211555.png]]![[Pasted image 20240408211602.png]]
![[Pasted image 20240408211611.png]]
3.7 了解总线方式是全双工类型,哪种总线方式的传输距离较短?
- UART、SPI是全双工类型
- IIC、USB传输距离较短
3.8 编写一个通用类型串口接收程序,如何实现判断未知设备的端口和波特率
- 判断端口,搜索计算机可用端口,逐个打开,分别定时1.5秒,有数据进来则认为是目标端口
- 波特率判断,将本机波特率分别设置为2400、4800、9600、19200、38600、57600、115200,每个波特率定时1.5秒,对收到的ASCII码进行分析,将小于等于127的认为是正常的字符,将大于127的认为是乱码,当正常字符数目大于等于10倍乱码数目则认为当前波特率为正确波特率,并终止往后搜索。另外,可以通过示波器进行判断。
3.9 串口如何发送浮点型数据
可将多字节的浮点数数据分解为单字节逐个发送,接收后组合还原。
- 使用共同体来分解
union {
float f;
unsigned long l;
} data_TX;
data_TX.f = 123.456
- 发送时发送4字节(小端模式、低位优先)
TX = (unsigned char) data_TX.l; //低8位
TX = (unsigned char) (data_TX l >> 8);
TX = (unsigned char)(data_TX l >> 16);
TX = (unsigned char)(data_TX l >> 24); //高8位
- 接收端也定义同样的结构体
union{
float f;
unsigned long l;
}
data_RX.l = RX;
data_RX.l |= RX;
data_RX.l |= RX << 8;
data_RX.l |= RX << 16;
data_RX.l |= RX << 24;
data_RX.f == data_TX.f
3.10 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 |
3.11 RS-232与RS-485的区别与联系
特性 | RS-232 | RS485 |
---|---|---|
抗干扰性 | 更弱 | 更强,因为RS-485采用差分传输 |
传输能力 | 50m,更短 | 1200,更远 |
通信能力 | 只允许一对一通信 | 允许多达128个收发器 |
传输速率 | 20Kbps | 10Mbps |
信号线 | RXD、TXD、GND三根组成全双工网络 | 半双工需要两根信号线,全双工需要4根信号线 |
电气电平值 | RS-232规定-5V--15V等于逻辑1,+5V~+15V为逻辑0,噪声容限为2V | A线电平比B线电平高200mV以上为逻辑1,低200mV以上为逻辑0 |
联系: |
- 都可以通过DB-9连接器连接
- 均可采用屏蔽双绞线传输
- 都是串行通信
- 通信方式都是全双工,一般RS-485是半双工
3.12 UART如何保证数据传输的正确性
- 在数据位的两端添加起始位、奇偶校验位、停止位等用于数据的同步和纠错
- 在接收端用16倍波特率对数据进行采样,取中间的采样值,很大程度上确保了采样数的正确性
3.13 保证数据无串扰,参数设置正确,但是串口A传输float类型给串口B,总是出现错误,可能是什么原因
可能是发送端和接收端的大小端不一致
3.14 什么吗MSB、LSB
- MSB,Most Signification Bit:最高有效位,是指二进制中最高值的比特
- LSB,Least Signification Bit:最低有效位,是指二进制中最低值的比特
3.15 UART一帧可以传5/6/7/8位,IIC必须是8位,SPI可以是8/16位
3.16 请列举常用的串行通信方式,简述串行通信和并行通信的不同之处,优缺点
- 异步通信UART和同步通信SPI、IIC、USB等
- 串行速度慢,但占用资源少,线间干扰小
- 并行速度快,但占用资源,线间干扰相对较大
3.17 CAN总线接口相对于RS-232接口,RS-485接口的优缺点是什么?
- CAN总线接口相对于RS-232接口的优点是抗干扰能力强、传输距离远。它采用差分传输,内置CRC校验,传输可靠性强
- CAN总线接口相对于RS-484接口的优点是构成多主系统,同一时刻可以有两个或两个以上的设备处于发送状态,适用于实时性要求高的工控领域。