如何在Arduino Nano 33 BLE开发板上使用Mbed RTOS功能

网友投稿 2019-09-21 11:27

新的Arduino Nano 33 BLE开发板具有基于Mbed实时操作系统的不同内核,从而可以在您的Arduino草图中访问RTOS的许多功能。

在本篇文章中,我将讨论开始在Arduino上进行实时编程所需的步骤,并为您提供一些示例,以帮助您立即启动并运行。

配置Arduino IDE

值得庆幸的是,Arduino工程师决定保留旧版Arduino内核的所有功能。这意味着您仍然可以像以往一样使用经典的Arduino IDE并对新的Arduino Nano进行编程。

首先,将Arduino连接到您的计算机。必要的驱动程序会自动安装。完成后,打开Arduino IDE并导航至“Tool”,然后导航至“ Boards”,然后选择“ Boards Manager”。将会出现一个新窗口。在其中搜索“ Arduino Nano 33 BLE”并安装以下软件包:


为您的Arduino Nano 33 BLE安装软件包。

然后,从Boards菜单中选择新安装的开发板:

https://cdn.china-scratch.com/timg/190923/112J3L41-0.jpg

从Tool下拉菜单中选择您的Nano 33 BLE。

Nano 33 BLE的Hello World应用程序

让我们从一个简单的应用程序开始,该应用程序将帮助我们确定Mbed库是否已正确安装并正常运行。以下代码将仅在Arduino Nano 33 BLE的D5引脚上输出方波信号:

mbed_waiting.ino

如您所见,您可以轻松地将旧的Arduino函数与新的Mbed方法混合使用。该代码看起来不是很多,但是如果您能够编译并将其上传到Arduino,则可以开始使用。值得注意的是,与标准Arduino的delay函数不同,Mbed的wait函数会尝试将Arduino置于低功耗模式。

MBed API和可用功能

如前所述,您可以访问Mbed OS的许多功能。不幸的是,我找不到能说明可用功能的官方消息。

如果您查看MBed API,则会发现一些特定于设备的API(例如,存储和NFC)。我认为很明显,这些都行不通。

但是,已实现了平台和RTOS功能,并且USB、驱动程序和蓝牙BLE库也应正常工作,但我尚未对其进行测试。但是如上所述,您可以将MBed功能与经典的Arduino调用混合使用,因此找到解决方案并不难。

平台API

以下示例使用MBed平台API中的CircularBuffer:

mbed_circular_buffer.ino

该程序只将十个值写入缓冲区,然后打印存储的值。

创建一个多线程应用程序

现在,让我们看一下新内核的主要功能:多线程Arduino草图。您可以使用RTOS命名空间来创建、同步和管理线程。以下示例将产生两个线程,这些线程将修改共享缓冲区。同步是通过信号量完成的。

然后,主线程将读取缓冲区,如果缓冲区不为空,则将其内容打印到控制台:

thread-semaphores.ino

writeBuffer方法由两个子线程执行,一旦启动,它将永远运行。每个线程在修改缓冲区之前都会要求信号量写入缓冲区。如果没有其他线程在使用它,则将授予访问权限,并且该线程将其名称写入缓冲区。

在setup函数中,创建并启动了两个子线程。loop方法代表第三个线程,它将从缓冲区读取内容并将其打印到控制台:

https://cdn.china-scratch.com/timg/190923/112J35516-1.jpg

如您所见,每个名称都会正确打印,并且其他线程不会覆盖任何内容。您还可以观察到Bill出现的频率更高。这完全正常,因为我们的应用程序没有处理。

但是,RTOS命名空间提供了更多的锁定机制,可以用来解决此问题。

利用Mbed内核功能进行练习

新的Arduino内核为完善的平台提供了许多有用的补充,尤其是在涉及共享资源的多线程和并发访问控制时。但是,由于并行计算的性质,使用这些功能可能会很复杂。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com