Top -> FreeRtos -> task-coroutine.html | ||||||||||||
タスクとコルーチン | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
[ Getting Started ] | ||||||||||||
基本的な多重タスク処理概念へのイントロダクションのために「FreeRTOS
が働く方法」のセクションを見てください。 コルーチンの使用が適切であるかどうかについて、タスクとコルーチンのドキュメンテーションページは これを判断をするためのインフォメーションを提供します。 下は簡単なまとめです。 タスクだけ、コルーチンだけ、あるいは両者を使ってアプリケーションを設計することができることに注意してください − しかしながら、タスクとコルーチンが異なった API 機能を使うので、 待ち行列(あるいはセマフォ)でタスクからコルーチンへ(あるいは逆へ)データを渡すことができません。 コルーチンは厳しいRAM 制約条件を持っている非常に小さいプロセッサの上の使用を意図したものである。 |
||||||||||||
「タスク」の特徴 | ||||||||||||
手短かに: | ||||||||||||
RTOS を使うリアルタイムアプリケーションは独立したタスクの集まりとして構成されます。 各タスクはシステム内の他のタスク(あるいはスケジューラ)に依存せず、自タスク自身のコンテキストで実行します。 アプリケーションの中のただ1つのタスクがその時間実行することができます、そしてリアルタイムスケジューラーはある時点でどのタスクが実行すべきか決定する役割をはたします。 アプリケーションが実行するために、スケジューラーはタスクの開始、停止を繰り返します。 スケジューラ動作に無関係なような単なるタスクがあり、スケジューラがこのタスクをスケジュールするとき、同じタスクがスワップアウトされたときのプロセッサコンテキスト(レジスタ値、スタック中身など)を正確にスワップインする、これはリアルタイムスケジューラーの機能です。 これを実現するために、各タスクはそれ自身のスタックを用意する。 タスクがスワップアウトされるとき、実行コンテキストはそのタスクのスタックにセーブされます、そして、同じタスクが後刻スワップインされるとき正確にリストアされます。 How FreeRTOS Works に、さらに多くのインフォメーションがあります。 | ||||||||||||
タスクサマリー | ||||||||||||
|
||||||||||||
|
||||||||||||
「コルーチン」の特徴 | ||||||||||||
FreeRTOS バージョン V4.0.0 からリアルタイムアプリケーションはタスクと同様に、あるいはタスクの代わりにコルーチンを含むことができます。 コルーチンの概念はタスクに類似していますが、(コルーチンドキュメンテーションページにさらに詳述している)次に示す基本的な差異があります: | ||||||||||||
|
||||||||||||
コルーチンサマリー | ||||||||||||
コルーチンの間でスタックを共有することはRAM
使用量の減少をもたらします。 協調的なオペレーションはリエントランシーの問題を減少させる。 アーキテクチャに依らずポータブル性が高い。 他のコルーチンと比較して完全な優先順位を付けました、もしタスクとコルーチンが入り混ざっているなら、タスクによってプリエンプト制御されます。 スタック不足には特別な考察を必要とします。 どのような条件でAPI コールをすることができるかについての制約事項。 コルーチンだけの間の協調的なオペレーション。 |
||||||||||||
TOPページ | ||||||||||||