> こんな場合マルチタスクにするには
>
> タスクマネージャーで
> 各タスクに重みを付け、それに従って見に行き、
> 終わっていて(フラグが消えている)、データーが有れば、
> リングバッファから、1データーを取り、読み出しポインターを進めて、
> レジスターに書き込んでフラグを立て、次のタスクに。
> まだだったら、何もせずに抜ける。
>
> データー処理側ではバッファーがオーバーフローしなければ書き込み、ポイン
> ターを進める。
>
> 機能レジスタ側では、フラグが立つと処理をして、終わればフラグを消す
>
> と言うことでしょうか?
重み付け=優先順位付マルチタスクは少し難しいです。
ラウンドロビン式(回転優先順位式)のほうが簡単ですよ。
モータ制御システムは結構CPUから見れば暇なIO待ち時間があるので
次のような、擬似ラウンドロビンスケジュールができます。
void main(void)
{
Initialize();
while(1)
{
GijiTask1();
GijiTask2();
GijiTask3();
}
}
こんな関数CALLの無限ループでも、
スケジューラ造らずにマルチ動作できてます。
擬似Taskは、待ち状態になったら、すぐにretして
関数を抜けるがルールです。
dimension