首页 短视频

嵌入式系统开发踩坑实录:从入门到精通的避坑指南

分类:短视频
字数: (2084)
阅读: (7195)
内容摘要:嵌入式系统开发踩坑实录:从入门到精通的避坑指南,

最近在搞一个基于 STM32 的项目,涉及到底层驱动的开发。很多小伙伴刚入门嵌入式,往往会被各种概念搞得晕头转向,今天就来聊聊嵌入式开发中一些容易踩坑的点,希望能帮大家少走弯路。

问题场景重现:中断优先级配置错误

在嵌入式系统开发中,中断是至关重要的机制,用于响应外部事件或定时任务。我曾经遇到一个问题:在配置多个中断时,由于优先级配置不当,导致程序运行不稳定,甚至直接跑飞。具体来说,UART 接收中断和定时器中断同时触发时,UART 数据接收不完整,甚至丢失数据。

嵌入式系统开发踩坑实录:从入门到精通的避坑指南

底层原理深度剖析:NVIC 与中断优先级

这个问题涉及 NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)的中断优先级管理。NVIC 负责管理所有中断源的优先级,并决定哪个中断可以抢占正在执行的中断。理解 NVIC 的工作原理是解决中断问题的关键。

嵌入式系统开发踩坑实录:从入门到精通的避坑指南
  • 中断优先级分组: NVIC 将中断优先级分为不同的分组,每个分组包含抢占优先级和子优先级。抢占优先级高的中断可以打断正在执行的抢占优先级低的中断。如果两个中断的抢占优先级相同,则子优先级高的中断先执行。
  • 中断向量表: 中断向量表存储了每个中断的处理函数地址。当发生中断时,CPU 会根据中断向量表跳转到相应的中断处理函数执行。

代码/配置解决方案:STM32 中断优先级配置示例

以下是 STM32 中配置 UART 和定时器中断优先级的示例代码:

嵌入式系统开发踩坑实录:从入门到精通的避坑指南
// 配置中断优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 2 位抢占优先级,2 位子优先级

// 配置 UART 中断优先级
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // UART1 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级 0 (最高)
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 子优先级 1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

// 配置定时器中断优先级
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; // 定时器 2 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占优先级 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级 0 (同抢占优先级下,子优先级高的先执行)
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

在这个例子中,我们将 UART1 中断的抢占优先级设置为最高(0),定时器 2 中断的抢占优先级设置为 1。这意味着 UART1 中断可以抢占定时器 2 中断。如果 UART1 和定时器 2 中断同时发生,UART1 中断会优先执行,保证数据的完整性。

嵌入式系统开发踩坑实录:从入门到精通的避坑指南

实战避坑经验总结

  1. 合理规划中断优先级: 仔细分析系统中所有中断的实时性要求,合理分配中断优先级。实时性要求高的中断应该具有较高的优先级。
  2. 避免优先级反转: 优先级反转是指低优先级任务持有高优先级任务需要的资源,导致高优先级任务被阻塞。避免优先级反转的方法包括:优先级继承和优先级天花板。
  3. 充分测试: 在实际应用中,务必进行充分的测试,模拟各种场景,确保中断系统的稳定性和可靠性。
  4. 理解 RTOS 的中断处理: 如果使用 RTOS,要理解 RTOS 提供的中断管理机制,例如 FreeRTOS 的 xHigherPriorityTaskWoken。不恰当的使用可能导致系统崩溃。
  5. 注意临界区保护: 中断处理程序应该尽可能短小精悍,避免长时间占用 CPU。必要时使用临界区保护,例如关闭中断。但要尽量减少关闭中断的时间,避免影响系统的实时性。

希望这篇嵌入式开发笔记能帮助你解决实际开发中遇到的问题。在嵌入式开发这条路上,踩坑是不可避免的,但从错误中学习,不断积累经验,才能成为一名优秀的嵌入式工程师。

嵌入式系统开发踩坑实录:从入门到精通的避坑指南

转载请注明出处: 青衫落拓

本文的链接地址: http://m.acea4.store/article/76897.html

本文最后 发布于2026-04-14 10:50:14,已经过了13天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 工具人 3 天前
    感谢分享!NVIC 那部分原理之前一直没搞懂,现在明白了。
  • 月光族 19 小时前
    讲的太透彻了,之前配置中断优先级一直模棱两可,看完这篇清晰多了!