[H8-ML(5610)] Re: H8 3694のシリアル+マルチタスク
From: <dimension4500c@xxxxxxxxxxx>
Date: 2005年07月01日(金)20時34分05秒
> こんな場合マルチタスクにするには
> 
> タスクマネージャーで
> 各タスクに重みを付け、それに従って見に行き、
> 終わっていて(フラグが消えている)、データーが有れば、
> リングバッファから、1データーを取り、読み出しポインターを進めて、
> レジスターに書き込んでフラグを立て、次のタスクに。
> まだだったら、何もせずに抜ける。
> 
> データー処理側ではバッファーがオーバーフローしなければ書き込み、ポイン
> ターを進める。
> 
> 機能レジスタ側では、フラグが立つと処理をして、終わればフラグを消す
> 
> と言うことでしょうか?

重み付け=優先順位付マルチタスクは少し難しいです。
ラウンドロビン式(回転優先順位式)のほうが簡単ですよ。

モータ制御システムは結構CPUから見れば暇なIO待ち時間があるので
次のような、擬似ラウンドロビンスケジュールができます。

void main(void)
{

 Initialize();

 while(1)
 {
  GijiTask1();
  GijiTask2();
  GijiTask3();
 }

}

こんな関数CALLの無限ループでも、
スケジューラ造らずにマルチ動作できてます。

擬似Taskは、待ち状態になったら、すぐにretして
関数を抜けるがルールです。

dimension




スレッド概略
[表示中](起点)
 └[5612(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]