目录
介绍
这篇文章的目的是在ESP32上介绍FreeRTOS的一些基本概念。
首先,考虑到在使用Arduino IDE编写ESP32时,我们可以使用FreeRTOS库中的函数,这一点很重要。这个库可以直接从软件的安装库里面进行安装。你也可以在下面的github里面下载:
GitHub的仓库地址:
FreeRTOS功能可以说是一套非常强大的工具,超出了Arduino支持的功能。
然而,正如我们的教程一样,我们仍然可以使用Arduino功能。例如,我们将使用常规的Serial.begin和Serial.print来处理打印到串行端口的消息。
操作系统中的任务和多任务的概念太复杂,无法在此介绍性帖子中进行解释。尽管如此,网上还有很多可以解释这些概念的好材料。
因此,我将尝试提供之后的文章中的一些介绍信息,但有一些东西会被介绍不到。我还会在相关内容部分留下一些可以帮助大家入门的链接。
现在,我们将首先简要解释什么是FreeRTOS以及什么是任务。
什么是FreeRTOS?
FreeRTOS是一种设计用于在微控制器上运行的实时操作系统。当然,由于微控制器受资源限制,因此需要对其上运行的任何操作系统进行充分设计。
然而,如上所述,FreeRTOS是一种实时操作系统,是一种特殊类型的操作系统。要了解实时操作系统是什么,我们需要查看我们习惯的常规操作系统。
例如,当我们使用Windows或Linux时,我们可以同时打开多个进程和应用程序,并且它们似乎都在同一时间运行。
然而,对于具有单核的计算机(事实是在多核系统中有所改变,但让我们坚持一个简单的例子),只有一个进程可以同时执行。因此,计算机所做的是非常快速地改变任务之间的执行,因此最终用户感觉事情正在同时发生[2]。
当然,这些过程的变化可能因不同的算法 而发生,但通常它确保每个过程获得一定数量的CPU来执行。具体情况取决于所涉及的操作系统。但通常情况下,人们无法预测多个任务的执行流程,这些流程不是确定性的。
另一方面,实时操作系统中的调度程序构建为具有确定性执行模式[1],这对于具有实时要求的应用程序是必需的。请注意,实时执行意味着满足每个定义的截止时间,它并不一定意味着快速执行。
因此,我们可以具有多任务性,因此我们不需要按顺序执行每个任务,例如,我们习惯于在Arduino环境中使用。最重要的是,我们可以大量控制这些任务进行,因为我们可以根据优先级预测执行流程。
什么是任务?
任务通常是实时操作系统的构建块。它们在自己的上下文中执行,调度程序负责决定在单个核心中的给定时刻正在执行哪个任务。
然而,如前所述,我们可以并行运行多个任务(每次只执行一个,但是可能实例化了很多),因此我们的程序更容易编写。
在FreeRTOS中,任务被实现为C函数并遵循预定义的原型,如下所示。
void taskImplementingFunction( void * parameter )
因此,任务将是一个非常重要的概念,我们需要在之后的教程中进行分析。