FC2ブログ

773mbar

2018年11月 ≪  12345678910111213141516171819202122232425262728293031 ≫ 2019年01月
TOPスポンサー広告 ≫ Intel Galileo : マルチスレッドを試すTOPIntel Galileo ≫ Intel Galileo : マルチスレッドを試す

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | Comments(-) | Trackbacks(-)

Intel Galileo : マルチスレッドを試す

Galileoのスケッチ、子プロセスも起動できたし、マルチスレッドも動くはず。

やってみよう。

int led = 13;
unsigned int n = 0;

void setup() {
  pthread_t id_thread1, id_thread2;
  // ふたつのスレッドを起動する
  pthread_create(&id_thread1, NULL, thread1, NULL);
  pthread_create(&id_thread2, NULL, thread2, NULL);
}

void loop() {
  // 主スレッド、なにもしない。
}

void *thread1(void *arg) {
  pinMode(led, OUTPUT);
  while(true) loop_t1();
}

void *thread2(void *arg) {
  Serial.begin(115200);
  while(true) loop_t2();
}

void loop_t1() {
  digitalWrite(led, HIGH); 
  delay(1000); 
  digitalWrite(led, LOW); 
  delay(1000);
}

void loop_t2() {
  Serial.println(n++);
  delay(1000);
}

わざわざ while(true) loop_t1(); なんて書く必用は無いのだけど、Arduinoならではの setup() / loop() のスタイルに近いほうがそれっぽいなぁ、と思って。
スレッドの起動後は本来なら detach とか join とか必用だけど、いずれのスレッドも無限ループで終わりが無いので省略という行儀悪い書き方。

ということで、あっさり動いた。
これで、シリアルモニタに数をカウントしながらLEDが点滅する。
何か処理しつつ、センサーの入力待ちとかしたい時には積極的にマルチスレッドを使うというのも便利かもしれない。

スポンサーサイト
Intel Galileo | Comments(-) | Trackbacks(-)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。