(toppers-users 1554) Re: タスクの二重起動防止
Ko Tanikawa
dev @ agapesystem.com
2004年 7月 21日 (水) 22:12:54 JST
こんばんは,谷川です。
> ええっと、いちばん簡単なのはタスクAを最優先タスクに
> することです。
> タスクAが10秒間ぐるぐるまわる様な処理中は他のタスクは
> リクエストを上げられません。
この方法も,使い方によってはとても便利ですね。
「機器障害発生 -> 故障リセットスイッチが押されるのをひ
たすら待機」というような場面で使用してみました。
そのタスク(優先度=HIGH_PRIORITY ,他のタスクは
MID_PRIORITY )で,故障リセットスイッチが長押しされる
のを捉えるため,以下のようなコードを書いてみたのですが,
// 故障リセットタスク
while(1){
if (ERRRST_SW==ON){
// 1 sec 長押し確認
for(i=0;i<100;i++){
if (ERRRST_SW==OFF) continue;
dly_tsk(10);
}
if (ERRRST_SW==ON){
//ここで故障リセット処理をする
break;
}
}
}
これだと,たぶん dly_tsk(10)のところで,自分より優先度
の低い他のタスクが実行されてしまうようです。(この場合,
本当は実行して欲しくない)
tslp_tsk(10)なら他のタスクが実行されるのは分かるのです
が, dly_tsk()でも仕方ないのでしょうか?自タスクを待ち
状態に移行させることなく時間を稼ぐには,皆様どんな風に
されていらっしゃいますか?
--
dev @ agapesystem.com 谷川