embedded

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フォークを参考…

Rust製組込みOSのTockを触ってみる②

はじめに 諸事情によりまとまった時間を取るのが難しいので、入門系やります。 今回は、Rust製のRTOSであるTockを触ってみます。 githubのTock organizationはこちらです。 前回はC言語で書かれたサンプルアプリケーションを動かしたので、今回はRustで書か…

Rust製組込みOSのTockを触ってみる①

はじめに 諸事情によりまとまった時間を取るのが難しいので、入門系やります。 今回は、Rust製のRTOSであるTockを触ってみます。 githubのTock organizationはこちらです。 Getting started Getting startedを参考に、何か動かしてみます。 Requirements nig…

RustのRTFM (Real Time For the Masses)を試してみる⑤

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com サンプルコードをマクロ展開して心が折れそうです。 とりあえず、当面サンプルコードの表面…

RustのRTFM (Real Time For the Masses)を試してみる④

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com 面白いので、引き続き触っていきます。 リソース管理続き RTFMのstatic変数は、通常のstatic…

RustのRTFM (Real Time For the Masses)を試してみる③

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com 軽い気持ちで触り始めたのですが、読み進めるうちに、手続きマクロでゴリゴリ静的解析してい…

RustのRTFM (Real Time For the Masses)を試してみる②

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com 前回変なところで切ってしまったため、今回は軽めです。 idleタスク idleタスクは、initタス…

RustのRTFM (Real Time For the Masses)を試してみる①

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com RTFM自体は、Real-time for the masses, step 1: Programming API and static priority SRP …

組込みRustドキュメントを和訳したお話

はじめに 組込みRustの(勝手に主要と思っている)ドキュメント3つの和訳が、一通り完了しました。 今後は、upstream変更に対するメンテンナンスをやっていきます。 節目なので、整理しておこうと思います。 和訳も、大本になる文章があるからできるわけで、…

YoctoでRust①〜meta-rustのhello-worldビルド〜

はじめに 組込みLinuxでRustする場合、普通にホストマシンで開発して、普通にホストマシンのRustコンパイラでクロスビルドしたものをターゲットに持って行っています。 これで事足りているのですが、前々から興味があったため、YoctoでRustアプリケーション…

インラインアセンブリだけの関数の最適化でハマった

はじめに Cortex-Mのコンテキストスイッチを書いています。 引数有りで、インラインアセンブリだけを実行する関数を作り、threadのディスパッチを書いていました。 このような場合、適切なconstraintを書いてインラインアセンブリを呼び出さないと、リリース…