fc2ブログ

773mbar

2024年03月 ≪  123456789101112131415161718192021222324252627282930 ≫ 2024年05月
TOPIntel Galileo ≫ Intel Galileo : マルチスレッドを試す

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(-)