Spresenseのマルチコア
13087 ワード
Spresenseのマルチコアを試す
SonyのSpresenseボードは、ARM Cortex M4Fを6個搭載している。ここでは、マルチコアプログラミングを試してみる。
環境
Arduino IDE利用。サンプルコードは下記にあるものを参考に作成。
また、こちらに、マルチコアプログラミングについて詳しい説明あり。
サンプル
MaincoreとSubcore(ここでは2番目)とがメッセージの送受信を行い、受信時にLEDを点灯させるもの。
ソースコード
Maincore
Main.ino
#ifdef SUBCORE // ①
#error "Core selection is wrong!!"
#endif
#include <MP.h>
int subcore = 2; /* Communication with SubCore2 */ // ②
void setup()
{
int ret = 0;
Serial.begin(115200);
while (!Serial);
/* Launch SubCore2 */
ret = MP.begin(subcore); // ③
if (ret < 0) {
printf("MP.begin error = %d\n", ret);
}
randomSeed(millis());
}
void loop()
{
int ret;
uint32_t snddata;
uint32_t rcvdata;
static int8_t sndid = 0;
int8_t rcvid;
snddata = random(32767);
ret = MP.Send(sndid, snddata, subcore); // ④
printf("MainCore Send: id=%d data=0x%08x\n", sndid, snddata);
sndid = (sndid != 127)? (sndid+1): 0;
if (ret < 0) {
printf("MP.Send error = %d\n", ret);
}
MP.RecvTimeout(3000); // Timeout 3000 msec
ret = MP.Recv(&rcvid, &rcvdata, subcore); // ⑤
ledOn(LED0); // ⑥
delay(500);
ledOff(LED0);
if (ret < 0) {
printf("MP.Recv error = %d\n", ret);
}
printf("MainCore Recv: id=%d data=0x%08x : %s\n\n", rcvid, rcvdata,
(snddata == rcvdata) ? "Success" : "Fail");
delay(1000);
}
- ①:Subcore指定時にはエラー
- ②:Subcore2の指定
- ③:Subcore2を指定してマルチコア起動
- ④:Subcore2へメッセージ(ランダム数値)送信
- ⑤:Subcore2からメッセージ受信
- ⑥:LED0点灯
Subcore
Sub2.ino
#if (SUBCORE != 2) // ⑦
#error "Core selection is wrong!!"
#endif
#include <MP.h>
void setup()
{
int ret = 0;
Serial.begin(115200);
while (!Serial);
ret = MP.begin(); // ⑧
if (ret < 0) {
printf("MP.begin error = %d\n", ret);
}
}
void loop()
{
int ret;
int8_t msgid;
uint32_t msgdata;
/* Echo back */
ret = MP.Recv(&msgid, &msgdata); // ⑨
if (ret < 0) {
printf("MP.Recv error = %d\n", ret);
}
delay(100);
printf("SubCore2 Recv: id=%d data=0x%08x\n", msgid, msgdata);
ledOn(LED2); // ⑩
delay(2000);
ledOff(LED2);
ret = MP.Send(msgid, msgdata); // ⑪
if (ret < 0) {
printf("MP.Send error = %d\n", ret);
}
}
- ⑦:Subcore2の指定(それ以外はエラー)
- ⑧;マルチコア起動
- ⑨:Maincoreからメッセージ受信
- ⑩:LED2点灯
- ⑪:Maincoreへメッセージ送信(ループバック)
Build
Build時に対象となるCoreを指定する必要がある。間違えるとBuildエラーとなる。(ソースコードの①、⑦参照。)
Maincore
Subcore2
実験
成功。
Author And Source
この問題について(Spresenseのマルチコア), 我々は、より多くの情報をここで見つけました https://qiita.com/infinite1oop/items/4a5efc2e1fb19e8ce2b3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .