정의

카운터(counter)는 되풀이되는 이벤트를 틱(tick) 단위로 세는 OSEK/VDX 운영체제의 객체이고, 알람(alarm)은 카운터가 미리 정해진 값에 이르렀을 때 만료해 정해진 동작을 수행하는 객체다.[1]

일정한 간격으로 인터럽트를 내는 타이머, 축의 각도가 일정하게 변할 때마다 인터럽트를 내는 엔코더, 그 밖의 응용 고유 트리거는 모두 되풀이되는 이벤트다. OSEK/VDX 운영체제는 이런 이벤트를 두 단계로 처리한다 — 이벤트원은 구현이 정하는 카운터에 등록되고, 그 카운터 위에서 알람 메커니즘이 응용 소프트웨어에 제공된다.[1]

카운터

카운터는 틱으로 재는 카운터 값과 몇 가지 카운터 고유 상수로 표현된다. 규격은 카운터를 직접 조작하는 표준 API를 제공하지 않는다 — 카운터가 어떻게 전진하는지, 그리고 카운터가 전진할 때 알람 관리에 필요한 동작이 무엇인지는 운영체제가 맡는다. 하드웨어 타이머나 소프트웨어 타이머에서 유도된 카운터가 적어도 하나는 제공되며, 이 시스템 카운터에 대해서는 틱 길이를 나노초로 알려 주는 상수도 함께 주어진다.[1]

카운터 고유 상수는 셋이다.[2]

상수
TICKSPERBASE카운터 고유의 단위 하나에 이르는 데 필요한 틱 수. 해석은 구현에 달렸다
MAXALLOWEDVALUE허용되는 최대 카운터 값
MINCYCLE이 카운터에 연결된 주기 알람에 허용되는 최소 틱 수

같은 값들은 실행 중에 GetAlarmBase 서비스로도 읽을 수 있고, 카운터 이름을 알고 있다면 상수로 바로 참조할 수 있어 호출이 필요 없다.

알람 동작

알람은 시스템 생성 시점에 카운터 하나와, 태스크 하나 또는 알람 콜백 루틴 하나에 정적으로 배정된다. 하나의 카운터에 여러 알람을 붙일 수 있다. 알람이 만료할 때 수행되는 동작은 구성에 따라 셋 중 하나다 — 콜백 루틴 호출, 태스크 활성화, 또는 그 태스크에 대한 이벤트 설정이다. 만료에 따른 내부 태스크 활성화와 이벤트 설정은 보통의 태스크 활성화·이벤트 설정과 성질이 같다.[1]

구성 언어에서 알람 객체는 카운터 참조와 동작을 갖는다. 동작은 매개변수가 붙는 열거값이어서 활성화할 태스크, 설정할 태스크와 이벤트, 또는 콜백 루틴 이름을 함께 지정하며, 알람 하나에는 동작 하나만 허용된다.[2]

카운터와 알람, 알람을 카운터에 배정하는 관계, 만료 시 수행할 동작은 모두 정적으로 정의된다. 실행 중에 바뀌는 것은 알람이 만료할 카운터 값과 주기 알람의 주기뿐이다.

절대 설정과 상대 설정

만료 조건이 되는 카운터 값은 현재 카운터 값을 기준으로 한 상대값으로 줄 수도 있고 절대값으로 줄 수도 있다. 상대 설정은 지정한 증분만큼의 틱이 흐른 뒤에 만료하고, 절대 설정은 카운터가 지정한 값에 도달할 때 만료한다. 절대 설정에서 지정한 값이 호출 시점에 이미 지나갔다면 알람은 카운터가 한 바퀴 돌아 그 값에 다시 이를 때 만료한다. 상대값이 아주 작거나 절대값이 현재 카운터 값에 아주 가까우면 서비스가 호출자에게 돌아오기 전에 알람이 만료해 태스크가 ready가 되거나 콜백이 불릴 수 있다.[1]

두 설정 모두 주기값을 함께 받는다. 주기값이 0이 아니면 알람은 만료 직후 그 값을 상대값으로 삼아 곧바로 다시 등록되고, 단일 알람이라면 주기값을 0으로 둔다. 주기 알람은 기동 시점에 자동으로 시작하도록 구성할 수도 있다 — 구성 언어의 자동 시작 속성은 알람이 처음 만료할 시각과 그 뒤의 주기, 그리고 대상 application mode 목록을 하위 속성으로 받는다.[2] 주기 태스크를 되풀이해 활성화하는 구성이 이렇게 만들어진다.

이미 사용 중인 알람

상대·절대 설정 서비스는 대상 알람이 이미 사용 중이면 호출을 무시하고 E_OS_STATE를 돌려준다. 이미 걸린 알람의 값을 바꾸려면 CancelAlarm으로 먼저 취소해야 한다. 두 설정 서비스는 태스크 레벨과 ISR에서 부를 수 있지만 훅 루틴에서는 부를 수 없다.[1]

알람 콜백 루틴

알람 콜백 루틴은 응용이 제공하는 짧은 함수이며 매개변수도 반환값도 가질 수 없다. 규격이 정한 매크로 형식으로 선언한다. 콜백은 범주 2 인터럽트가 비활성인 상태에서 실행되고, 그 안에서 쓸 수 있는 시스템 서비스는 제한되며 서비스별 제한은 OSEK 인터럽트 처리에서 다룬다. 콜백이 도는 처리 레벨은 구현에 따라 스케줄러의 레벨이거나 ISR의 레벨이다.[1]

알람을 여러 개 거는 대신 만료 지점들을 하나의 테이블로 모아 관리하는 확장은 AUTOSAR OS에서 다룬다.

[1]
OSEK/VDX Steering Committee, “OSEK/VDX Operating System, Version 2.2.3,” OSEK/VDX Steering Committee, Specification, Feb. 2005. Accessed: Aug. 26, 2026. [Online]. Available: https://www.irisa.fr/alf/downloads/puaut/TPNXT/images/os223.pdf
[2]
OSEK/VDX Steering Committee, “OSEK/VDX System Generation — OIL: OSEK Implementation Language, Version 2.5,” OSEK/VDX Steering Committee, Specification, Jul. 2004. Accessed: Aug. 26, 2026. [Online]. Available: https://www.irisa.fr/alf/downloads/puaut/TPNXT/images/oil25.pdf