O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる

34 visualizações

Publicada em

いまどきの組込みOSの​
ZephyrRTOSと​
OpenThreadを​
Arduino環境で遊んでみる

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる

  1. 1. いまどきの組込みOSの ZephyrRTOSと OpenThreadを Arduino環境で遊んでみる あすもの研 5月度 MEETUP 富士通コンピューターテクノロジーズ 常田 裕士
  2. 2. 最近の組み込みOS事情 qFreeRTOS • Anazonが買収(2017年) ThreadX RTOS • Microsoftが買収(2019年)
  3. 3. Zephyr-RTOS q元々WindRiver社のプロジェクトだったが、オープンソース化 q現在はLinux Foundationが開発を進めている • Nordic Semiconductorが積極的にコミット q4月に最新版のv1.14.0がリリース
  4. 4. Zephyr-RTOSの特徴 q全体的にLinux風味の組み込みOS qprintk()など、Linuxのカーネル見たことある人なら、 ナントナクソレッポイのが見える。 qいろんなハードに対応するため、Linuxで実績のあるmenuconfigを移植している 現在150種類以上のボードに対応 q FreeRTOSと比べると、「大きなOS」 q FreeRTOSは敢えてタスクの実行関係だけに絞っていて、他はオプション q ZephyrRTOSはドライバから何から、「色々入っている」 menuconfig, DeviceTree導入の帰結で、要らないものを外してコンパイルできるから。
  5. 5. OpenThread Google傘下のNestが作ったIoT向け通信規格のThreadのオープンソース版 IEEE802.15.4, 6LoWPAN, COAPなどのオープン標準の上に作られている。 Threadの仕様はThread Groupで作っている。 • 仕様書は登録すれば無料で読める。ただし情報公開に制限あり。 • 認証には金がかかる(Bluetoothなんかと同じ) 各種の組み込みOSに埋め込んで使える。 • 現在ZephyrRTOSとFreeRTOSに対応が入っている。
  6. 6. Google Next Hub Maxに搭載! 2019年夏、アメリカ、イギリス、オーストラリアで発売予定
  7. 7. ZephyrRTOSをArduino環境から使う https://github.com/soburi/arduino-on-zephyr 実体としては、ZephyrRTOS組み込んだArduino互換実装 Arduinoからコンパイルできるようにするために、あの手この手で動かしている。
  8. 8. main()が動けばいいじゃない! // cores/arduino/main.cpp int main(void) { init(); initVariant(); setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } return 0; } Arduinoのメインの処理はこれだけ。 Init(), initVariant()は初期化処理。必要なければ何もし なくてもよい。 serialEventRunも設定しなければ何もしない。 setup(), loop()は自分で書いている。  実は何もしなくてよい。
  9. 9. Lチカ  pinMode(), digitalWrite(), delay()は作る必要がある  だいたい似たような関数がZephyrRTOSにある • delay()  ZephyrRTOSではk_sleep()が全く同じ機能。 • digitalWrite()  gpio_pin_write()が同じ機能。ピンの番号だけ変換。 • pinMode() • gpio_pin_configure()が同じ機能  attachIntterupt()もpinの設定を変えるけど?  Arduinoだと、attachInterrupt()はレジスタ見てピン状態を確認してる  ZephyrRTOSだと、ピンの状態調べられない?!  いい感じに実装する void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); }
  10. 10. コンパイルする 最近のArduino(1.8以降)はarduino-builderのコマンドを経由 して、コンパイラを動かしている Arduinoのhardware以下のフォルダにあるplatform.txtを読 み取って、コンパイルのコマンドを決めている。 Arduinoの.inoファイルはコンパイル時にC++のソースに変換 される。 ArduinoIDE arduino-builder.exe gcc
  11. 11. ZephyrRTOSのコンパイル ZephyrRTOSではCMakeとninjaでビルドシステムが作られて いる。 コンパイラの設定はZephyrRTOS側で持っている CMake ninja gcc
  12. 12. 黒魔術 arduino-builderからコンパイラが起動されるので、platform.txtを書き 換えて、コンパイラの部分を乗っ取る コンパイルのコマンドを引っ掻き集めて、CMakeのファイルを作る。 あとはZephyrRTOSのビルドの仕組みでビルドする。 arduino-builderのpreprocessの処理が酷い 使われているライブラリを探す処理をpreprocessでやっている インストールされているライブラリのディレクトリをひとつずつ include対象にして、総当たりでコンパイルエラーが発生しない 設定を探す。 ArduinoIDE arduion-builder.exe 独自コマンド CMake Ninja gcc
  13. 13. 独自ライブラリを作る 今回はZephyrRTOSに組み込まれているOpenThreadを使いたいので、ライブラリを作成した 基本的には、「関数を呼ぶだけ」 https://www.arduino.cc/en/Reference/APIStyleGuide • Arduinoのライブラリの作成ガイド • Don’t assume knowledge of pointers. • ArduinoのAPI設計の根幹 • Computer Science的な原則と敵対することになる。 • Abstract禁止! • これを守ると、ライブラリの使用感がArduinoっぽくなる。
  14. 14. 通信 自作のOpenThread APIを使って、RaspberryPiと UDP echoで単純な通信ができた。 通信自体は従来のArduinoのUDPライブラリと同じ。ノウハウがそのまま使える。 NRF52840 (Arduino化) RaspberryPI (Linux) OpenThread モジュール echo echo
  15. 15. nRF52840 国内で入手できるモジュールもようやく増えてきた https://www.sparkfun.com/products/15025 千石電商で売ってる https://www.switch-science.com/catalog/5400/ SwitchScienceで売ってる https://makezine.com/2019/05/17/arduino-unveils-new-nano-family-of-boards/ 5/17に発表された Arduino Nano33 にも搭載予定
  16. 16. まとめ ZephyrRTOS/OpenThreadはGoogle Nest Hub Maxが流行ると、面白くなるかも。 arduinoのAPIの設計はクセがある。 arduino-builderの闇は深い。 nRF52840のボードが出てきたので、OpenThreadで遊ぶ環境が作りやすくなった。 OpenThreadを触ってるやつがいない。

×