汇川嵌入式一面面经
这场面试问的问题还是比较多,但是个人感觉面试的内容还是八股文多一些。RTOS这方面内容比较多。
一、C语言与底层基础
- 解释一下
volatile
关键字的作用,以及在寄存器操作中的使用场景。 - 什么是内存对齐?在 ARM Cortex-M 内核中如果访问不对齐会发生什么?
- 如何通过位运算实现寄存器某一位的置 1、清 0 和翻转?
- C 语言中结构体的内存布局规则是什么?为什么会有填充字节?
- 如何实现一个无锁的环形缓冲区?
二、单片机与寄存器
- 描述 STM32 启动文件(startup.s)里
Reset_Handler
的作用。 - 如何通过寄存器配置 NVIC 的中断优先级?
- 定时器 PWM 输出的寄存器配置步骤有哪些?
- 在裸机下如何实现一个精确延时?为什么用寄存器比软件延时更可靠?
- DMA 搬运数据时,相关寄存器一般需要配置哪些?
三、RTOS(RT-Thread & FreeRTOS)
- 任务控制块(TCB)一般包含哪些核心内容?
- RTOS 的任务切换是如何实现的?ARM Cortex-M 下为什么要用 PendSV?
- 在 RTOS 中,如何实现任务间通信?常见的 IPC 机制有哪些(信号量、消息队列、邮箱、事件集等)?
- FreeRTOS 的二值信号量和互斥锁(mutex)有什么区别?适用场景各是什么?
- 如果两个相同优先级的任务在 RTOS 中频繁切换,会出现什么问题?如何避免?
- RTOS 的 tick 周期是如何配置的?如果 tick 周期太大或太小会带来什么影响?
- RTOS 的 idle 任务有什么作用?为什么不能删除?
- FreeRTOS 的软件定时器是如何运行的?对应的后台任务机制是什么?
- RT-Thread 的设备驱动框架是怎么设计的?用户如何使用一个新注册的设备?
- 在 RTOS 中如何实现一个实时数据采集系统(采集 → 处理 → 上传)的任务划分?优先级应如何设置?
四、综合与应用场景
- 如果要在 RTOS 下实现一个多任务电机控制系统,你会如何分配任务优先级?
- RT-Thread 和 FreeRTOS 在任务优先级数量上的设计有什么不同?各自有什么优缺点?
- 如果一个任务需要频繁访问寄存器数据,怎样保证其实时性?
- 在工控场景下,RTOS 和裸机开发的选择依据是什么?