海康威视 嵌入式软件 一面 面经
1. 在 Cortex-M 单片机中,从上电复位到最终进入 main 函数执行,整个启动流程涉及哪些关键步骤以及每一步的作用是什么?
答案:
- 从地址 0x00000000 读取:初始 MSPReset_Handler 地址
- 设置 MSP
- 跳转 Reset_Handler
- 初始化运行环境:拷贝 .data(Flash → RAM)清零 .bss
- 初始化系统时钟(SystemInit)
- 调用 main()
本质:
- 启动文件负责构建 C 运行环境
2. 在 FreeRTOS 中,任务调度和任务切换的底层实现机制是什么,在 Cortex-M 架构上具体依赖哪些异常完成上下文切换?
答案:
- 调度触发:SysTick(时基)API触发
- 切换机制:PendSV 异常
- 上下文保存:自动压栈:R0-R3, R12, LR, PC, xPSR手动保存:R4-R11
- 切换本质:切换 PSP(任务栈指针)
3. 在 FreeRTOS 系统中,如果任务栈空间设置不合理可能导致什么问题,通常有哪些方法可以检测和避免任务栈溢出?
答案:问题:
- 数据破坏
- HardFault
- 系统异常
检测:
uxTaskGetStackHighWaterMarkconfigCHECK_FOR_STACK_OVERFLOW- 栈填充值检测(0xA5)
避免:
- 合理评估栈大小
- 避免大数组和递归
4. 在嵌入式系统中使用 SPI 外设结合 DMA 进行数据传输时,为什么有时会出现数据错位或者丢数据的情况,可能的原因有哪些?
答案:原因:
- SPI 与 DMA 启动不同步
- CS控制不正确
- FIFO 未清空
- 传输长度配置错误
- SPI仍在忙时重新启动DMA
关键:
- SPI是时钟驱动
- DMA必
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

