查看: 237|回复: 1

[Arduino] ESP32 Arduino教程:使用FreeRTOS函数

[复制链接]

引言

本文主要介绍ESP32平台上FreeRTOS(https://www.freertos.org/)的一些基本概念。


首先,使用Arduino IDE在ESP32平台上编写代码时,有一点非常重要,那就是我们可以使用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函数实现,如下文所述。


[AppleScript] 纯文本查看 复制代码
void taskImplementingFunction( void * parameter )


因此,任务是一个非常重要的概念,我们将在今后的教程中详细分析。


注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。
他写了200多篇有关ESP32、ESP8266的有用的教程和项目。

查看更多ESP32/ESP8266教程和项目:
中文版教程 : ESP32教程 合集
英文版教程 : ESP32 tutorial 合集


gada888  版主

发表于 2019-5-16 19:39:11

FreeRTOS能在ESP32上运行呀。还没试过
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail