Wiki
Clone wikiCafeOBJ / OSEK / contents / alarm
アラーム
OSEK OSは,タスクの活性化やイベントの生起と並んで, アラーム発火時にアラームコールバックルーチンの呼出を行う.
アラームに関するモジュールの記述には,まず,アラームの宣言が必要だろう.
#!python module ALARM { signature { [ Alarm ] } }
そして,アラームコールバックルーチンをタスク等と同様にして宣言しよう.
#!python module ALARM-CALLBACK-ROUTINE { imports { ex(Entity) } signature { [ ACR < Entity ] } }
#!python module COUNTER { signature { [ Counter ] } }
#!python module ALARM-ASSIGNMENT { imports { pr(ALARM) pr(COUNTER) pr(TRANSITION) } signature { op alarm2counter : Alarm -> Counter op alarm2Transition : Alarm -> Transition } }
アラームは,カウンタの値が規定値に到達した時に発火する.
ここでは,カウンタの値や規定値には触れず, アラームが発火可能かどうかを示す観測を定める. 具体的なカウンタの値や規定値についての記述は, システムサービスで紹介する.
#!python module EXPIRABLE { import { pr(OBSERVATION2BOOL) pr(ALARM) } signature { op expirable : Alarm -> Observation2Bool } }
#!python module EXPIRE { imports { pr(TRANSITION) pr(ASSIGNMENT) pr(EXPIRABLE) } signature { op expire : Alarm -> Transition op expired : Alarm -> Transition } axioms { vars C : State vars A : Alarm cq expirable(A)(C) = true if pre(expire(A),C) . cq expire(A)(C) = alarm2Transition(A)(expired(A)(C)) if pre(expire(A),C) . eq expirable(A)(expired(A)(C)) = false . eq rev(expired(A),expirable(A)) = true . } }
OSEK OSは,他にもアラームのキャンセルやアラームの状態の獲得等のサービスも提供している. これらのサービスに係る遷移や観測については,システムサービスで記述する.
Updated