影石的二面整体以深度技术为主,面试官针对 RTOS、ARM 架构、通信协议以及 C 语言底层细节进行了大量追问,更强调对原理的理解与项目的深入剖析。
一、RTOS 方向
- FreeRTOS 的任务调度机制是怎样的?时间片轮转和优先级调度如何实现?
- 如果两个相同优先级的任务不断切换,会发生什么?如何避免频繁切换带来的开销?
- 队列、信号量、事件标志的核心区别是什么?在实际项目中如何选择?
- 中断和任务如何进行同步?中断里能不能直接调用阻塞型 API?
- 内存管理 heap1~heap5 的差异是什么?在高并发场景下如何避免碎片?
二、ARM 架构
- ARM Cortex-M 架构中有哪些异常模式?异常进入和返回的堆栈切换过程是怎样的?
- ARM 的中断优先级分组机制是如何设计的?
- Cache 与总线一致性如何保证?
- 在裸机和 RTOS 下,启动文件的作用有什么不同?
全网最全面的嵌入式八股文专栏:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
三、Modbus 协议
- Modbus RTU 的帧结构具体由哪些部分组成?
- CRC 校验的计算流程是怎样的?
- 主站和从站的超时与重传机制如何处理?
- 如果一个从设备需要同时支持 Modbus RTU 和 Modbus TCP,应如何设计?
四、C 语言深入
- 指针与数组在函数参数传递中的区别?
- 函数指针和回调机制在驱动开发中的应用?
- 宏展开可能带来哪些隐患?
- 内存对齐与结构体填充的规则?
volatile
的作用,为什么在寄存器映射中必须使用?
五、项目深挖
- 你项目中使用的 RTOS 如何划分任务?为什么这样设计?
- 如果任务优先级设置不合理,会出现什么问题?如何排查?
- 你在项目中如何实现 Modbus 协议栈?遇到过哪些异常情况?
- 在 ARM 平台上移植驱动时遇到的最大困难是什么?
- 项目中如何保证系统在高并发通信和外设同时工作时的稳定性?
总结
这场面试对知识的掌握程度要求很高,不仅仅停留在会用的层面,而是持续追问到底层原理和实际项目中的处理方式。RTOS 的任务调度、ARM 架构的异常机制、Modbus 协议的实现细节,以及 C 语言的底层特性,都是考察的重点。同时,面试官会结合简历项目逐步深入,要求给出设计思路和问题应对方法。
全部评论
(1) 回帖