Rustでチョット気軽にセンサドライバ開発
by
ryochack
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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