Arduino与FreeRTOS-中断管理

FreeRTOS 中断管理

在本实例中,将演示中断管理如何与 FreeRTOS 配合使用。 换句话说,将学习使用 FreeRTOS 内核管理中断。 在实时操作系统中,每个应用程序由几个任务组成。 这些任务本质上可以是周期性的、非周期性的和零星的。 但是沿着这些,一些任务只在发生中断时执行。 例如,我们有一个非周期性任务,该任务仅在用户按下与 Arduino 的数字 I/O 引脚相连的按钮时才执行。 最重要的是,我们在这个数字 I/O 引脚上附加了一个中断。 这意味着每当用户按下按钮时,Arduino 就会开始执行中断服务程序。

1、中断管理介绍

在使用 RTOS 时,处理中断服务程序非常关键。 因为滥用中断会导致时间限制问题,例如其他周期性任务无法按时完成。

注意:中断比其他任务具有更高的优先级。 因此,它中断不应等待互斥体、信号量和其他资源,而应在发生时立即执行。 否则,可能会导致问题。 通过其他任务延迟处理中断是一种可能的对策,以尽可能缩短 ISR 的处理时间。 总之,中断服务程序的代码和执行时间要尽可能的少。

1)使用中断读取和写入队列

FreeRTOS 中断提供了队列 API 的中断安全版本,以使用 ISR 从队列中读取和写入数据。 这是两个 API 函数:

  • xQueueSendToBackFromISR() :用于从中断服务例程将数据写入队列。 它的工作原理类似于 xQueueSendToBack() API,具有相同的输入参数和返回值功能。
  • xQueueReceiveFromISR():用于从中断服务例程中读取队列中的数据。 它的工作原理类似于 xQueueRece

Guess you like

Origin blog.csdn.net/wujuxKkoolerter/article/details/122265764