风筝
发表于: 2019-9-22 15:24:13 | 显示全部楼层

新的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.png

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


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

newly installed board.png

从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方法代表第三个线程,它将从缓冲区读取内容并将其打印到控制台:

buffer.png


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


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


利用Mbed内核功能进行练习

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


以下是本文使用的源代码: arduino-mbed-examples.zip (2.69 KB, 下载次数: 11)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 17:11 , Processed in 0.050616 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表