1. 中断处理机制
核心内容:ARM架构中断需先注册中断,绑定对应的回调函数,才能实现中断响应;共支持7种中断类型,最常用的是IRQ(普通中断)和FIQ(快速中断)。
补充:FIQ响应速度快于IRQ,核心原因是FIQ拥有独立的寄存器组(避免上下文切换时保存/恢复寄存器的耗时),且优先级高于IRQ;实际应用中,FIQ多用于对实时性要求极高的场景(如工业采样的紧急异常处理、SSD主控的读写中断),IRQ用于普通的外设中断(如传感器数据接收、通信协议中断)。此外,中断注册时需注意中断优先级配置,避免高优先级中断被低优先级中断阻塞,同时要处理中断嵌套的异常情况,防止栈溢出。
2. Bootloader流程
核心内容:将Flash除特定区域(如Bootloader自身区域)外,划分为A区(运行区)和B区(下载校验区);固件先下载至B区,完成校验后,再搬运至A区运行;代码平时存储在Flash(非易失性,断电不丢失),运行时加载到RAM(读写速度快,提升运行效率)。
补充:① 校验环节:B区下载固件后,需通过CRC校验、MD5校验等方式,验证固件的完整性和正确性,防止固件损坏、篡改导致系统启动失败;② 搬运逻辑:搬运过程中需关闭中断,避免中断干扰导致搬运出错,搬运完成后需重置系统,确保A区固件正常启动;③ 异常处理:若B区固件校验失败,需保留原A区固件(避免系统无法启动),同时触发报警机制,提示固件下载异常。
3. 底层异常定位方法
核心内容:开发中遇到ARM CPU跑飞、栈溢出等问题,可通过单步运行、二分法、查看异常位置及反汇编等方式定位。
补充具体操作:① CPU跑飞:多由指针越界、中断异常、死循环导致,先通过调试器查看PC寄存器(程序计数器)的值,定位跑飞的代码位置,再结合反汇编代码,分析是否存在非法指针访问、函数调用栈异常;② 栈溢出:因局部变量过多、递归调用过深、中断嵌套层数过多导致,可通过查看栈指针(SP寄存器),对比栈的初始地址和当前地址,判断是否溢出;同时可通过设置栈边界检测(如在栈末尾设置guard word),当栈溢出时触发异常,快速定位问题;③ 二分法应用:针对大型代码,可通过注释部分代码、逐步缩小范围的方式,定位导致异常的具体模块,提升排查效率,尤其适用于工业采样模块、SSD主控驱动模块等复杂代码的问题定位。
4. SPI协议
核心内容:SPI(串行外设接口)是一种同步串行通信协议,用于MCU与传感器、存储设备等外设的通信。
重点扩展:① 核心优缺点:优点是全双工通信(数据发送和接收可同时进行)、通信速度快(远高于I2C)、抗干扰能力强(差分信号传输);缺点是需要的引脚较多(SCK时钟线、MOSI数据线、MISO数据线、CS片选线),多设备通信时需通过片选线区分,硬件成本略高。② 场景适配:工控场景中,SPI多用于高速采样传感器(如工业压力传感器、速度传感器),需快速传输采样数据;SSD主控场景中,SPI可用于连接Flash芯片、外设IP,实现固件读取、配置参数传输,需注意通信速率与主控芯片的适配,避免速率过高导致数据丢包。
5. I2C协议
核心内容:I2C(集成电路总线)是一种半双工同步串行通信协议,仅需两根线(SDA数据线、SCL时钟线)即可实现多设备通信。
重点扩展:① 核心优缺点:优点是引脚少(仅2根)、支持多主多从通信(无需片选线,通过设备地址区分)、占用MCU资源少,适合短距离、低速通信;缺点是半双工通信(数据发送和接收不能同时进行)、通信速度较慢,抗干扰能力弱(非差分信号),易受工业现场电磁干扰。② 与SPI的核心区别(易混淆点):除了引脚、通信方式、速度,两者的应用场景差异显著------I2C适合连接多个低速外设(如工控场景的温湿度传感器、SSD主控的配置芯片),SPI适合连接单个或少数高速外设;此外,I2C有ACK应答机制,可确认数据传输是否成功,SPI无专门的应答机制,需通过软件逻辑判断数据传输状态。
6. MPU(内存保护单元)
核心内容:MPU是ARM架构中用于内存保护的硬件模块,主要作用是划分内存区域、设置访问权限,防止非法访问内存,提升系统稳定性和安全性。
补充:
① 核心功能:MPU可将整个内存空间划分为多个独立区域(最多支持8个区域,部分ARM芯片可扩展),为每个区域配置独立的访问权限(如只读、读写、禁止访问)、访问属性(如缓存、缓冲),还可设置区域的大小和起始地址;当CPU试图以非法权限访问某一内存区域时,MPU会触发内存访问异常,避免程序非法篡改数据、越界访问导致系统崩溃。
② 应用场景:常见嵌入式场景中,用于隔离不同任务的内存空间(如实时任务与普通任务、用户程序与内核程序),防止某一任务异常导致整个系统瘫痪;特定场景中,用于隔离固件代码区、数据缓存区、外设寄存器区,避免驱动程序非法访问固件核心代码、篡改缓存数据,尤其在多任务调度的主控系统中,MPU是保障数据安全和系统稳定的关键。
③ 易混淆点(与MMU的区别):两者核心区别的是------MPU仅负责内存保护(权限控制、区域划分),不支持地址转换;MMU主要负责虚拟地址与物理地址的转换,同时兼具部分内存保护功能;MPU更常用(无需复杂的虚拟内存管理),MMU多用于需要虚拟内存的复杂系统(如带操作系统的高端主控)。