嵌软八股大全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 都有哪些?

  1. STM32F4/F1/L0
  2. ESP32(240MHz,RISC-V)
  3. AT32F4(150MHz,ARM-M4)
  4. NXP 的 LPC546XX(220MHz,ARM-M4)
  5. NXP 的 K60(100MHz,ARM-M4)

2.2、用过哪几种 STM32,它们之间的区别在哪里?

用过 F1、F4、L0 系列的 STM32 单片机,他们有这样几个区别:

  1. 定位不同:F1 是主流系列、F4 是高性能系列、L0 是低功耗系列,定位不同因此应用场景也不同
  2. 内核不同:F1 是 Cortex-M3 内核,F4 是 Cortex-M4 内核,L0 是 Cortex-M0+ 内核
  3. 最高主频不同:F1 最大 72MHz,F4 最大 180Mhz,L0 最大 32MHz
  4. 其他不同:能选配的 FLASH/RAM 大小不同,外设种类和数量不同

2.3、MCU 如何选型?

  1. 需求分析
    1. 功能:明确系统需要实现什么功能,需要什么传感器接口,通信协议,显示驱动接口等
    2. 性能:评估大致所需要的 MCU 性能
    3. 功耗:如果电池供电还需要考虑系统对功耗的要求,看看 MCU 有没有低功耗工作模式
  2. 处理器架构
    1. 8/16/32位
    2. ARM Cortex-M/R 等系列,内核 Cortex M0/3/4,或者其他 RISC-V, AVR 等架构
  3. 外设接口
    1. GPIO口
    2. 通信接口(I2C、SPI、UART、CAN)等
    3. ADC接口
  4. FALSH 存储大小
  5. 工作电源电压
  6. 成本等

2.4、51 和 32 MCU 架构的区别?

  1. 架构不同
    1. 51 使用的是 8051 架构,一次只能处理 8 位数据
    2. 32 使用的一般为 cortex-M 系列的架构,一次可以处理 32 位数据
  2. 指令集不同
    1. 51 使用的是 CISC(复杂指令集)
    2. 32 使用的是 RISC(精简指令集)
  3. 性能和资源不同
    1. 51 性能很低,只有很少的 RAM 和 FALSH,只适合简单应用
    2. 32 性能较高,通常可以达到上百 MHz ,而且相对有较大的内存和较多的外设

2.5、Cortex-M3 和 Cortex-M4 的区别?

  1. 最高主频不同
  2. M4 增加了 FPU,支持浮点、DSP、并行计算等,但 M3 不支持

2.6、单片机最小系统?

  1. 电源电路
  2. 时钟电路
  3. 复位电路
  4. MCU

2.7、MCU 启动流程?

  1. 上电或复位后 MCU 会从一个固定的地址执行代码执行启动文件
  2. 设置堆和栈指针,并分配堆和栈内存大小
  3. 设置 NVIC 中断向量表
  4. 执行 SystemInit 函数 完成系统时钟、基本外设等核心初始化
  5. 跳转到 _main 函数(BL _main),执行数据段,bss 段的初始化
  6. 最终调用用户的 main() 函数

2.8、MCU 中一般使用什么作为存储介质?

在 MCU 中一般存储介质使用 FLASH ,SD卡等存储介质,MCU 中本身没有文件系统,但有些 MCU 提供了例如 SDIO、FSMC 这样的用于控制存储介质的接口,不过使用这些接口只能对存储介质进行底层简单的读写操作,很不方便

存储介质分类?

  1. 非易失
    1. ROM
    2. EPROM(紫外线擦除,一次性编程)
    3. EEPROM(电气擦除,可以按字节擦除,无需整片擦除)
    4. FLASH
      1. NADN FLASH(存储单元排列类似于 NAND 门逻辑电路,一般容量较大,单位存储成本较低)
      2. NOR FLASH(存储单元排列类似于 NOR 门逻辑电路,一般容量较小,单位存储成本较高)
    5. SD 卡
  2. 易失
    1. RAM
    2. SRAM
    3. DRAM

2.9、MCU 文件系统?

MCU 虽然本身没有文件系统,但是可以使用第三方的库,比如 FatFs ,FatFs 是一个独立的 FAT 文件模块,它支持 FAT12 FAT16 FAT32 文件系统,部分版本还支持 exFAT 格式文件系统,支持基本的文件操作,比如创建、删除、读取、写入、重命名等,库是开源的,有所有的源码,非常轻量化,适合嵌入式系统

使用 FatFs 只需要在其合适的位置实现 MCU 底层的以下几个函数即可

  1. 设备初始化
  2. 读函数
  3. 写函数

其他函数比如 ioctrl RTC 时间等函数 可以按照需要实现,这些需要实现的函数当然也可以结合其他的外设来进行,比如对于 SD 卡,我们可以通过 MCU 的 SDIO 接口对 SD 卡底层控制,然后使用 SDIO 的库函数实现 FatFs 所需要的初始化、读、写等函数

2.10、STM32 的 I/O 变量?

就是 GPIO
初始输出电平
GPIO 模式(推挽/开漏)
上/下拉
GPIO 速度

2.11、如果 MCU 下不进程序,硬件上该怎么调试?

  1. 检查电源和连接
  2. 尝试手动复位
  3. 连接调试工具,尝试在软件上读取 MCU 的 FLASH,看看是否有效
  4. 更换 MCU ,避免 MCU 损坏

2.12、DMA 介绍,流程 ?

DMA 直接内存读取,主要有三种模式:

  1. 从存储器到存储器
  2. 从存储器到外设
  3. 从外设到存储器

主要需要设置两个东西:

  1. DMA 请求
  2. DMA 流

alt

2.13、MCU 调试过程中使用过哪些工具?

  1. JTAG/SWD
  2. DAP
  3. GDB

2.14、MCU 上如何设计用户态和内核态?如何保障操作系统的安全性?

  1. 硬件支持
    1. MPU,内存保护单元,一些中高端 MCU 上会集成这个硬件,主要作用就是隔离用户态和内核态的内存空间,防止用户态代码访问或修改内核态的内存数据
    2. MMU,内存管理单元,只有高端 MCU 上才可能会集成这个硬件,比 MPU 要复杂的多,支持虚拟内存、内存分页和更高级别的内存保护
  2. 内核的特权模式
    1. ARM Cortex-M 系列 MCU 中处理器支持 特权模式 和 非特权模式,一般是通过控制 CONTROL 寄存器来其之间进行切换的,用户态应该工作在非特权模式(资源受限),内核态应该工作在特权模式
  3. 系统调用
    1. 软中断
    2. SVC 指令(ARM上)

如何保障操作系统的安全性?

  1. MPU/MMU 阻止了用户态的应用程序对内核的内存空间访问/修改,避免对内核造成破坏
  2. 用户态下可以限制其访问某些关键的中断向量表
  3. 系统调用过滤,确保用户产生系统调用时只能执行授权操作,一些危险操作直接禁止
  4. 看门狗,避免操作系统/内核卡死,一旦卡死狗饿死了就重启

3、中断?

3.1、什么是中断?

中断是一种能够通知 CPU 当前有紧急事件需要立

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

欢迎来到我的专栏,在这里,我将整理并分享2024年各大企业的真实笔试/面试真题,同时还整理了嵌入式软件相关的八股知识。专栏内容涵盖C/C++基础、嵌软常见通信协议、ARM、FreeRTOS、Linux OS相关问题汇总,希望能帮助求职者了解考试趋势和嵌入式常见考点。无论你是准备面试,还是希望提升自己的专业知识,这里都能为你提供宝贵的参考和学习资源。

全部评论

相关推荐

bg双非本科,方向是嵌入式。这次秋招一共拿到了 8 个 offer,最高年包 40w,中间也有一段在海康的实习经历,还有几次国家级竞赛。写这篇不是想证明什么,只是想把自己走过的这条路,尽量讲清楚一点,给同样背景的人一个参考。一、我一开始也很迷茫刚决定走嵌入式的时候,其实并没有一个特别清晰的规划。网上的信息很零散,有人说一定要懂底层,有人说项目更重要,也有人建议直接转方向。很多时候都是在怀疑:1.自己这种背景到底有没有机会2.现在学的东西到底有没有用3.是不是已经开始晚了这些问题,我当时一个都没答案。二、现在回头看,我主要做对了这几件事第一,方向尽早确定,但不把自己锁死。我比较早就确定了嵌入式这个大方向,但具体做哪一块,是在项目、竞赛和实习中慢慢调整的,而不是一开始就给自己下结论。第二,用项目和竞赛去“证明能力”,而不是堆技术名词。我不会刻意追求学得多全面,而是确保自己参与的每个项目,都能讲清楚:我负责了什么、遇到了什么问题、最后是怎么解决的。第三,尽早接触真实的工程环境。在海康实习的那段时间,对我触动挺大的。我开始意识到,企业更看重的是代码结构、逻辑清晰度,以及你能不能把事情说清楚,而不只是会不会某个知识点。第四,把秋招当成一个需要长期迭代的过程。简历不是一次写完的,面试表现也不是一次就到位的。我会在每次面试后复盘哪些问题没答好,再针对性补。三、我踩过的一些坑现在看也挺典型的:1.一开始在底层细节上纠结太久,投入产出比不高2.做过项目,但前期不会总结,导致面试表达吃亏3.早期有点害怕面试,准备不充分就去投这些弯路走过之后,才慢慢找到节奏。四、给和我背景相似的人一点建议如果你也是双非,准备走嵌入式,我觉得有几件事挺重要的:1.不用等“准备得差不多了”再投2.项目一定要能讲清楚,而不是做完就算3.不要只盯着技术,多关注表达和逻辑很多时候,差的不是能力,而是呈现方式。五、写在最后这篇总结不是标准答案,只是我个人的一次复盘。后面我会陆续把自己在嵌入式学习、竞赛、实习和秋招中的一些真实经验拆开来讲,希望能对后来的人有点帮助。如果你正好也在这条路上,希望你能少走一点弯路。
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务