Rustでチョット気軽にセンサドライバ開発
by
ryochack
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Rustでチョット気軽にセンサドライバ開発 Rust×組み込み Interfaceオフ会@東京 2019-06-17 @ryochack
Slide 2
Slide 2 text
About Me @ryochack 組み込みソフトウェア開発が仕事 システムプログラミング目当てでRustを触り始めた 「いつまで僕らはC/C++を使い続けなければならないのか…」 2
Slide 3
Slide 3 text
この発表の構成要素 Rust FT232H, MPSSE bindgen embedded-hal 3
Slide 4
Slide 4 text
Rustでチョット気軽にセンサドライバ開発 4
Slide 5
Slide 5 text
センサのドライバ開発どうやっていますか? ※本発表での「センサ」は GPIO, I2C, SPI, UARTのI/Fを持つセンサを指します 5
Slide 6
Slide 6 text
おそらくだいたいこんな感じ? PCもしくはLinuxボード上で開発、Linuxボード上で実行 PC上で開発、MCUボード上で実行 6
Slide 7
Slide 7 text
こうできたら楽 PC上で開発、PC上で実行 7
Slide 8
Slide 8 text
できます 8
Slide 9
Slide 9 text
FTDI FT232H Adafruit FT232Hモジュール http://akizukidenshi.com/catalog/g/gM-08942/ 秋月電子通商 FT232HLモジュール http://akizukidenshi.com/catalog/g/gK-06503/ ※これ自体は全く新しいものではないです 9
Slide 10
Slide 10 text
MPSSE (Multi-Protocol Synchronous Serial Engine) USB経由でGPIO, SPI, I2Cを制御 これを使ってRustでのセンサのドライバ開発を楽にできないか? ➡ MPSSEの上でセンサのドライバ開発ができる環境を作ってみよう 10
Slide 11
Slide 11 text
既存のCのコード資産を活用したい 一からRustで実装し直すのは大変… 11
Slide 12
Slide 12 text
bindgen https://github.com/rust-lang/rust-bindgen CのヘッダファイルからRustのFFIバインディングを自動生成 MPSSEのOSS実装のlibmpsseからRustのコードを生成 https://code.google.com/archive/p/libmpsse/ 12
Slide 13
Slide 13 text
PCで開発したコードをターゲット上でも そのまま動かしたい MPSSE専用APIを抽象化したい 13
Slide 14
Slide 14 text
embedded-hal https://github.com/rust-embedded/embedded-hal RustのEmbedded devices Working Groupが策定 https://docs.rust-embedded.org/book/portability/ 今回は"Hardware Abstraction Layer Impl"を実装 14
Slide 15
Slide 15 text
mpsse-rs https://github.com/ryochack/mpsse-rs Workspace構成 mpsse-sys : bindgen生成のunsafeなFFIバインディング mpsse : Rustらしくするwrapper mpsse-hal : embedded-hal実装 ※いろいろ未完成… 15
Slide 16
Slide 16 text
Demo 16
Slide 17
Slide 17 text
余談 17
Slide 18
Slide 18 text
bindgen生成コードはケアする必要あり bindgenが出力するRustコードはunsafeかつ、直接的な呼び出しになっている ➡ 上位からRustらしく呼び出せるようにWrapする必要がある 18
Slide 19
Slide 19 text
bindgen wrap例 19
Slide 20
Slide 20 text
FT232Hは1つだけ接続する FT232Hが他にも接続されているとlibmpsseがデバイスを見つけられなくなる DigilentのAnalog Discovery 2などにもFT232Hが載っているため、波形計測は他のPCから… 20
Slide 21
Slide 21 text
オチ 既にmpsse-halと同じことをやってるcrateがあった…! https://github.com/geomatsi/ftdi-embedded-hal Rustで組込み系の何かを作る時には まずawesome-embedded-rustリポジトリを確認しましょう…! https://github.com/rust-embedded/awesome-embedded-rust 21
Slide 22
Slide 22 text
ありがとうございました This slide was generated by Marp 22