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

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编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

03-31 21:47
东南大学 C++
彭于晏前来求offe...:吓晕了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-28 10:00
华为 芯片与器件FAE经理 求问26届开奖大佬这个岗位能开多少 本科211
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

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