
不管你是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開發者官方網站上找到。