Alarm이란
반복되는 이벤트를 처리하기 위해 OSEK OS가 제공하는 서비스입니다.
알람은 Conter에 연결되어, 카운터가 특정 값에 도달하였을 경우 지정된 동작(task activation, set event, alarm-callback)을 합니다. 주로 OS의 task를 주기적으로 실행 시키기 위해 사용합니다.
Counter
카운터는 소스(e.g. Timer)의 값을 TICK 단위의 상수 값으로 변경시킵니다. (e.g. 1ms-> 1tick) OSEK OS는 S/W 혹은 H/W Timer와 연결된, 적어도 하나의 COUNTER를 제공합니다. 카운터를 HW에 연동해서 자동으로 증가할 수도 있지만 보통은 타이머 ISR에 연결해서 증가하는 방법을 사용합니다.
Alarm OIL Code
- COUNTER = myCounter;
: 알람을 어떤 카운터와 연결할지 정해줌 - ACTION = ACTIVETASK
: 어떤 task를 activate해야 할지 정의 - AUTOSTART
: 시스템이 시작하면 자동 시작 - ALARMTIME: 카운터가 10이 됐을 때 처음으로 알람이 울림
- CYCLETIME: 그 다음부터는 카운터가 5000 증가할 때 마다 알람이 울림
Alarm API
- StatusType GetAlarmBase(AlarmType <AlramID>, AlarmBaseRefType <info>)
: alarm의 기본적인 정보를 획득 (counter의 최대값, counter의 tick, alarm 주기가 가질 수 있는 최소값) - StatusType GetAlarm(AlarmType <AlarmID>, TickRefType <Tick>))
: alarm이 expire하기 전까지 상대적으로 남은 tick 수를 반환 - StatusType SetRelAlarm(AlarmType <AlramID>, TickType <Increment>, TickType <Cycle>)
: 현재 상태에서 Increment만큼 tick 증가 후 expire 되고, 이후로 Cycle 주기로 expire되는 알람을 설정
: cycle 이 0일 경우 1회만 알람이 expire 됨 - StatusType SetAbsAlarm(AlarmType <AlramID>, TickType <Start>, TickType <Cycle>)
: 처음으로 Start tick에 도달한 후 expire되고, 이후로 Cycle 주기로 expire되는 알람을 설정
: cycle 이 0일 경우 1회만 알람이 expire 됨 - StatusType CancelAlarm(AlarmType <AlramID>)
: 해당 alarm이 expire되지 않도록 변경
Alarm 사용 예
- 현재 tick이 0일 경우를 가정
- Counter의 최대값이 149라 가정 (갱신 주기 150)
- SetRelAlarm(ALARM0, 75, 50)으로 알람 시작
: 현재 tick에서 75만큼 tick 증가 후 알람이 울리고, 이후로 50 tick 주기로 울리는 알람이 설정됨
반응형
'Operating System > RTOS' 카테고리의 다른 글
[OSEK OS] Resource (0) | 2021.07.28 |
---|---|
[OSEK OS] ISR (0) | 2021.07.26 |
[OSEK OS] Task와 Event (0) | 2021.07.10 |
RTOS 용어 정리 (0) | 2021.06.30 |