Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
KI
Uploaded by
Kenta IDA
PPTX, PDF
5,588 views
M5StackをRustで動かす
M5StackのアプリケーションをRustで書いて動かすために試したこと
Software
◦
Read more
3
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 18
2
/ 18
3
/ 18
4
/ 18
5
/ 18
6
/ 18
7
/ 18
8
/ 18
9
/ 18
10
/ 18
11
/ 18
12
/ 18
13
/ 18
14
/ 18
15
/ 18
16
/ 18
17
/ 18
18
/ 18
More Related Content
PDF
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
PDF
tf,tf2完全理解
by
Koji Terada
PPT
Glibc malloc internal
by
Motohiro KOSAKI
PDF
C/C++プログラマのための開発ツール
by
MITSUNARI Shigeo
PDF
Tensorflow Liteの量子化アーキテクチャ
by
HitoshiSHINABE1
PDF
トランザクションの並行実行制御 rev.2
by
Takashi Hoshino
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
プログラムを高速化する話
by
京大 マイコンクラブ
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
by
Preferred Networks
tf,tf2完全理解
by
Koji Terada
Glibc malloc internal
by
Motohiro KOSAKI
C/C++プログラマのための開発ツール
by
MITSUNARI Shigeo
Tensorflow Liteの量子化アーキテクチャ
by
HitoshiSHINABE1
トランザクションの並行実行制御 rev.2
by
Takashi Hoshino
What's hot
PDF
CUDAプログラミング入門
by
NVIDIA Japan
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
by
Fixstars Corporation
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
PDF
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
by
京大 マイコンクラブ
PPTX
MLflowで学ぶMLOpsことはじめ
by
Kenichi Sonoda
PPTX
DockerコンテナでGitを使う
by
Kazuhiro Suga
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
PPTX
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
by
Yusuke Uchida
PDF
20111015 勉強会 (PCIe / SR-IOV)
by
Kentaro Ebisawa
PPTX
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
by
Deep Learning JP
PPTX
backbone としての timm 入門
by
Takuji Tahara
PPTX
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
by
Deep Learning JP
PPTX
[DL輪読会]EfficientDet: Scalable and Efficient Object Detection
by
Deep Learning JP
PDF
Marp入門
by
Rui Watanabe
PDF
Attentionの基礎からTransformerの入門まで
by
AGIRobots
PPTX
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
by
Preferred Networks
PDF
MLflowによる機械学習モデルのライフサイクルの管理
by
Takeshi Yamamuro
KEY
Haskell Day2012 - 参照透過性とは何だったのか
by
Kousuke Ruichi
CUDAプログラミング入門
by
NVIDIA Japan
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
いまさら聞けないarmを使ったNEONの基礎と活用事例
by
Fixstars Corporation
ARM CPUにおけるSIMDを用いた高速計算入門
by
Fixstars Corporation
組み込み関数(intrinsic)によるSIMD入門
by
Norishige Fukushima
プログラムを高速化する話Ⅱ 〜GPGPU編〜
by
京大 マイコンクラブ
MLflowで学ぶMLOpsことはじめ
by
Kenichi Sonoda
DockerコンテナでGitを使う
by
Kazuhiro Suga
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
by
Yusuke Uchida
20111015 勉強会 (PCIe / SR-IOV)
by
Kentaro Ebisawa
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
by
Deep Learning JP
backbone としての timm 入門
by
Takuji Tahara
[DL輪読会]Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets
by
Deep Learning JP
[DL輪読会]EfficientDet: Scalable and Efficient Object Detection
by
Deep Learning JP
Marp入門
by
Rui Watanabe
Attentionの基礎からTransformerの入門まで
by
AGIRobots
PFNにおける研究開発(2022/10/19 東大大学院「融合情報学特別講義Ⅲ」)
by
Preferred Networks
MLflowによる機械学習モデルのライフサイクルの管理
by
Takeshi Yamamuro
Haskell Day2012 - 参照透過性とは何だったのか
by
Kousuke Ruichi
More from Kenta IDA
PPTX
ESP32開発環境まとめ
by
Kenta IDA
PPTX
M5StackにFPGAをつないでみた
by
Kenta IDA
PPTX
MicroPythonのCモジュールを作ってみる
by
Kenta IDA
PPTX
ESP32開発環境まとめ2
by
Kenta IDA
PPTX
カスタムブロックで自作モジュールをUIFlow対応にする
by
Kenta IDA
PPTX
PSoC4 BLEで作る簡単無線センサーユニット
by
Kenta IDA
PPTX
PYNQ単体でUIを表示してみる(PYNQまつり)
by
Kenta IDA
PPTX
Using SORACOM 3G Module From MicroPython
by
Kenta IDA
PPTX
EC2 F1 Virtual JTAG
by
Kenta IDA
PPTX
ESP32特集の内容紹介
by
Kenta IDA
PPTX
Windows10 IoT CoreとBLE
by
Kenta IDA
PPTX
おそらく明日から役にたつC++11新機能
by
Kenta IDA
ESP32開発環境まとめ
by
Kenta IDA
M5StackにFPGAをつないでみた
by
Kenta IDA
MicroPythonのCモジュールを作ってみる
by
Kenta IDA
ESP32開発環境まとめ2
by
Kenta IDA
カスタムブロックで自作モジュールをUIFlow対応にする
by
Kenta IDA
PSoC4 BLEで作る簡単無線センサーユニット
by
Kenta IDA
PYNQ単体でUIを表示してみる(PYNQまつり)
by
Kenta IDA
Using SORACOM 3G Module From MicroPython
by
Kenta IDA
EC2 F1 Virtual JTAG
by
Kenta IDA
ESP32特集の内容紹介
by
Kenta IDA
Windows10 IoT CoreとBLE
by
Kenta IDA
おそらく明日から役にたつC++11新機能
by
Kenta IDA
M5StackをRustで動かす
1.
M5StackをRustで動かすまで インターフェース オフ会 @
CQ出版 2019/06/17 Kenta IDA (@ciniml)
2.
自己紹介 •井田 健太 (@ciniml) •仕事:FPGAの論理設計 •
最近はなぜかGoのコードを書いている… •Rustレベルは入門 • 実践Rust入門読んでます。 2019/6/17M5StackをRustで動かすまで
3.
M5Stackとは •ESP32を使ったプロトタイピング・モジュール • Wi-Fi, Bluetooth
4.2 • グラフィック液晶 • ボタン • バッテリー • そこそこしっかりした筐体 (重要) 2019/6/17M5StackをRustで動かすまで
4.
ESP32とは •Espressifが製造・販売しているマイコン • Wi-Fi, Bluetooth
4.2 • Xtensa LX6 dual core @240[MHz] max • →ARMではない 2019/6/17M5StackをRustで動かすまで
5.
RustのXtensa対応 •Rust(rustc)の対応にはLLVMの対応が必要 • rustcはLLVMを使ってコード生成している •LLVMのXtensa対応 • 2019年2月13日に対応 •
https://esp32.com/viewtopic.php?t=9226 • GitHubに対応版がある (llvm-xtensa) • https://github.com/espressif/llvm-xtensa • LLVMのmainstreamに入ったわけではない 2019/6/17M5StackをRustで動かすまで
6.
rustcのXtensa対応 •LLVMのmainstreamが対応してないので当然未対応 •対応版を作るしかない •つくれるのか? • llvm-xtensa はLLVM6.0ベース •
最新のrustcはLLVM9.0 • LLVMのプロジェクト構成、9.0から完全に別物… • llvmとclangとかに分かれてたのが、llvm-projectにまとまった感じ? • →最新は諦めて、LLVM6.0のころのrustcを使う 2019/6/17M5StackをRustで動かすまで
7.
Xtensa対応に必要なこと • rustcのターゲットを追加する • Xtensaバックエンドのリンクと初期化処理を追加 •
XtensaのABI情報を追加 • ターゲット定義の追加 • 細かい変更箇所はGitHubに書いておきました • https://github.com/ciniml/rust • ということをやっていたら、既に他の人がやっていた • https://github.com/MabezDev/xtensa-rust-quickstart • 私の方のrustcは1.28.0、向こうは1.34.0 負けた… • 新しい物が動くのはありがたいので1.34.0の方を使うことにする 2019/6/17M5StackをRustで動かすまで
8.
ESP32でRustを使うときの方針 •ベアメタル • ESP-IDF(ESP32公式フレームワーク)を使用しない • スタートアップコードから直接Rustのコードを実行 •
→ESP-IDFは一部バイナリのみ提供部分あり • e.g. Wi-Fi, Bluetoothなど無線部分、ペリフェラルのドライバなど • アプリケーションを作るのにはあまり現実的では無い •→ESP-IDFからRustのメインルーチンを呼び出す方針にす る 2019/6/17M5StackをRustで動かすまで
9.
ESP-IDFとRustのコードの結合 •extern “C”なrust_main関数を定義 • ESP-IDFのmain関数から呼び出す •Rust側の全コードをESP-IDFの1コンポーネントとする •staticlibとしてビルドしてIDFからライブラリとして参照 •あとはIDF単体のアプリと同じ 2019/6/17M5StackをRustで動かすまで
10.
ESP32上でのRustの環境 •とりあえずno_std • std動くようになるといいですね •現状はlibcoreでがんばる • ESP-IDF側のlibcのmallocが使えるのでヒープは使える •
malloc/freeを呼び出すGlobalAlloc実装を作るだけ 2019/6/17M5StackをRustで動かすまで
11.
ESP-IDFの関数呼び出し •bindgenを使ってCFFIの定義を生成 • ヘッダー入力するとRustの定義を生成してくれるツール •CFFI定義だけなので、UnsafeとSafeの橋渡しが必要 •SPI Masterのラッパーを書いたがそこそこ大変 •
ESP-IDFのSPI Masterドライバの呼び出しをラップ • ベアメタルで書くよりはマシなはず 2019/6/17M5StackをRustで動かすまで
12.
RustでFreeRTOSの機能を使う •freertos-rs クレート • https://github.com/hashmismatch/freertos.rs •FreeRTOSのAPI呼び出しはCで書いたshim経由 •
プラットフォームごとにshimを書けば良い •但しESP32のFreeRTOS固有の機能(デュアルコア)未対応 • xTaskCreatePinnedToCore (コア指定してタスク作成)が呼べ ない • →freertos-rsを修正してコア指定できるように対応 2019/6/17M5StackをRustで動かすまで
13.
Rustで周辺回路を扱う •embedded-hal クレート • 組み込み向けでよく使われる周辺回路の抽象化 •
ADC, I2C, SPI, GPIOなどのトレイトが定義されている •embedded-hal経由で外部ICを扱うドライバ • awesome embedded rustにまとめられている • https://github.com/rust-embedded/awesome- embedded-rust 2019/6/17M5StackをRustで動かすまで
14.
RustでM5Stackの液晶を扱う •M5Stackの液晶はILI9341 • Arduino向け実装が一番よく出来ている •Rust用にも ili9341
クレートがある • ただし、作りかけであまり機能は多くない •Ili9341クレートは初期化処理と指定座標への点描画のみ • 実際の描画処理は embedded-graphics クレートが担当 2019/6/17M5StackをRustで動かすまで
15.
embedded-graphicsクレート •図形描画や画像データの読み込みと描画制御を担当 • 線分や楕円の描画アルゴリズムなど • ビットマップ・フォントの描画 •実際の描画は
Drawable トレイトを実装した型が担当 •PC上のシミュレータもあってよく出来ている •https://docs.rs/embedded- graphics/0.5.0/embedded_graphics/ 2019/6/17M5StackをRustで動かすまで
16.
現在の進捗 • M5Stackの液晶表示に成功 • ただしすごく遅いので要改良 •
SPIの送信処理が非効率 • FreeRTOSのタスク間通信 • 乱数生成タスクで描画座標生成 • 描画タスクで描画処理 • Wi-Fiとかはまだ • AP接続までは確認できている 2019/6/17M5StackをRustで動かすまで
17.
Rust入門した感想 • unsafeばかり触ってるのでまだ分からない • まだあまりborrow
checkerに怒られてない • SPIドライバ作るときにちょっと怒られたけど… • ライフタイムが怪しいコードを書くとコンパイル時に死ぬのが良い • C++だとそのまま通ってSEGVとかになりがち • Result<T,E>の楽な扱い方がよく分かってない • 今朝ようやくtry!マクロの存在に気付いた • 早くsafeな世界に行きたい 2019/6/17M5StackをRustで動かすまで
18.
おしまい 2019/6/17M5StackをRustで動かすまで
Download