嵌软八股大全10 - ARM 相关问题汇总
1、缩写?
1.1、常见英文缩写及其含义?
CPU | Central Processing Unit | 中央处理单元 | 处理器 |
MPU | Micro Processor Unit | 微处理器单元 | |
MCU | Micro Control Unit | 微控制器 | CPU+内存+输入输出 |
SOC | System on Chip | 片上系统 | CPU+GPU+存储器+接口 |
DSP | Digital Signal Processor | 数字信号处理器 | 处理数字信号专用 |
2、MCU ?
2.1、常见/你用过的 32 位 MCU 都有哪些?
- STM32F4/F1/L0
- ESP32(240MHz,RISC-V)
- AT32F4(150MHz,ARM-M4)
- NXP 的 LPC546XX(220MHz,ARM-M4)
- NXP 的 K60(100MHz,ARM-M4)
2.2、用过哪几种 STM32,它们之间的区别在哪里?
用过 F1、F4、L0 系列的 STM32 单片机,他们有这样几个区别:
- 定位不同:F1 是主流系列、F4 是高性能系列、L0 是低功耗系列,定位不同因此应用场景也不同
- 内核不同:F1 是 Cortex-M3 内核,F4 是 Cortex-M4 内核,L0 是 Cortex-M0+ 内核
- 最高主频不同:F1 最大 72MHz,F4 最大 180Mhz,L0 最大 32MHz
- 其他不同:能选配的 FLASH/RAM 大小不同,外设种类和数量不同
2.3、MCU 如何选型?
- 需求分析
- 功能:明确系统需要实现什么功能,需要什么传感器接口,通信协议,显示驱动接口等
- 性能:评估大致所需要的 MCU 性能
- 功耗:如果电池供电还需要考虑系统对功耗的要求,看看 MCU 有没有低功耗工作模式
- 处理器架构
- 8/16/32位
- ARM Cortex-M/R 等系列,内核 Cortex M0/3/4,或者其他 RISC-V, AVR 等架构
- 外设接口
- GPIO口
- 通信接口(I2C、SPI、UART、CAN)等
- ADC接口
- FALSH 存储大小
- 工作电源电压
- 成本等
2.4、51 和 32 MCU 架构的区别?
- 架构不同
- 51 使用的是 8051 架构,一次只能处理 8 位数据
- 32 使用的一般为 cortex-M 系列的架构,一次可以处理 32 位数据
- 指令集不同
- 51 使用的是 CISC(复杂指令集)
- 32 使用的是 RISC(精简指令集)
- 性能和资源不同
- 51 性能很低,只有很少的 RAM 和 FALSH,只适合简单应用
- 32 性能较高,通常可以达到上百 MHz ,而且相对有较大的内存和较多的外设
2.5、Cortex-M3 和 Cortex-M4 的区别?
- 最高主频不同
- M4 增加了 FPU,支持浮点、DSP、并行计算等,但 M3 不支持
2.6、单片机最小系统?
- 电源电路
- 时钟电路
- 复位电路
- MCU
2.7、MCU 启动流程?
- 上电或复位后 MCU 会从一个固定的地址执行代码执行启动文件
- 设置堆和栈指针,并分配堆和栈内存大小
- 设置 NVIC 中断向量表
- 执行 SystemInit 函数 完成系统时钟、基本外设等核心初始化
- 跳转到
_main
函数(BL _main
),执行数据段,bss 段的初始化- 最终调用用户的 main() 函数
2.8、MCU 中一般使用什么作为存储介质?
在 MCU 中一般存储介质使用 FLASH ,SD卡等存储介质,MCU 中本身没有文件系统,但有些 MCU 提供了例如 SDIO、FSMC 这样的用于控制存储介质的接口,不过使用这些接口只能对存储介质进行底层简单的读写操作,很不方便
存储介质分类?
- 非易失
- ROM
- EPROM(紫外线擦除,一次性编程)
- EEPROM(电气擦除,可以按字节擦除,无需整片擦除)
- FLASH
- NADN FLASH(存储单元排列类似于 NAND 门逻辑电路,一般容量较大,单位存储成本较低)
- NOR FLASH(存储单元排列类似于 NOR 门逻辑电路,一般容量较小,单位存储成本较高)
- SD 卡
- 易失
- RAM
- SRAM
- DRAM
2.9、MCU 文件系统?
MCU 虽然本身没有文件系统,但是可以使用第三方的库,比如 FatFs ,FatFs 是一个独立的 FAT 文件模块,它支持 FAT12 FAT16 FAT32 文件系统,部分版本还支持 exFAT 格式文件系统,支持基本的文件操作,比如创建、删除、读取、写入、重命名等,库是开源的,有所有的源码,非常轻量化,适合嵌入式系统
使用 FatFs 只需要在其合适的位置实现 MCU 底层的以下几个函数即可
- 设备初始化
- 读函数
- 写函数
其他函数比如 ioctrl RTC 时间等函数 可以按照需要实现,这些需要实现的函数当然也可以结合其他的外设来进行,比如对于 SD 卡,我们可以通过 MCU 的 SDIO 接口对 SD 卡底层控制,然后使用 SDIO 的库函数实现 FatFs 所需要的初始化、读、写等函数
2.10、STM32 的 I/O 变量?
就是 GPIO
初始输出电平
GPIO 模式(推挽/开漏)
上/下拉
GPIO 速度
2.11、如果 MCU 下不进程序,硬件上该怎么调试?
- 检查电源和连接
- 尝试手动复位
- 连接调试工具,尝试在软件上读取 MCU 的 FLASH,看看是否有效
- 更换 MCU ,避免 MCU 损坏
2.12、DMA 介绍,流程 ?
DMA 直接内存读取,主要有三种模式:
- 从存储器到存储器
- 从存储器到外设
- 从外设到存储器
主要需要设置两个东西:
- DMA 请求
- DMA 流
2.13、MCU 调试过程中使用过哪些工具?
- JTAG/SWD
- DAP
- GDB
2.14、MCU 上如何设计用户态和内核态?如何保障操作系统的安全性?
- 硬件支持
- MPU,内存保护单元,一些中高端 MCU 上会集成这个硬件,主要作用就是隔离用户态和内核态的内存空间,防止用户态代码访问或修改内核态的内存数据
- MMU,内存管理单元,只有高端 MCU 上才可能会集成这个硬件,比 MPU 要复杂的多,支持虚拟内存、内存分页和更高级别的内存保护
- 内核的特权模式
- ARM Cortex-M 系列 MCU 中处理器支持 特权模式 和 非特权模式,一般是通过控制
CONTROL
寄存器来其之间进行切换的,用户态应该工作在非特权模式(资源受限),内核态应该工作在特权模式- 系统调用
- 软中断
- SVC 指令(ARM上)
如何保障操作系统的安全性?
- MPU/MMU 阻止了用户态的应用程序对内核的内存空间访问/修改,避免对内核造成破坏
- 用户态下可以限制其访问某些关键的中断向量表
- 系统调用过滤,确保用户产生系统调用时只能执行授权操作,一些危险操作直接禁止
- 看门狗,避免操作系统/内核卡死,一旦卡死狗饿死了就重启
3、中断?
3.1、什么是中断?
中断是一种能够通知 CPU 当前有紧急事件需要立
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。