(toppers-users 1544) Re: タスクの二重起動防止

Naohide Ogata nogata @ fukushima-iri.go.jp
2004年 7月 16日 (金) 16:21:40 JST


福島県ハイテクプラザの尾形です。

<20040716102729ucu?dc @ agapesystem.com> の、
   "(toppers-users 1541) タスクの二重起動防止" において、
   "Ko Tanikawa <dev @ agapesystem.com>"さんは書きました:

> 
> 例えば,外部のリレーを 10 秒間だけ ON にするタスクAが
> 有るとします。このタスクを,色々な所から起床するわけで
> すが,既にタスクAが動作中は,タスクAを起床しないよう
> にしなければいけません。
> 

 複数のタスクから同時に起動されても一度だけ動くというようなもの
であれば、イベントフラグを使って同期を取るのが良いかと思います。

Task_A(){
 while(1){
    wai_flg(FLGID,(FLGPTN)1,TWF_ANDW,&p_flgptn);
    RelayOn();
    tslp_tsk(10000);
    RelayOff();
//  tslp_tsk(DeadTime); (デッドタイムが必要なら)
 }
}

 他タスクからの要求回数分起動したいのならば、wai_flgのところは
データキュー(rcv_dtq)かメールボックス(rcv_mbx)に変更します。デー
タキューならば、作成したデータキューのサイズ分要求を記憶できます。

 上記のプログラムでwai_flg()のところをslp_tsk()にすると不都合が
生じるというように解釈したのですが、間違っていたらご容赦ください。


----------
福島県ハイテクプラザ
研究開発部 システム技術グループ
 尾形 直秀
 Naohide Ogata
024-959-1739(直通)  FAX 024-959-1761