11302| 1
|
[ESP32系列教程] ESP32 Arduino教程:使用FreeRTOS函数 |
引言 本文主要介绍ESP32平台上FreeRTOS(https://www.freertos.org/)的一些基本概念。 FreeRTOS库可由GitHub仓库访问:https://github.com/espressif/arduino-esp32/tree/3c071e1d899707bc4d63aed63de4772f62d5be53/tools/sdk/include/freertos/freertos 。 所以,FreeRTOS函数为我们提供了非常强大的工具组合,使我们能够获得Arduino内生支持之外的更强功能。 话虽如此,使用Arduino函数其实也能实现同样的功能,我们将在后续帖子中对此进行说明。举例来说,我们将使用常规的Serial.begin和Serial.print将消息输出到串口。 要解释清楚操作系统中的任务和多任务概念,对于一篇入门级帖子来说无疑过于复杂。但是,在网上有许多很好的资料都对这些概念进行了解释。而且FreeRTOS也提供了非常细致的说明。 因此,我会在以后的帖子里提供一些背景材料,当然有些内容仍然不会涉及。但是我会在相关内容中提供一些链接,以帮助您更好地学习和理解。 接下来,我会先简要解释一下什么是FreeRTOS以及什么是任务。 什么是FreeRTOS? FreeRTOS是运行在微控制器上的一种实时操作系统[1]。鉴于微控制器资源有限,其上所运行的操作系统当然也需要进行精心设计。 不管怎样,正如上文所说,FreeRTOS是一款实时操作系统-一种比较特殊的操作系统。为了理解什么是实时操作系统,我们需要先看一下平常所使用的普通操作系统。 举例来说,在我们使用Windows或Linux时,我们可以同时打开多个进程和应用程序,而且它们看起来都是同时运行的。对最终用户来说,这一点显而易见。 但是,对于单核计算机来说(多核系统会更复杂,但是我们还是以简单的例子来进行说明),一次只能执行一个进程[2]。所以,计算机其实是在多个任务之间非常快速地进行切换,以至于用户感觉好像一切都在同时进行[2]。 进程的切换通常依赖于不同的算法(https://www.studytonight.com/operating-system/cpu-scheduling.php),但是都能保证每个进程获得足够的CPU执行时间。当然,具体细节取决于实际的操作系统。一般来说,我们无法预测多个进程的执行过程,因为这个过程并非确定不变。 另一方面,实时操作系统内置的调度程序具有确定的执行方式[1],以满足应用程序的实时需求(http://scitechconnect.elsevier.com/real-time-embedded-systems/)。需要注意的是,实时执行只是意味着满足确定的执行时限要求[3],并不一定能实现更快的速度。 因此,就以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教程和项目: 中文版教程 : ESP32教程 合集 英文版教程 : ESP32 tutorial 合集 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed