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
Explicit vs Implicit Write — 언제 무엇을 쓰나
7 / 19
Alarm, Counter, Schedule Table 정리
☆ Star
↗ Full
AUTOSAR OS Task와 ISR 설계
#autosar
#os
#task
#isr
#basic-task
@devpc
|
2026-05-04 12:39:28
|
GET /api/v1/flows/24/nodes/428?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# AUTOSAR OS Task와 ISR 설계 ## AUTOSAR OS 기반 AUTOSAR OS는 OSEK/VDX OS 표준을 기반으로 한다. RTOS 경험이 있다면 대부분의 개념이 익숙하다. 차이는 **정적 설정** — 런타임에 Task를 생성하지 않는다. 빌드 타임에 모든 Task가 결정된다. --- ## Task 종류 ### Basic Task 실행 후 스스로 종료(`TerminateTask`)하거나 다음 Task로 체인(`ChainTask`)한다. 블로킹 대기(WaitEvent)가 없다. ```c TASK(Task_10ms) { /* 주기 처리 */ Rte_Task_Dispatch_10ms(); (void)TerminateTask(); } ``` 대부분의 제어 Task는 Basic Task다. ### Extended Task `WaitEvent`로 이벤트를 기다릴 수 있다. 이벤트가 올 때까지 블로킹된다. ```c TASK(Task_Event) { EventMaskType events; for (;;) { WaitEvent(EVENT_CAN_RX | EVENT_TIMEOUT); GetEvent(Task_Event, &events); ClearEvent(events); if (events & EVENT_CAN_RX) { /* CAN 메시지 처리 */ } if (events & EVENT_TIMEOUT) { /* 타임아웃 처리 */ } } } ``` --- ## Task 우선순위와 스케줄링 AUTOSAR OS는 **Fixed Priority Preemptive** 스케줄링을 사용한다. 높은 우선순위 Task가 준비되면 낮은 우선순위 Task를 선점한다. ``` 우선순위 높음 Task_1ms ───┐ ← 선점 발생 ↓ 우선순위 낮음 Task_10ms ─→─ (중단) ──→ (재개) ``` 주의: 같은 우선순위 Task가 두 개이면 동시에 실행되지 않고 FCFS 순서로 처리된다. --- ## ISR — 인터럽트 서비스 루틴 AUTOSAR OS에서 ISR은 두 카테고리다. | 카테고리 | OS API 사용 가능 | 용도 | |---------|-----------------|------| | ISR Category 1 | 불가 | 최고 속도 필요한 인터럽트 (예: 타이머 틱) | | ISR Category 2 | 가능 | Task 활성화, 이벤트 설정 가능 | ```c /* ISR Category 2 예시 */ ISR(Can_Rx_ISR) { /* CAN 수신 처리 */ SetEvent(Task_CanProc, EVENT_CAN_RX); } ``` ISR에서는 처리를 최소화하고 Task에 이벤트를 전달하는 패턴이 기본이다. --- ## 실무 설계 패턴 **주기 Task 분배:** ``` Task_1ms → 고속 제어 (모터, 전류 루프) Task_10ms → 일반 제어 (온도, 압력) Task_100ms → 느린 모니터링 (배터리, 진단) Task_BG → 백그라운드 (NvM 접근, 로그) ``` **Task와 Runnable 매핑 규칙:** - 하나의 Task에 여러 Runnable을 매핑 가능 - RTE가 Task 안에서 Runnable을 순서대로 호출 - Runnable 실행 순서는 arxml/툴 설정에서 결정됨 --- ## GetResource / ReleaseResource — 공유 자원 보호 여러 Task가 동일한 자원(전역 변수, 하드웨어 레지스터)에 접근할 때 Priority Ceiling Protocol로 보호한다. ```c TASK(Task_10ms) { GetResource(RES_SharedBuffer); /* 공유 자원 접근 */ shared_buffer[0] = new_value; ReleaseResource(RES_SharedBuffer); (void)TerminateTask(); } ``` Mutex와 달리 `GetResource`는 블로킹하지 않고 현재 Task의 우선순위를 일시적으로 올린다.
Explicit vs Implicit Write — 언제 무엇을 쓰나
Alarm, Counter, Schedule Table 정리
// COMMENTS
Newest First
ON THIS PAGE
No content selected.