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
220
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
680
Other Decks in Technology
See All in Technology
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
250
FDEの心得
noriakioji
5
6k
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
事業価値と Engineering 2026年度版
recruitengineers
PRO
49
24k
変化の早いClaude Codeを 書籍に落とし込む
oikon48
7
1.4k
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
260
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
290
モバイルアプリ開発概論2026
recruitengineers
PRO
5
600
TypeScript入門 2026
recruitengineers
PRO
3
580
【CEDEC2026】Creative Approaches to Localizing the Dialects and Unique Speech of Umamusume: Pretty Derby Characters in English
cygames
PRO
3
22k
【AG-UI × A2UI × MCP Apps】Generative UIをやさしく解説する
nrinetcom
PRO
1
120
Featured
See All Featured
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
The Spectacular Lies of Maps
axbom
PRO
1
910
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
470
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
430
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Site-Speed That Sticks
csswizardry
13
1.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Optimizing for Happiness
mojombo
378
71k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
GraphQLとの向き合い方2022年版
quramy
50
15k
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