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