引言
首先,使用Arduino IDE在ESP32平台上编写代码时,有一点非常重要,那就是我们可以使用FreeRTOS库中的众多函数。库里提供的这个例子: (使用信号量和互斥量)就很清楚地说明了这一点。
所以,FreeRTOS函数为我们提供了非常强大的工具组合,使我们能够获得Arduino内生支持之外的更强功能。
话虽如此,使用Arduino函数其实也能实现同样的功能,我们将在后续帖子中对此进行说明。举例来说,我们将使用常规的Serial.begin和Serial.print将消息输出到串口。
要解释清楚操作系统中的任务和多任务概念,对于一篇入门级帖子来说无疑过于复杂。但是,在网上有许多很好的资料都对这些概念进行了解释。而且FreeRTOS也提供了非常细致的说明。
因此,我会在以后的帖子里提供一些背景材料,当然有些内容仍然不会涉及。但是我会在相关内容中提供一些链接,以帮助您更好地学习和理解。
接下来,我会先简要解释一下什么是FreeRTOS以及什么是任务。
什么是FreeRTOS?
FreeRTOS是运行在微控制器上的一种实时操作系统[1]。鉴于微控制器资源有限,其上所运行的操作系统当然也需要进行精心设计。
不管怎样,正如上文所说,FreeRTOS是一款实时操作系统-一种比较特殊的操作系统。为了理解什么是实时操作系统,我们需要先看一下平常所使用的普通操作系统。
举例来说,在我们使用Windows或Linux时,我们可以同时打开多个进程和应用程序,而且它们看起来都是同时运行的。对最终用户来说,这一点显而易见。
但是,对于单核计算机来说(多核系统会更复杂,但是我们还是以简单的例子来进行说明),一次只能执行一个进程[2]。所以,计算机其实是在多个任务之间非常快速地进行切换,以至于用户感觉好像一切都在同时进行[2]。
因此,就以Arduino环境下为例,我们就可以实现并行运行,而无需像之前那样顺序地执行每个任务。最重要的是,我们可以根据优先级预测具体的执行过程,从而对所有任务都有更多的掌控。
什么是任务?
任务是实时操作系统的基本模块[4]。它们在自己的上下文中执行,调度程序负责决定单核CPU在某个时刻[5]应该执行哪个任务。
尽管如此,如前文所述,我们可以并行运行多个任务(每次只执行一个任务,但是可以有更多的实例),因此代码编写就会更加简单。
在FreeRTOS中,任务通常需要使用符合预定义原型[6]要求的C函数实现,如下文所述。
[mw_shl_code=applescript,true]void taskImplementingFunction( void * parameter )[/mw_shl_code]
因此,任务是一个非常重要的概念,我们将在今后的教程中详细分析。
注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。 他写了200多篇有关ESP32、ESP8266的有用的教程和项目。
查看更多ESP32/ESP8266教程和项目:
|