欣旺达 嵌入式软件工程师 一面 面经

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升级的流程是怎样的?

  1. 服务器发布新固件,设备检查版本号
  2. 设备分包下载固件(防止内存不足)
  3. 对固件做完整性校验(MD5/SHA256)和签名验证
  4. 将新固件写入备用Flash分区
  5. 设置升级标志,重启进入bootloader
  6. bootloader校验新固件,通过则跳转执行,失败则回滚旧版本

Flash分区规划示意:

| Bootloader | APP分区(当前) | APP分区(备用/下载区) | 参数区 |

5. WiFi芯片和主控MCU之间常见的通信方式有哪些?

UART

低~中

接线简单,AT指令驱动

最常见,ESP8266等

SPI

中~高

全双工,

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

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

狄文君:多段项目经历 + 专业技能拉满,这简历很能打,坐等好消息!
点赞 评论 收藏
分享
肥肠椒绿:双非本可不就犯天条了,双非本就应该打入无间地狱
点赞 评论 收藏
分享
昨天 14:46
已编辑
景德镇陶瓷大学 Web前端
励志成为双港第一ja...:这其实很正常,离的太远了,他认为你不会来,就为了混个面试,而且成本很高,实习生都优先选本地高校。吃了地域的亏,所有很多时候地域可能比院校层次更重要。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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