不管你是Arduino领域的新手还是经验丰富的开发人员,很可能你还只使用过单核在进行编程。 这没有什么好笑的---- 事实上,直到几天前我才使用Arduino IDE进行了第一次多核编程。 我和所有其他Arduino粉丝都非常喜欢IDE的易用性以及MicroController 开发所需的很少的环境配置。 同样的IDE,只需要很少的环境配置,就可以用于多核开发了。
下面来看看怎样编写使用六个并行MCU内核的程序吧,但在此之前首先让我们来了解为什么多核优于一个内核。
为什么要使用多核?
如果你的项目是关于读取传感器的值或让LED亮起来这种简单而无需任何复杂的计算的工作,那么你的电路板的MCU有1个或100个核心都是一样的。 这种简单地工作无论用1核还是100核最后得出的效果都是很相似的 - 至少从人类可以感知到的角度来看。 但是,通过多个核心,你可以开发具有复杂算法和计算的更先进的解决方案,例如快速傅里叶变换,手势识别,边缘计算,预测性维护,甚至是简单的实时3D渲染。 下面,我们将介绍如何利用索尼的物理网开发套件"Spresense"来在Arduino IDE里进行多核编程。 该板不仅具有六个ARM核心,还有高达156 MHz的频率。 而且如果需要的话,这个板子可以使用电池供电。
第一步: 在Arduino IDE里安装Spresense
Spresense Arduino软件包1.3.0版以上支持使用Arduino IDE进行多核编程。 如果你还没有安装它,最简单的方法是按照Spresense开发人员网站上的步骤操作。
链接:https://developer.sony.com/develop/spresense/developer-tools/get-started-using-arduino-ide/set-up-the-arduino-ide#_installation_through_arduino_ide_board_manager
第二步:打开示例代码
我们使用的例子将用一个主核和四个子核,在Arduino IDE的文件菜单中,打开示例代码:File → Examples → MultiCore MP → Boot → Main
这个 main.ino 代码(Sketch)中 包含了多核MP库
,在FOR循环中调用MP.begin(subid)
函数来启动每个子核:
第三步:编译并上传主核心代码
为了上传Spresense板上面正确核心的代码(Sketch),从Arduino IDE 工具菜单选择:Tools → Core → MainCore
接下来,按下上传按钮上传编译主核代码:
第四步:快速检查
如果上传成功了的话,主核现在应该已经被编好程了。你可以打开串口检测器看看输出,如下图,主核工作良好,其他的核心有一个错误。这当然,因为我们还没有上传他们的代码,这就是我们接下来要做的。
第五步:子核心编程
在IDE中,打开File → Examples → MultiCore MP → Boot → Sub1
在setup()
函数里, MP.begin()
函数通知主核各个子核已经启动好了. 在loop()
函数里, MPlog()
每一次迭代输出 一次“loop” 并且让第一个LED灯闪一下。
第六步:子核程序编译上传
从Arduino IDE 的工具菜单中选择SubCore 1
:Tools → Core → SubCore 1
.
按下上传按钮编译上传子核程序到板子上
然后,对剩下的三个子核重复5和6步。
第七步:最终结果
如果子核程序上传的对的话,LED灯会闪烁,并且串口监视器会输出所有核心的记录:
如果你想把所有核心代码放在一个Sketch里,可以参照 MessageHello这个示例代码,在Spresense的官方网站上,更多的例子也可以在Spresense开发者官方网站上找到。