嵌入式实时系统需要对外界的某个事件做出及时的响应动作。例如串口外设收到了一帧数据后,需要通知数据解析任务,同时还要将数据帧传递给解析任务,完成数据的处理。设计出一种好的策略来完成这个过程时需要考虑以下几个问题:
- 如何检测事件?中断是主要的事件检测手段,有时候也可以使用轮询法。
- 当中断发生后,应该将多少处理工作放在中断服务函数(ISR)中,将另外的多少处理工作放在中断函数外(例如main函数)?通常的经验是,在中断服务函数中尽可能做最少的工作,保证中断服务函数能迅速执行完成。
- 当中断检测到事件发生时,中断函数如何与main函数通信?如何让他们同步起来?
FreeRTOS提供的一些机制能够很好的解决以上问题。
首先我们需要明白一点,FreeRTOS的任务优先级和单片机的中断优先级是不同的,是两个不同层次的概念:
- 任务以及任务优先级是FreeRTOS抽象出的软件层次的概念,与FreeRTOS应用程序所运行的硬件系统无关。任务优先级的意义和行为由FreeRTOS内核定义和控制。
- 中断是单片机硬件提供的一种机制,通过对单片机的中断相关寄存器进行设置,来控制中断的响应和处理过程。当中断发生时,中断服务函数(ISR)会打断任何优先级的运行着的任务,无论这个中断的优先级多么低。然而任务在任何情况下都不能打断中断函数的运行。
在中断函数中使用FreeRTOS的API
在FreeRTOS中,许多内核函数都有两个版本,一个是普通版本,另一个是带"FromISR"后缀的版本,也可以叫做“中断安全版本
本文介绍了FreeRTOS在中断管理中的应用,包括在中断函数中使用API的注意事项、中断与任务的同步策略以及二进制信号量作为同步机制的使用。重点讨论了中断推移处理法,强调中断服务函数应保持简洁,通过任务来处理复杂的处理工作。文章还提到了使用二进制信号量和计数信号量进行中断与任务同步的方法,以及中断推移处理任务如何利用信号量与中断协同工作,确保实时性和连贯性。
订阅专栏 解锁全文
1375

被折叠的 条评论
为什么被折叠?



