萌えハッカーニュースリーダー

2025/09/30 21:29 Pre-Emptive Multi-Tasking on Arm Cortex-M

出典: https://thejpster.org.uk/blog/blog-2025-09-28/
hakase
博士

やあ、ロボ子!今日は組み込みソフトウェアの話をするのじゃ。

roboko
ロボ子

博士、こんにちは。組み込みソフトウェア、興味深いです!

hakase
博士

今日はRustでRTOS(リアルタイムOS)を自作する、というちょっとマニアックな話題なのじゃ。CからRustへの移行を考えている人には特に役立つ情報みたいだぞ。

roboko
ロボ子

RTOSですか。名前は聞いたことがありますが、具体的にはよく知りません。

hakase
博士

RTOSは、タスクに優先度をつけて、決められた時間内に処理が終わるように保証するOSのことじゃ。たとえば、車のブレーキ制御とか、工場のロボット制御とか、そういうリアルタイム性が重要なシステムで使われるのじゃ。

roboko
ロボ子

なるほど。それで、RustでRTOSを自作するというのは、どういうことでしょうか?

hakase
博士

記事によると、既存のC言語で書かれたRTOS上でRustコードを実行する方法と、Rustで完全に記述されたRTOSを使う方法があるみたいじゃな。既存のRTOSだと、Amazon FreeRTOSとか、Zephyrとかがあるみたいじゃ。

roboko
ロボ子

RustはCと互換性があるから、既存のRTOSでもRustが使えるんですね。

hakase
博士

そうそう。Rustでタスクを書いて、CのRTOS上で動かすことができるのじゃ。でも、せっかくRustを使うなら、Rustで書かれたRTOSも試してみたいところじゃな。embassyとか、RTICとかがあるみたいじゃ。

roboko
ロボ子

Rust製のRTOSですか。それは面白そうですね。

hakase
博士

記事には、Arm Cortex-Mプロセッサ向けのRTOSを自作する方法も書いてあるぞ。Arm Cortex-Mは、RTOSを簡単に書けるように設計されているらしいのじゃ。

roboko
ロボ子

具体的には、どうやって作るんですか?

hakase
博士

まず、タスクごとにスタックを用意して、初期状態をスタックにプッシュするのじゃ。それから、PendSVというのを使って、タスクを切り替えるらしいぞ。

roboko
ロボ子

PendSV…初めて聞きました。

hakase
博士

PendSVは、割り込み処理の一種で、タスク切り替えのために用意されたものなのじゃ。これを使うと、タスクの切り替えがスムーズにできるのじゃ。

roboko
ロボ子

なるほど。タスクの切り替えには、スケジューラも必要ですよね?

hakase
博士

その通り!スケジューラは、どのタスクを次に実行するかを決める役割があるのじゃ。タスクの優先順位とか、実行時間とかを考慮して、最適なタスクを選ぶのじゃ。

roboko
ロボ子

この記事によると、プリエンプティブなタスク切り替えスケジューラを記述するには、300行程度のRustとアセンブリコードが必要みたいですね。

hakase
博士

そうみたいじゃな。意外と少ない行数で実現できるのじゃ。Armv7-MのSysTick、PendSV、PSP関数が、RTOSを作るために調整されているからじゃな。

roboko
ロボ子

へえ、すごいですね。

hakase
博士

ロボ子もRTOS作ってみる?

roboko
ロボ子

私にはまだ難しいです。でも、いつか挑戦してみたいです!

hakase
博士

いい心がけじゃ!そういえば、RTOSって、Real Time Operating Systemの略だけど、ロボ子の場合は、Real Time Operating Robot System…ってことじゃな!

roboko
ロボ子

博士、それはちょっと無理があります…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search