embedded

Rust の組込み用非同期フレームワーク Embassy (7)

自分のためだけに Embassy コードリーディングシリーズです。 nRF52840 向けの Waker を wake している実装を見ていきます。 GPIO 割り込みから wake() するのが、おそらく最も単純な実装でしょう、ということで GPIO の example を探します。 examples/nrf5…

Rust の組込み用非同期フレームワーク Embassy (6)

誰得 Embassy コードリーディングシリーズです。 Spawner 周りを見終わったので、次は Waker いってみましょう。 Waker はおそらく wake 呼び出す側から見た方がわかりやすいでしょう。 std で動く example の中だと serial.rs でしょうか。 use async_io::A…

Rust の組込み用非同期フレームワーク Embassy (5)

ゆるふわ Embassy コードリーディングシリーズです。 前回 spawn 周りはあとタスクの構造だけ、というところまで来たのでタスクの構造を見てみましょう。 タスク関連の構造体としては TaskHeader TaskStorage TaskRef があります。このへん で定義されていま…

Rust の組込み用非同期フレームワーク Embassy (4)

ゆるふわ Embassy コードリーディングシリーズです。 前回 Executor がわかってきた気持ちになったので、もう少し潜ってみましょう。 今回は Spawner いってみます。 コメントや構造体定義を見るに、Spawner は特定の Executor に紐付いていることがわかりま…

Rust の組込み用非同期フレームワーク Embassy (3)

組込み向けの async/await フレームワーク embassy をゆるーく眺めていくシリーズです。 前回は main についているマクロがなにやってるか見てみました。 github.com そして個人的には、 Spawner とか Executor がどうなってるねん!が気になるので、そこ突…

Rust の組込み用非同期フレームワーク Embassy (2)

Embassy をゆるーく眺めるシリーズです。 前回 README を見てみて Timer どうなっているのか気になりました。 なので実装をおいかけてみましょう。 アプリコードは大体こんな感じでした。 さてどこから行きましょうかね? use embassy_executor::Spawner; us…

Rust の組込み用非同期フレームワーク Embassy (1)

個人ブログをあまりに放置するのも良くないですね! 最近組込み Rust の情報発信もご無沙汰*1なので、自分のモチベーションのためにもちょいちょいメモ書きながら Embassy やっていこうと思います。 リポジトリはこちら。 github.com Web ページもありますね…

結局 Rust の embedded-hal v1.0.0 ってどうなってるの?

この記事は、モダン言語によるベアメタル組込み開発 Advent Calendar 2022の12日目として書きました。 qiita.com モダン言語によるベアメタル組込み開発、と言われても私のような人間は、何の言語ネタで書くか困ってしまいますね。 困った時の神だより。 神…

std Rust で M5Stamp C3U Mate の JTAG シリアルコンソールを使う

はじめに 昨年末、「M5Stamp-C3 Mate で始める組込み std Rust プログラミング」というエントリを書きました。 tomo-wait-for-it-yuki.hatenablog.com 年が明けてから、ファームウェアの書き込み、シリアルコンソール、GDB を使ったデバッグが USB Type-C ケ…

M5Stamp-C3 Mate で始める組込み「std」Rust プログラミング

このエントリは Rust Advent Calendar 2021 3 の5日目として書きました。 qiita.com はじめに みなさん組込み Rust やっていますか?はい、やっていますね。息を吸うように日常的にやっているはずです。今年はなんと組込み Rust にフィーチャーした「基礎か…

Wio Terminal で probe-run / defmt

組込み Rust の便利なツール、probe-run と defmt を Wio Terminal で使ってみます。

Knurling Sessions 2020Q4 をやる (4) 〜ディスプレイ〜

Knurling Sessions 2020Q4 をやる、の最後です。今回は、CO2センサから読み取った値をディスプレイに表示します。

Knurling Sessions 2020Q4 をやる (3) 〜CO2センサドライバ〜

前回、Lチカ終わらせたので、いよいよ CO2 センサドライバを書いていきます。

Knurling Sessions 2020Q4 をやる (2) 〜基本編〜

はじめに knurling-rs では Ferrous Systems が、スポンサー向けに組込み Rust の教材 knurling-session を提供しています。 github.com knurling-session では、3ヶ月ごとに1つのテーマを取り上げています。 最新のもの以外は、公開されています。スポンサ…

Knurling Sessions 2020Q4 をやる (1) 〜環境構築〜

はじめに knurling-rs では Ferrous Systems が、スポンサー向けに組込み Rust の教材 knurling-session を提供しています。 github.com knurling-session では、3ヶ月ごとに1つのテーマを取り上げています。 最新のもの以外は、公開されています。スポンサ…

『基礎から学ぶ 組込みRust』を書きました

はじめに 2021年4月20日、『基礎から学ぶ 組込みRust』(C&R研究所) を出版します。Rust の文法から組込み Rust でファームウェアを作成するところまでを、片手で持てる (多分!まだ持ったことないけど!) 1 冊の本にまとめた、喉から手が出るほど (私が) 求…

Rust serialport お試し①

はじめに Rust でシリアル通信したくなったので、serialport クレートを使ってみます。 docs.rs serialport クレート serialport クレートはクロスプラットフォームで使えるシリアルポートライブラリです。 各プラットフォーム固有の API も提供しています。…

knurling-rs のツールお試し Get a grip on bare-metal Rust!

はじめに この記事は Rust Advent Calendar 2020 12日目の記事です。 github.com Our mission is to improve the embedded Rust experience. To achieve this, we build and improve tools and create learning materials. knurling-rs は Ferrous Systems …

Rust no-stdのasync完全理解を目指そう!

はじめに この記事はRust Advent Calendar 2019の17日目として書きました。 組込みRust界の神japaricさんがno-std環境でasyncを使うPoCレポジトリを公開しています。 github.com 理解できるかどうか非常に自信がありませんが、これは見てみるしかありません…

VxWorksの脆弱性「URGENT11」のテクニカルホワイトペーパーを読む①

はじめに 7月末にVxWorksの脆弱性発見が公開されました。 armis.com 日本語関連記事 VxWorksは組込み機器では非常に有名なRTOSで、20億以上のデバイスに搭載されています。 今回の脆弱性URGENT11で影響を受けるデバイスは2億個以上であると報告されています…

7/27(土) 技書博で組込み/ベアメタルRustクックブックを販売します!

はじめに 宣伝です! 来週開催される技術書同人誌博覧会にて、組込み/ベアメタルRustクックブックを販売します。 A-9 AQUAXISさんのブースにご一緒させて頂きます。 ブース主の石原ひでみさんはFPGAの薄い本とMarkdown組版の本を、みつきんさんはNuttxの本を…

Rust × 組込みで前代未聞のInterfaceオフ会レポート

はじめに 昨日、2019年6月17日、巣鴨のCQ出版社様セミナールームにおいて記念すべき組込みRustのオフ会が開催されました! 今回のオフ会は、雑誌掲載前にオフ会を開催する、という前代未聞のオフ会、とのことでした。 inteface-meet-up.connpass.com 非常に…

WebAssembly Micro RuntimeでRustアプリをマイコンで動かす!

はじめに 前回、もう一歩のところだったのですが、RAMが2MB搭載されていないと動かない状態でした。 tomo-wait-for-it-yuki.hatenablog.com 私はそんなマイコン持っていないため、今回は、256KB RAMが搭載されているマイコン (これも高性能品ですが) 上でRus…

WebAssembly Micro RuntimeでRustのアプリを動かす!

はじめに WebAssembly Micro Runtimeでは、64KB程度のRAMが搭載されたマイコンであれば、wasmアプリケーションを動かすことができます。 github.com Rustはwasmをターゲットにビルドできます。 後は、わかるね? アプリケーションの作り方 WebAssembly Micro…

WebAssembly Micro Runtimeお試し②

はじめに 少し前に、組込みで使えるWebAssembly Micro Runtimeが公開されました。 また、いつの間にかSTMでのデモアプリが公開されています。 github.com リファレンスが普段触っているZephyrなので、少し動かしてみます。 前回のおさらい 試しに、qemu_cort…

WebAssembly Micro Runtimeお試し①

はじめに 少し前に、組込みで使えるWebAssembly Micro Runtimeが公開されました。 また、いつの間にかSTMでのデモアプリが公開されています。 github.com リファレンスが普段触っているZephyrなので、少し動かしてみます。 準備 ライブラリをインストールし…

ZephyrのI2C scannerサンプルを動かしてみる

はじめに I2Cデバイスを使いたいので、手始めにZephyrのI2C scannerサンプルを動かしてみます。 ターゲットSoCはnRF52840です。 サンプルプロジェクトを確認 |> zephyr/samples/drivers/i2c_scanner nRF52x系は、overlayする設定ファイルが用意されています…

ZephyrでPWM

はじめに ZephyrでPWMしてみます。 ターゲットSoCはnRF52840です。 Zephyrプロジェクト設定 Zephyr PWM driver CONFIG_PWMを有効にします。 nRF52840のPWM0を利用するので、CONFIG_PWM_0を有効にします。 |> prj.conf # PWM CONFIG_PWM=y CONFIG_PWM_0=y dev…

westを使ったZephyrプロジェクトの管理

はじめに Zephyr 1.14からwestというメタツールが公式なツールになりました。 面倒ですがさらっと使っておきましょう。 ソースコードやドキュメントは、できるだけ1.14を参照するようにします。 Zephyr 1.14はLTSという位置づけで、2年間はセキュリティアッ…

ZephyrでRTTコンソール

はじめに 久々のZephyrです。 JLinkには、JTAG/SWD経由でシリアル入出力をする機能があります。 UARTを使ったコンソールも良いのですが、物理配線が増えたり、簡単にUARTを引き出せない場合、RTTが便利です。 Zephyrコンフィグ NordicのZephyrフォークを参考…