(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 谷川