Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プログラミング言語 Rust によるベアメタル環境向け SW 開発の一側面

Avatar for tarotene tarotene
November 21, 2024

プログラミング言語 Rust によるベアメタル環境向け SW 開発の一側面

Avatar for tarotene

tarotene

November 21, 2024
Tweet

More Decks by tarotene

Other Decks in Technology

Transcript

  1. 自己紹介 • 氏名: 杉本 健太朗
 (すぎもと けんたろう) • 所属: ArkEdge

    Space Inc. • 2023/04 - • 人工衛星の姿勢制御系 FW • 前職: Photosynth Inc. • 2021/04(新卒)- 2023/03 • スマートロックの FW • あんまり制御っぽいことはしていない • 興味のあること • 高速通信向け物理層(Ethernet, USB, …) • 制御理論全般 GitHub LinkedIn Follow me!
  2. • 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW

    依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
  3. • 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW

    依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 HW スタートアップにありがちなこと
  4. • 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW

    依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 Embedded Rust の主戦場 HW スタートアップにありがちなこと
  5. • target-triple によって Tier 1, Tier 2, Tier 3 に分類

    • Tier 1: 完全なビルド + 完全な動作 を担保 • 例: aarch64-unknown-linux-gnu, x86_64-apple-darwin • Tier 2: 完全なビルド + 一部の動作 を担保 • 例: armv7-unknown-linux-gnueabihf, thumbv7em-none-eabihf • Tier 3: 一部のビルド + 一部の動作 を担保 • 例: mipsel-sony-psp • Host tools と言って開発環境としての利用の担保もある • 要するに Tier 3 までの何かしらに引っかかる CPU の選定が必要! The rustc book / Platform support より Rust は元来特定 CPU 向け
  6. • 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW

    依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
  7. • 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW

    依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 パッケージマネージャ兼プロジェクトマネージャ Cargo の力 Crate システムによる SW のモジュール化促進
  8. • 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW

    依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
  9. • 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW

    依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 コマンドラインツール Cargo の力 ビルドやテストもその場でできる(コンテキストスイッチ軽減にも寄与) 任意のテキストエディタ、IDE を使用可能 特にロジックを注入する仕組みに強い
  10. • HW の用意 • ターゲット: STS32-DIS-10KS • I2C の温度センサ •

    Thermo 30 Click (MIKROE) という評価ボードを通して利用 • 開発用基板: STM32F4 Discovery Board • その他: STM32F4 Discovery Shield (MIKROE) • SW の用意 • 実装(ビルド・サンプルアプリの書き込みや実行など) • テスト(target-tests という sub-directory crate を用意)
 テーマ: 再利用可能なデバイスドライバを書く お品書き
  11. HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿して使う

    • mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・ CPU の評価基板などは基 本これ • cf. seeed の xiao / grove
  12. HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿して使う

    • mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・ CPU の評価基板などは基 本これ • cf. seeed の xiao / grove
  13. HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿

    して使う • mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・CPU の評価基板などは基本これ • cf. seeed の xiao / grove • Thermo 30 Click で検証する
  14. • ここから疑似ライブコーディングをするので、少し画面を変えます. • やること • cargo init --lib • .cargo/config.toml

    の編集 • Patch: stm32f3xx.yaml の追加 • Cargo.toml の編集 • dependencies • bitfield-struct • embedded-hal • dev-dependencies(基本コピペ) • cortex-m{,rt} • defmt{,-rtt} • panic-probe • stm32f3xx-hal • lib.rs の編集(コピペ) • examples/hello.rs のテスト • 最後に target-tests という空の crate を掘る プロジェクトの立ち上げ SW の開発
  15. Thermo 30 Click STS-32-DIS-10KS • ソースコードはこちらに:
 https://github.com/tarotene/ sts32-33-dis • 使用したライブラリなど

    • bitfield_struct • レジスタマップの as a code にはよく利用する • embedded-hal (v1.x.y) • マルチドロップ環境でバス共有 の仕組みが比較的良い感じ
  16. 閑話休題 / Tips 着実にドライバ開発を進める方法 • デバイス(センサ・アクチュエータ)が持つ性 質の volatility/ambiguity に着目して順にやる •

    恒久的に不変: シリアルナンバーなど • 一定の論理制約のもとで不変: 設定値など • 不変性を保証できない: 測定値など • Prinf 文デバッグ(大粒度極限)とデバッガに よる step 実行(小粒度極限)の間で上手く開 発者体験を調節する • シリアル端末の埋込み • rust-embedded-community/ menu • funbiscuit/embedded-cli-rs