null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
AUTOSAR 개발자 실전 가이드
Structure
overview
•
AUTOSAR가 필요한 이유
•
AUTOSAR 레이어드 아키텍처 구조
components
•
Core, Partition, OS Application 관계
•
SWC와 Runnable — 실행 단위 이해
rte-ports
•
P-Port, R-Port와 인터페이스 설계
•
Explicit vs Implicit Write — 언제 무엇을 쓰나
autosar-os
•
AUTOSAR OS Task와 ISR 설계
•
Alarm, Counter, Schedule Table 정리
•
OS Application과 메모리 보호 설정
spec-practice
•
MUST vs SHALL vs SHOULD — 스펙 용어 해석법
•
DET 에러 처리 — Det_ReportError와 RuntimeError
com-stack
•
ComSignal에서 PduR까지 — 신호가 CAN 프레임이 되는 경로
•
CanIf부터 CanNm까지 — CAN 통신 스택 계층 분리
diagnostics
•
DEM으로 DTC 관리하기 — 이벤트 상태와 고장 이력
•
DCM과 UDS 서비스 — 진단 통신의 실전 구조
ecum-bswm
•
EcuM 시동/종료 시퀀스 — ECU가 켜지고 꺼지는 순서
•
BswM 모드 전환 — 규칙 기반 상태 관리
nvm-schm
•
NvM 읽기/쓰기 패턴 — 비휘발성 메모리를 안전하게 다루는 방법
•
SchM Exclusive Area — 인터럽트와 Task 간 공유 자원 보호
Flow Structure
AUTOSAR OS Task와 ISR 설계
8 / 19
OS Application과 메모리 보호 설정
☆ Star
↗ Full
Alarm, Counter, Schedule Table 정리
#autosar
#os
#alarm
#counter
#schedule-table
@devpc
|
2026-05-04 12:39:28
|
GET /api/v1/flows/24/nodes/429?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# Alarm, Counter, Schedule Table 정리 ## Counter — 시간 기준 Counter는 AUTOSAR OS의 시간 단위다. 하드웨어 타이머의 틱을 세는 역할을 한다. ``` 하드웨어 타이머 → OS Counter → Alarm/Schedule Table ``` Counter 설정의 핵심 파라미터: | 파라미터 | 의미 | |---------|------| | `OsCounterMaxAllowedValue` | Counter의 최대 틱 값 (MAX → 0으로 wrap) | | `OsCounterTicksPerBase` | 1 base unit(ns/us)당 틱 수 | | `OsCounterMinCycle` | Alarm의 최소 주기 | 실무에서 Counter 직접 조작은 드물다. 대부분 Alarm 설정에서 참조할 뿐이다. --- ## Alarm — 주기 Task 활성화 Alarm은 Counter가 특정 값에 도달하면 Task 활성화, 이벤트 설정, 콜백 호출 등의 액션을 수행한다. ```c /* 시스템 시작 시 10ms 주기 Alarm 설정 */ SetRelAlarm( Alarm_Task10ms, /* Alarm 이름 */ 10, /* 첫 번째 발생까지 Counter 틱 */ 10 /* 반복 주기 (0이면 1회성) */ ); ``` 일반적으로 주기 Task는 Alarm으로 활성화된다. ``` OsAlarm_Task10ms └── OsAlarmAction: ActivateTask(Task_10ms) └── OsAlarmCounterRef: SystemTimer └── 주기: 10ms ``` --- ## Schedule Table — 복잡한 타이밍 관리 단순 주기 이상의 타이밍이 필요할 때 Schedule Table을 쓴다. 하나의 테이블에 여러 Expiry Point를 정의한다. ``` Schedule Table "CycleTable" (주기 100ms) Expiry Point @ 0ms: ActivateTask(Task_100ms), SetEvent(Task_A, EVT_START) Expiry Point @ 10ms: ActivateTask(Task_10ms) Expiry Point @ 20ms: ActivateTask(Task_10ms) ... Expiry Point @ 90ms: ActivateTask(Task_10ms) ``` ```c /* Schedule Table 시작 */ StartScheduleTableRel(ScheduleTable_Main, 0U); ``` Schedule Table은 여러 Task 간 타이밍 관계가 중요한 경우(예: CAN 송수신 동기화, 센서 샘플링과 처리 순서)에 유용하다. --- ## Alarm vs Schedule Table 선택 | 상황 | 선택 | |------|------| | 단일 Task를 고정 주기로 활성화 | Alarm | | 여러 Task의 실행 순서·타이밍 동기화 | Schedule Table | | 시작 오프셋(phase) 제어 필요 | Schedule Table | | 구현 단순성 필요 | Alarm | --- ## OsCounter 대신 GetCounterValue 활용 ```c TickType current_tick; GetCounterValue(SystemTimer, ¤t_tick); /* 경과 시간 계산 */ TickType elapsed; GetElapsedValue(SystemTimer, ¤t_tick, &elapsed); ``` Task 내에서 간단한 시간 측정이 필요할 때 유용하다. `elapsed`가 Alarm 주기보다 크면 Task가 늦게 실행되고 있다는 신호다.
AUTOSAR OS Task와 ISR 설계
OS Application과 메모리 보호 설정
// COMMENTS
Newest First
ON THIS PAGE
No content selected.