RTOSを使用して組み込みソフトの設計をしています。
タスク間でのデータの同期方法で分からないことがあるので、
教えていただけないでしょうか。
下記のようなタスクが存在するとします。
タスクA 10ms周期 データD,Eを10ms周期で更新
タスクB 100ms周期 データD,EをタスクB先頭でラッチ
※タスクBはイベントによる起床は許されないとする(過去のソースコード資産を流用するため)
質問1
以下の考え方は一般的ですか?
もっといい方法があれば知りたいです。
タスクB先頭でデータD,Eをラッチするのは、
タスクB実行中にデータD,Eのどちらかが更新され、
新旧混在したデータD,EがタスクBで使用されることを防ぐため
具体的に書くと、
前周期のデータDと今周期のデータEをもとに
制御ゲインを演算すると制御が破綻するようなケースがあり、
これを避けるため上記のような方法をとっています。
質問2
データDが0,1の2値をとる場合(例えば0:正常, 1:異常を表すような異常情報)、
下記のようにデータDが0から1に変化したことを、タスクBで確実に補足する良い方法はありますか?
データDが0から1に変化した場合に
タスクAからタスクBへイベントで通知するような方法が考えられますが、
タスクBはイベントによる起床は許されない場合、こうするのが一般的というような方法はありますか?
データDをタスクB起床までラッチしておくための別変数を定義し(データD’とする)、
タスクAでデータDが0から1に変化したときにデータD’=1とし、
タスクBでデータD'を参照後、データDが0であればデータD’=0とする、
のようにすれえば実現可能と思いますが、もっといい方法はないでしょうか?
経過時間: データD
0ms: データD=0
10ms: データD=0
20ms: データD=1
30ms: データD=1
40ms: データD=1
50ms: データD=1
60ms: データD=0
70ms: データD=0
80ms: データD=0
90ms: データD=0
100ms: タスクB起床
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/26 04:04
2018/07/26 14:05
2018/07/26 14:15
2018/07/27 01:45