Geekiter/geekiter.github.io

240328Note: em - arm

Opened this issue · 0 comments

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)是用于存储和访问多字节数据类型(如整数、浮点数等)的两种不同的方式。

  1. 大端模式

    • 在大端模式下,数据的高位字节(最高有效字节)存储在低地址处,而低位字节(最低有效字节)存储在高地址处。
    • 举例来说,对于一个16位整数0x1234,大端模式下存储方式如下:
      • 地址 | 数据

      • 0x1000 | 0x12
      • 0x1001 | 0x34
  2. 小端模式

    • 在小端模式下,数据的高位字节存储在高地址处,低位字节存储在低地址处。
    • 举例来说,对于同样的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接口的优点是构成多主系统,同一时刻可以有两个或两个以上的设备处于发送状态,适用于实时性要求高的工控领域。