esp32确定是不是是中断任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了esp32确定是不是是中断任务相关的知识,希望对你有一定的参考价值。

参考技术A 中断用于处理在程序正常执行期间不发生但在特定触发发生时发生的事件。例如,如果我们编写一个使 LED 闪烁的程序,微控制器将一个一个地执行每个命令。但是如果我们想监控一个开关来开始或停止闪烁,只有在所有其他任务完成之后才能完成检查,即它不会是实时的。这就是中断发挥作用的地方。有了中断,我们就不需要不断地检查数字输入引脚的状态。当发生中断时,控制器停止执行主程序,并调用称为 ISR 或中断服务程序的函数。然后控制器执行 ISR 内部的任务,然后在 ISR 执行完成后返回主程序。

ESP32 的每个内核共有 32 个中断。每个中断都有一定的优先级,大多数(但不是全部)中断都连接到中断多路复用器。因为中断源比中断多,所以有些中断是与多个中断源共享的。

在非 RTOS 系统中是不是可以中断任务

【中文标题】在非 RTOS 系统中是不是可以中断任务【英文标题】:Is interruption between task is possible in Non RTOS system在非 RTOS 系统中是否可以中断任务 【发布时间】:2016-09-27 21:19:40 【问题描述】:

如果我有一个非 RTOS 单核系统,一个任务,比如 taskA,是否可以中断另一个任务,比如 taskB,其中 taskA 或 taskB 都不是中断例程?还是只能通过非 RTOS 系统上的 ISR(中断服务例程)来中断一个任务?

【问题讨论】:

【参考方案1】:

如果您的系统有多个非 ISR 线程,则意味着存在某种多任务处理 - 并且多任务处理并不是 RTOS 独有的。一项任务“中断”另一项任务称为抢占。抢占需要抢占式调度器,而 RTOS 必然是抢占式调度器,例如 Windows 和 Linux 也是如此 - 但这些都不是实时,因为调度和抢占不是确定性的。

抢占式多任务是支持抢占所必需的,但不需要实时确定性调度。然而,多任务处理不需要抢占;一些系统(尤其是 Win95 之前的 16 位版本的 Windows 和 OSX 之前的 MacOS)是协作式多任务系统,其中一个正在运行的任务必须让出 CPU 以允许其他任务运行。

在抢占式多任务系统中,调度程序在退出中断上下文时执行,并且每当任务调用可调度事件(例如提供信号量、排队消息或释放互斥锁)时执行。如果调度程序运行时任务准备就绪要运行并且调度策略要求或允许它抢占当前任务,将发生上下文切换。

因此,简而言之,一个非 ISR 线程或进程“中断”另一个线程或进程需要支持抢占的操作系统,而该操作系统不必是 RTOS。

【讨论】:

确实,在嵌入式世界中,“RTOS”(错误地)被用作“抢占式调度器”的同义词;更糟糕的是,“RTOS”总是而不是使用正确的术语。【参考方案2】:

必须将控制权交给任务调度程序才能发生上下文切换。如果中断处理程序旨在调用调度程序,则可能由于中断而发生这种情况。或者,如果某个函数调用了调度程序(例如 yield、post 或 pend),它可能会发生。

此任务调度程序可能是 RTOS 的一部分。或者,也许它是一些您不认为是 RTOS 的最小任务切换内核。无论如何,为了执行任务上下文切换,某种调度程序必须获得控制权。

【讨论】:

好简洁的答案,但它不必只是一个 RTOS 或“最小任务调度程序” - 例如,所有现代 GPOS,如 WIndows、Linux 和 OSX 都有抢占式调度程序。

以上是关于esp32确定是不是是中断任务的主要内容,如果未能解决你的问题,请参考以下文章

ESP32看门狗

测量时 ESP-IDF 任务中断

esp32串口波特率最大是多少

Arduino ESP32使用外部中断

ESP32-IDF02-3 外设-定时器

Arduino ESP32:测试GPIO中断功能