본문 바로가기
Operating System/RTOS

[OSEK OS] Alarm

by 임아톰 2021. 7. 28.

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