本当にシンプルで非寛容なタスクスケジューラ。
これは、非常にシンプルで、非公開のタスクスケジューラです。このデモプロジェクトは、Atmega48pマイクロコントローラー用のAtmel Studio 7で作成されましたが、簡単に移植できます。
このスケジューラのポイントは、選択された周期性ですべてのタスクを呼び出して実行することです。
スケジューラはOSフォルダー(OS.CおよびOS.H)内にあります。オペレーティングシステムではありませんが、私はまだOSと呼んでいます。なぜなら、命名はこの方法で簡単になるためです(OSはスケジューラよりも短くなります)。
3つの主要な重要な機能があります。
3つの状態があります。
ブロック:タイマーからの呼び出しを待ちます
準備ができました:実行の準備ができました
停止:無効、何もしません
図2。タスクの状態図。
OS_TASKTIMER()は、タスクを整理する関数です。タイマー割り込みにあります(デモでは1秒のタイマーですが、何でもかまいません)。関数内にカウンターがあります。カウンターが大きい場合は、タスクの破裂時間があり、それを準備状態にします。
図3。OS_TASKTIMER()のアクティビティ図。
OS_TASKEXECUTION()は、タスクを呼び出す関数です。メイン()無限ループにある必要があります。準備が整ったタスクがあるかどうかを確認し、FIFOスタイルで実行します。このため、それは単なるソフトリアルタイムであることに言及する価値があります。タイミングが間違っている場合、準備が整った状態でタスクが多すぎる可能性があり、不要な遅延が発生する可能性があります。
図4。OS_TASKEXECUTION()のアクティビティ図。
デモは、スケジューラの仕組みを示すことを目的としています。 3つのタスクがあり、各タスクは1、2、5秒でLED(ポートD 0,1,2)を点滅させます。 2番目のタスクは懸濁状態で始まるため、実行されることはありません。