Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プログラミング言語 Rust によるベアメタル環境向け SW 開発の一側面
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tarotene
November 21, 2024
Technology
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
プログラミング言語 Rust によるベアメタル環境向け SW 開発の一側面
tarotene
November 21, 2024
More Decks by tarotene
See All by tarotene
mikroBus HAT を用いた簡易ベアメタル開発
tarotene
0
660
Other Decks in Technology
See All in Technology
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
340
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
120
React、まだ楽しくて草
uhyo
7
4.2k
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
2
490
あなたの AI ワークスペースに、 専門コーダーを連れてくる - Amazon Quick Desktop 最新情報
kawaji_scratch
1
120
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.2k
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
310
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
300
非定型業務をAI slackbotで自動化する ~ 社内要望を自動壁打ちするbotを作った ~/automating-ad-hoc-work-with-ai-slackbot
shibayu36
0
530
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
270
Ruby::Boxでできること、Refinementsでできること
joker1007
3
410
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
310
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.1k
Rails Girls Zürich Keynote
gr2m
96
14k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
550
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
340
Design in an AI World
tapps
1
230
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Paper Plane
katiecoart
PRO
1
51k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
210
Done Done
chrislema
186
16k
ラッコキーワード サービス紹介資料
rakko
1
3.6M
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Transcript
Kentaro Sugimoto (tarotene) / 第18回オープンエッジデバイス研究会 / ソニークリエイティブラウンジ プログラミング言語 Rust による
ベアメタル環境向け SW 開発の一側面 Embedded Rust Driver Made Easy
自己紹介 • 氏名: 杉本 健太朗 (すぎもと けんたろう) • 所属: ArkEdge
Space Inc. • 2023/04 - • 人工衛星の姿勢制御系 FW • 前職: Photosynth Inc. • 2021/04(新卒)- 2023/03 • スマートロックの FW • あんまり制御っぽいことはしていない • 興味のあること • 高速通信向け物理層(Ethernet, USB, …) • 制御理論全般 GitHub LinkedIn Follow me!
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 HW スタートアップにありがちなこと
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 Embedded Rust の主戦場 HW スタートアップにありがちなこと
Q. 元々 C がメインの現場で 即座に Rust の導入は可能?
Q. 元々 C がメインの現場で 即座に Rust の導入は可能? A. 状況による
• 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 向け
Q. 結局、タイミングクリティカルな製品向けの(ベア メタルな)動作環境として、SW エンジニアの開発者 体験だけを考えるとどうなる…?
Q. 結局、タイミングクリティカルな製品向けの(ベア メタルな)動作環境として、SW エンジニアの開発者 体験だけを考えるとどうなる…? A. 有効な解の一つは Arm Cortex-M
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 パッケージマネージャ兼プロジェクトマネージャ Cargo の力 Crate システムによる SW のモジュール化促進
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」
• 要求: PoC 開発の高速化、小ロット生産、異種混合カスタマイズ、… • OSS の恩恵を最大限受けられる状態にある • デバイスドライバや各種 HW
依存コードが再利用可能 • 再利用を促進するエコシステム込みで考える • 不自由な開発環境(IDE)の強制を受けない • いつでも等価なビルドを plaintext で as as code できる • 自動テストやその他の検証周りが pluggable にできる 2024 年時点でのスナップショット 自分の考える「組込み開発」 コマンドラインツール Cargo の力 ビルドやテストもその場でできる(コンテキストスイッチ軽減にも寄与) 任意のテキストエディタ、IDE を使用可能 特にロジックを注入する仕組みに強い
• HW の用意 • ターゲット: STS32-DIS-10KS • I2C の温度センサ •
Thermo 30 Click (MIKROE) という評価ボードを通して利用 • 開発用基板: STM32F4 Discovery Board • その他: STM32F4 Discovery Shield (MIKROE) • SW の用意 • 実装(ビルド・サンプルアプリの書き込みや実行など) • テスト(target-tests という sub-directory crate を用意) テーマ: 再利用可能なデバイスドライバを書く お品書き
HW の用意: STM32F4 Discovery Shieldの紹介
HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿して使う
• mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・ CPU の評価基板などは基 本これ • cf. seeed の xiao / grove
HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿して使う
• mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・ CPU の評価基板などは基 本これ • cf. seeed の xiao / grove
HW の用意 STM32F4 Discovery Shield • STM32F4 Discovery Board を挿
して使う • mikroBUS が 4 つ搭載 • MIKROE のソケット規格 • センサ・アクチュエータ・CPU の評価基板などは基本これ • cf. seeed の xiao / grove • Thermo 30 Click で検証する
SW の開発
• ここから疑似ライブコーディングをするので、少し画面を変えます. • やること • 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 の開発
おまけ
Thermo 30 Click STS-32-DIS-10KS • ソースコードはこちらに: https://github.com/tarotene/ sts32-33-dis • 使用したライブラリなど
• bitfield_struct • レジスタマップの as a code にはよく利用する • embedded-hal (v1.x.y) • マルチドロップ環境でバス共有 の仕組みが比較的良い感じ
Thermo 30 Click STS-32-DIS-10KS (Sensiron の Datasheet STS3x-DIS より)
閑話休題 / Tips 着実にドライバ開発を進める方法 • デバイス(センサ・アクチュエータ)が持つ性 質の volatility/ambiguity に着目して順にやる •
恒久的に不変: シリアルナンバーなど • 一定の論理制約のもとで不変: 設定値など • 不変性を保証できない: 測定値など • Prinf 文デバッグ(大粒度極限)とデバッガに よる step 実行(小粒度極限)の間で上手く開 発者体験を調節する • シリアル端末の埋込み • rust-embedded-community/ menu • funbiscuit/embedded-cli-rs