狠狠撸
Submit Search
いまどきの組込みOSの? ZephyrRTOSと? OpenThreadを? Arduino環境で遊んでみる
?
Download as PPTX, PDF
?
3 likes
?
1,383 views
裕士 常田
Follow
いまどきの組込みOSの? ZephyrRTOSと? OpenThreadを? Arduino環境で遊んでみる
Read less
Read more
1 of 16
Download now
More Related Content
いまどきの組込みOSの? ZephyrRTOSと? OpenThreadを? Arduino環境で遊んでみる
1.
いまどきの組込みOSの ZephyrRTOSと OpenThreadを Arduino環境で遊んでみる あすもの研 5月度 MEETUP 富士通コンピューターテクノロジーズ
常田 裕士
2.
最近の組み込みOS事情 qFreeRTOS ? Anazonが買収(2017年) ?ThreadX RTOS ?
惭颈肠谤辞蝉辞蹿迟が买収(2019年)
3.
Zephyr-RTOS q元々WindRiver社のプロジェクトだったが、オープンソース化 q現在はLinux Foundationが開発を進めている ? Nordic
Semiconductorが積極的にコミット q4月に最新版のv1.14.0がリリース
4.
Zephyr-RTOSの特徴 q全体的にLinux風味の組み込みOS qprintk()など、Linuxのカーネル見たことある人なら、 ナントナクソレッポイのが見える。 qいろんなハードに対応するため、Linuxで実績のあるmenuconfigを移植している ?現在150種類以上のボードに対応 q FreeRTOSと比べると、「大きなOS」 q FreeRTOSは敢えてタスクの実行関係だけに絞っていて、他はオプション q
ZephyrRTOSはドライバから何から、「色々入っている」 ?menuconfig, DeviceTree導入の帰結で、要らないものを外してコンパイルできるから。
5.
OpenThread ?Google傘下のNestが作ったIoT向け通信規格のThreadのオープンソース版 ?IEEE802.15.4, 6LoWPAN, COAPなどのオープン標準の上に作られている。 ?Threadの仕様はThread
Groupで作っている。 ? 仕様書は登録すれば無料で読める。ただし情報公開に制限あり。 ? 認証には金がかかる(Bluetoothなんかと同じ) ?各種の組み込みOSに埋め込んで使える。 ? 現在ZephyrRTOSとFreeRTOSに対応が入っている。
6.
Google Next Hub
Maxに搭載! 2019年夏、アメリカ、イギリス、オーストラリアで発売予定
7.
ZephyrRTOSをArduino環境から使う ?https://github.com/soburi/arduino-on-zephyr ?実体としては、ZephyrRTOS組み込んだArduino互換実装 ?Arduinoからコンパイルできるようにするために、あの手この手で動かしている。
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.
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.
コンパイルする ?最近のArduino(1.8以降)はarduino-builderのコマンドを経由 して、コンパイラを動かしている ?Arduinoのhardware以下のフォルダにあるplatform.txtを読 み取って、コンパイルのコマンドを決めている。 ?Arduinoの.inoファイルはコンパイル時にC++のソースに変換 される。 ArduinoIDE arduino-builder.exe gcc
11.
ZephyrRTOSのコンパイル ?ZephyrRTOSではCMakeとninjaでビルドシステムが作られて いる。 ?コンパイラの設定はZephyrRTOS側で持っている CMake ninja gcc
12.
黒魔術 ?arduino-builderからコンパイラが起動されるので、platform.txtを書き 換えて、コンパイラの部分を乗っ取る ?コンパイルのコマンドを引っ掻き集めて、CMakeのファイルを作る。 ?あとはZephyrRTOSのビルドの仕組みでビルドする。 ?arduino-builderのpreprocessの処理が酷い ?使われているライブラリを探す処理をpreprocessでやっている ?インストールされているライブラリのディレクトリをひとつずつ include対象にして、総当たりでコンパイルエラーが発生しない 設定を探す。 ArduinoIDE arduion-builder.exe 独自コマンド CMake Ninja gcc
13.
独自ライブラリを作る ?今回はZephyrRTOSに組み込まれているOpenThreadを使いたいので、ライブラリを作成した ?基本的には、「関数を呼ぶだけ」 ?https://www.arduino.cc/en/Reference/APIStyleGuide ? Arduinoのライブラリの作成ガイド ? Don’t
assume knowledge of pointers. ? ArduinoのAPI設計の根幹 ? Computer Science的な原則と敵対することになる。 ? Abstract禁止! ? これを守ると、ライブラリの使用感がArduinoっぽくなる。
14.
通信 ?自作のOpenThread APIを使って、RaspberryPiと UDP
echoで単純な通信ができた。 ?通信自体は従来のArduinoのUDPライブラリと同じ。ノウハウがそのまま使える。 NRF52840 (Arduino化) RaspberryPI (Linux) OpenThread モジュール echo echo
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.
まとめ ?ZephyrRTOS/OpenThreadはGoogle Nest Hub
Maxが流行ると、面白くなるかも。 ?arduinoのAPIの設計はクセがある。 ?arduino-builderの闇は深い。 ?nRF52840のボードが出てきたので、OpenThreadで遊ぶ環境が作りやすくなった。 ?OpenThreadを触ってるやつがいない。
Download