嵌入式大厂面经中断常见考点(持续更新中!)

这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!

嵌入式中断常见面试题目总结

1. 中断基本概念

Q: 什么是中断?中断的基本工作原理是什么?

中断是一种硬件或软件机制,用于暂停CPU当前执行的程序,转而执行特定的服务程序(中断服务程序),处理完成后再返回原程序继续执行。

基本工作原理:

  1. 中断源产生中断请求信号
  2. CPU检测到中断请求,完成当前指令执行
  3. CPU保存当前程序状态(程序计数器、状态寄存器等)
  4. CPU跳转到中断服务程序执行
  5. 中断服务程序执行完毕后,恢复之前保存的程序状态
  6. 继续执行被中断的程序

Q: 中断的类型有哪些?

  1. 按触发源分类:硬件中断:由外部设备触发(定时器、GPIO、通信接口等)软件中断:由软件指令触发(SWI指令、系统调用等)
  2. 按优先级分类:可屏蔽中断:可以通过设置中断屏蔽位禁用不可屏蔽中断:不能被禁用,通常用于处理严重错误
  3. 按响应时间分类:同步中断:与程序执行同步,如指令执行错误异步中断:与程序执行无关,如外部设备请求
  4. 特殊中断类型:异常:由CPU内部错误引起(如除零、非法指令)陷阱:由程序主动触发的中断(如系统调用)故障:可恢复的错误(如缺页异常)

2. 中断处理机制

Q: 中断向量表是什么?它的作用是什么?

中断向量表是一个存储中断服务程序入口地址的数组或表格,每个中断源对应一个表项。

作用:

  • 提供中断源与对应服务程序之间的映射关系
  • 使CPU能够快速找到并跳转到正确的中断服务程序
  • 支持多种中断源的统一管理

在ARM Cortex-M系列中,中断向量表位于内存起始地址,包含复位值、异常处理程序地址和中断服务程序地址。

Q: 中断嵌套是什么?如何实现中断嵌套?

中断嵌套是指在一个中断服务程序执行过程中,允许更高优先级的中断请求打断当前中断服务程序的执行。

实现方法:

  1. 设置中断控制器支持优先级
  2. 在中断服务程序中重新使能全局中断
  3. 保存和恢复中断上下文
  4. 使用堆栈保存多层嵌套的状态信息
void UART_IRQHandler(void) {
    // 保存上下文(通常由硬件自动完成)
    
    // 重新使能全局中断,允许更高优先级中断嵌套
    __enable_irq();
    
    // 处理UART中断
    if(UART_GetITStatus(UART1, UART_IT_RXNE) != RESET) {
        // 处理接收中断
    }
    
    // 禁用全局中断,准备退出
    __disable_irq();
    
    // 恢复上下文(通常由硬件自动完成)
}

Q: 什么是中断延迟?有哪些因素会影响中断延迟?

中断延迟是指从中断请求产生到中断服务程序开始执行之间的时间间隔。

影响因素:

  1. 硬件因素:CPU时钟频率中断控制器响应时间总线仲裁延迟流水线状态
  2. 软件因素:中断优先级设置中断嵌套层次关中断代码段长度操作系统调度策略
  3. 其他因素:DMA传输占用总线缓存命中率外设时钟配置

3. 中断优先级与管理

Q: 如何设置和管理中断优先级?

在ARM Cortex-M系列中设置中断优先级:

// NVIC优先级配置示例
void ConfigureInterruptPriority(void) {
    // 配置中断分组(抢占优先级和子优先级的位数分配)
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2位抢占优先级,2位子优先级
    
    // 配置UART中断
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;        // 子优先级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

优先级管理原则:

  • 响应时间要求高的中断设置高优先级
  • 避免优先级过于集中,合理分配
  • 考虑中断处理时间,短处理时间的中断可以设置较高优先级
  • 考虑中断之间的依赖关系

Q: 什么是优先级反转?如何避免?

优先级反转是指低优先级任务持有高优先级任务所需的资源,而中优先级任务抢占低优先级任务,导致高优先级任务被

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

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

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

全部评论
😱😱😱😱😱😱😱😱
点赞 回复 分享
发布于 03-26 10:13 上海

相关推荐

字节一面:1.面试官自我介绍+小组业务介绍:C/C++,GPU,异构计算,从上层的编译到下层异步执行2.机器学习有了解过吗...  学校选修课...3.自我介绍4.实习项目介绍5.项目里为什么用dpdk? 为什么要搞用户态协议栈,不搞原来内核的那一套?内核那一套可能有一些固定的额外的开销... kernel bypass  绕过很多开销 零拷贝...6.有没有深入研究过dpdk? 深度分析?不太了解,vpp用的多,注册函数指针,成员到主结构体,初始化...7.介绍一下项目2 ??8.讲一下外碎片场景?9.项目里怎么合并内存的?10.照你这么说,一直遍历,O(N),效率是不是有点低?  怎么优化?合并机制类似于伙伴系统,有效减少外部碎片,确保大块内存请求的连续性。联系到工程上....   11.对于解耦的意义?  12.加什么锁?   自旋锁会不会?13.工作线程 vs 主线程?   锁竞争?  桶锁粒度?   12.mmap  vs brk ?13.进程地址空间? 独立性? 页表? 写时拷贝?  (面试官:嗯嗯,对,这个这个这个不错,这个能回答到这个点还是比较少???)14.mm_sturct讲一下?  进程独立拷贝?  区间划分?  管理?  空间布局,自上而下?15. mmap会映射到哪个区域?  文件?物理内存?堆区?16.你对Linux系统的内存管理这块了解的咋样?17.内存分配算法?  伙伴系统?  内存交换?18.unordered_map vs map?  底层?  优缺点?19.vector底层?  异地扩容?  底层指针调整?  元素深拷贝?20.智能指针?  unique vs shared(具体的场景有什么,如何具体选择) ? 底层?  作用域?21. RAII?   除了智能指针还有哪里用到RAII ??22.左值右值引用?   传递unique_ptr?   std::move??  底层? static_cast?23.cpp编译链接流程??24.类模板?  生成模板类?   在编译的哪个阶段??<br>25.讲一下生成的.o文件的格式?  ELF?  忘了...26.和.so .a的联系?  联系实习动静态库?<br>27.动态库的加载?  磁盘到内存?  如何链接过去的?  入口?28.符号表那一套...  大哥你别问了....<br>29.聊一聊   <<程序员的自我修养...>>30.Python会吗?  脚本?31.手撕 链表题  10min 调试过你咋不用智能指针??   写算法题习惯了....32.反问:1.面试表现咋样,哪里可以提升? 平时咋学习?智能指针和新特性,底层编译链接,再复习复习.深度比较重要,找一个方向深入一下吧...2.字节的项目管理流程,从开始到结束,流程?车轱辘话....这个流程的话,它这个这个其实没有这种统一的标准,因为它像自觉它是一个比较大的一个公司嘛,对吧?然后各种各样的这种业务,各种各样的这种项目,他可能。每个项目它都是不太一样的对吧?他可能有的可能希望你。给自己做一些很创新的事情,让你自己一个人去深入的研究某1块儿,然后去独立的去。完成整个一个项目。但是有的项目它可能就是希望你去在他规划的这个大项目里边去让你做某1块事情,然后更加讲究这种分工协作。<br><br>
点赞 评论 收藏
分享
评论
3
5
分享

创作者周榜

更多
牛客网
牛客企业服务