新凯来 嵌入式软件开发 一面 感觉还行
投了新凯来的嵌入式软件开发岗,没想到一面就挺有深度的,面试官很专业,问的方向偏底层驱动和系统,基本上把嵌入式的核心知识点都覆盖了一遍。整体节奏不算快,但每道题都会追问细节,感觉不背八股是真的过不去,建议大家好好准备一下原理性的东西,光会用不够。
总结
- 嵌入式系统启动流程是怎样的?从芯片上电到main函数执行,中间经历了哪些关键步骤?
- 讲一下你用过的RTOS,它的任务调度机制是怎样的?如何保证实时性?
- volatile关键字的作用是什么?在嵌入式开发中哪些场景下必须使用它?
- DMA是什么?在什么场景下使用DMA可以显著提升系统性能?
- I2C、SPI、UART三种通信协议各有什么特点?分别适用于哪些场景?
- 中断服务程序(ISR)设计有哪些基本原则?为什么不建议在ISR中做复杂操作?
- 看门狗定时器的原理是什么?程序"跑飞"和陷入死循环时,看门狗分别能起到什么作用?
- 在资源受限的嵌入式环境下,程序出现偶发性死机且无法连接调试器,你会怎么排查?
- 如何在电池供电设备中降低系统功耗?软件和硬件层面分别有哪些手段?
- 你有使用过JTAG或SWD进行调试的经验吗?除了下载程序,还用过哪些调试功能?
- 嵌入式Linux和裸机开发有什么本质区别?各自适用于什么场景?
- 讲一下你对内存管理的理解,栈和堆在嵌入式中分别怎么用?需要注意什么?
总结
整体来说一面考察的是嵌入式基本功,没有太偏的题,但每道都要求说清楚原理。建议重点复习RTOS调度、中断机制、通信协议和低功耗设计这几块,追问会比较深。面试官态度挺好的,氛围不压抑,正常发挥应该没问题,加油!
核心嵌入式面试八股文总结:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
必备嵌入式八股文
🔸 嵌入式启动流程
芯片上电后依次经历:上电复位 → 执行BootROM中的启动代码 → 初始化时钟/堆栈/BSS段/data段 → 跳转到main函数。其中BSS段(未初始化全局变量)会被清零,data段(已初始化全局变量)会从Flash拷贝到RAM。
🔸 volatile关键字
告诉编译器该变量可能被外部因素修改,禁止对其进行优化(如缓存到寄存器)。必须使用的场景:
- 内存映射的硬件寄存器
- 中断服务程序中修改的全局变量
- 多线程共享变量(配合原子操作或锁使用)
🔸 中断处理原则
ISR要尽量短,只做标志位置位或数据搬运,复杂逻辑放到主循环或任务中处理。原因是ISR执行期间会屏蔽同级或低级中断,执行时间过长会影响系统实时性。
🔸 RTOS核心概念
- 任务调度:抢占式调度中高优先级任务可打断低优先级任务;时间片轮转用于同优先级任务
- 任务间通信:消息队列、信号量、互斥锁、事件标志组
- 优先级反转:低优先级任务持有高优先级任务需要的锁,导致高优先级任务被阻塞。解决方案是优先级继承协议
🔸 三大通信协议对比
UART | 2 | 低 | 无主从 | 串口调试、模块通信 |
I2C | 2 | 中 | 一主多从 | 传感器、EEPROM |
SPI | 4 | 高 | 一主多从 | Flash、显示屏、ADC |
🔸 DMA原理
DMA(直接内存访问)允许外设和内存之间直接传输数据,不经过CPU。CPU只需配置好源地址、目标地址和传输长度,传输完成后DMA触发中断通知CPU。适合大块数据搬运,如ADC采样、串口收发、图像处理。
🔸 低功耗设计
软件层面:关闭不用的外设时钟、使用睡眠/深度睡眠模式、降低主频、减少轮询改用中断唤醒。硬件层面:选低功耗MCU、降低工作电压、外设供电分区控制。
🔸 内存布局
嵌入式程序内存分区:
- Text段:代码,存Flash
- Data段:已初始化全局/静态变量,运行时在RAM
- BSS段:未初始化全局/静态变量,运行时在RAM,启动时清零
- Stack:局部变量,向下增长,大小固定
- Heap:动态分配,嵌入式中尽量少用,容易碎片化
🔸 看门狗
独立看门狗(IWDG)由独立时钟驱动,即使主时钟挂掉也能复位系统,适合防止程序跑飞。窗口看门狗(WWDG)要求在特定时间窗口内喂狗,太早或太晚都会触发复位,适合检测程序时序异常。


查看21道真题和解析