海康威视 嵌入式软件 一面 面经

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
  • 系统异常

检测:

  • uxTaskGetStackHighWaterMark
  • configCHECK_FOR_STACK_OVERFLOW
  • 栈填充值检测(0xA5)

避免:

  • 合理评估栈大小
  • 避免大数组和递归

4. 在嵌入式系统中使用 SPI 外设结合 DMA 进行数据传输时,为什么有时会出现数据错位或者丢数据的情况,可能的原因有哪些?

答案:原因:

  • SPI 与 DMA 启动不同步
  • CS控制不正确
  • FIFO 未清空
  • 传输长度配置错误
  • SPI仍在忙时重新启动DMA

关键:

  • SPI是时钟驱动
  • DMA必

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

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

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

全部评论
为啥海康的解答这么简洁
点赞 回复 分享
发布于 昨天 16:26 江西

相关推荐

林后润:听说他们有kpi,要到了简历编号就不理人了
27届求职交流
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

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