欣旺达 嵌入式软件工程师 一面 面经
1. 自我介绍
围绕教育背景、项目经历、技术栈展开。重点突出嵌入式相关经验:用过哪些MCU/芯片、熟悉哪些通信协议、做过什么实际项目、实习经历等。控制在2分钟以内,条理清晰。
2. C语言中volatile关键字的作用是什么?
告诉编译器该变量可能被外部因素修改,禁止编译器对其进行优化缓存,每次访问都必须从内存重新读取。常用场景:
- 映射到硬件寄存器的变量
- 中断服务函数中修改的全局变量
- 多线程共享变量
volatile uint32_t *reg = (volatile uint32_t *)0x40021000; volatile uint8_t flag = 0; // 中断中修改,主循环中读取
3. 什么是中断?ISR编写有哪些注意事项?
中断是CPU响应外部或内部事件、暂停当前程序转去执行ISR的机制。
ISR编写注意事项:
- 尽量短小,复杂逻辑放到主循环或任务中处理(设置标志位)
- 不能调用阻塞函数(delay、printf等)
- 共享变量加volatile修饰
- 注意栈空间,避免局部变量过多
- 及时清除中断标志位,否则会反复触发
volatile uint8_t uart_rx_flag = 0;
void USART1_IRQHandler(void) {
if (USART_GetITStatus(USART1, USART_IT_RXNE)) {
rx_buf[rx_idx++] = USART_ReceiveData(USART1);
uart_rx_flag = 1; // 设标志,主循环处理
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
4. 嵌入式设备OTA升级的流程是怎样的?
- 服务器发布新固件,设备检查版本号
- 设备分包下载固件(防止内存不足)
- 对固件做完整性校验(MD5/SHA256)和签名验证
- 将新固件写入备用Flash分区
- 设置升级标志,重启进入bootloader
- bootloader校验新固件,通过则跳转执行,失败则回滚旧版本
Flash分区规划示意:
| Bootloader | APP分区(当前) | APP分区(备用/下载区) | 参数区 |
5. WiFi芯片和主控MCU之间常见的通信方式有哪些?
UART |
低~中 |
接线简单,AT指令驱动 |
最常见,ESP8266等 |
SPI |
中~高 |
全双工, |
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。


查看6道真题和解析