Top -> FreeRtos -> task-coroutine.html
タスクとコルーチン
[ Getting Started ]
基本的な多重タスク処理概念へのイントロダクションのために「FreeRTOS が働く方法」のセクションを見てください。
コルーチンの使用が適切であるかどうかについて、タスクとコルーチンのドキュメンテーションページは
これを判断をするためのインフォメーションを提供します。
下は簡単なまとめです。
タスクだけ、コルーチンだけ、あるいは両者を使ってアプリケーションを設計することができることに注意してください
− しかしながら、タスクとコルーチンが異なった API 機能を使うので、
待ち行列(あるいはセマフォ)でタスクからコルーチンへ(あるいは逆へ)データを渡すことができません。
コルーチンは厳しいRAM 制約条件を持っている非常に小さいプロセッサの上の使用を意図したものである。
「タスク」の特徴
手短かに:
RTOS を使うリアルタイムアプリケーションは独立したタスクの集まりとして構成されます。 各タスクはシステム内の他のタスク(あるいはスケジューラ)に依存せず、自タスク自身のコンテキストで実行します。 アプリケーションの中のただ1つのタスクがその時間実行することができます、そしてリアルタイムスケジューラーはある時点でどのタスクが実行すべきか決定する役割をはたします。 アプリケーションが実行するために、スケジューラーはタスクの開始、停止を繰り返します。 スケジューラ動作に無関係なような単なるタスクがあり、スケジューラがこのタスクをスケジュールするとき、同じタスクがスワップアウトされたときのプロセッサコンテキスト(レジスタ値、スタック中身など)を正確にスワップインする、これはリアルタイムスケジューラーの機能です。 これを実現するために、各タスクはそれ自身のスタックを用意する。 タスクがスワップアウトされるとき、実行コンテキストはそのタスクのスタックにセーブされます、そして、同じタスクが後刻スワップインされるとき正確にリストアされます。 How FreeRTOS Works に、さらに多くのインフォメーションがあります。
タスクサマリー
シンプル
使用の上の制限はなしです
完全なプリエンプションをサポートします
完全な優先度制御
各タスクはRAM上にある自身のスタックを保守する
プリエンプション方式を採用するなら、リエントランシーを慎重に考慮しなくてはならない

「コルーチン」の特徴
FreeRTOS バージョン V4.0.0 からリアルタイムアプリケーションはタスクと同様に、あるいはタスクの代わりにコルーチンを含むことができます。 コルーチンの概念はタスクに類似していますが、(コルーチンドキュメンテーションページにさらに詳述している)次に示す基本的な差異があります:
  1. スタック使用法
    アプリケーションの中のすべてのコルーチンは一つのスタックを共有します。 これはタスクを使って書かれた類似のアプリケーションと比較して必要とされる RAM の量を劇的に減らします。
  2. スケジューリングと優先権
    コルーチンが他のコルーチンの間で協調的な優先順位でスケジューリングされる、しかもプリエンティブなタスクを使うアプリケーションに含められることができます。
  3. マクロ実装
    コルーチンの実装はマクロのセットを通して提供されます。
  4. 使用の上の制限
    コルーチンがどのように構成されるかで、 RAM 使用の縮小に関して若干の制限を受けます。
コルーチンサマリー
コルーチンの間でスタックを共有することはRAM 使用量の減少をもたらします。
協調的なオペレーションはリエントランシーの問題を減少させる。
アーキテクチャに依らずポータブル性が高い。
他のコルーチンと比較して完全な優先順位を付けました、もしタスクとコルーチンが入り混ざっているなら、タスクによってプリエンプト制御されます。
スタック不足には特別な考察を必要とします。
どのような条件でAPI コールをすることができるかについての制約事項。
コルーチンだけの間の協調的なオペレーション。
TOPページ