null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
SWC와 Runnable — 실행 단위 이해
#autosar
#swc
#runnable
#component
#task
@devpc
|
2026-05-04 12:39:27
|
GET /api/v1/nodes/425?nv=1
History:
v1 (2026-05-04) (Latest)
0
Views
1
Calls
# SWC와 Runnable — 실행 단위 이해 ## SWC(Software Component)란 SWC는 기능적으로 완결된 소프트웨어 모듈이다. 예를 들면: - `EngineControlSWC` — 엔진 RPM 제어 - `BatteryMonitorSWC` — 배터리 전압 감시 - `ClimateControlSWC` — 공조 시스템 제어 SWC는 포트를 통해서만 외부와 통신한다. 내부 구현은 외부에 노출하지 않는다. --- ## Runnable Entity — SWC의 실행 단위 하나의 SWC 안에는 여러 Runnable이 있을 수 있다. ``` EngineControlSWC ├── Runnable_Init ← 초기화 시 1회 실행 ├── Runnable_10ms ← 10ms 주기로 실행 └── Runnable_OnEvent ← 특정 이벤트 발생 시 실행 ``` Runnable은 OS Task에 매핑된다. 정확히는 **Task → RTE 코드 → Runnable** 호출 순서다. ```c /* OS Task (자동 생성 코드) */ TASK(Task_10ms) { Rte_Task_Dispatch_10ms(); /* RTE가 10ms Runnable들을 차례로 호출 */ (void)TerminateTask(); } /* Runnable 구현 (개발자가 작성) */ FUNC(void, EngineControl_CODE) EngineControl_Runnable_10ms(void) { float32 rpm; Rte_Read_EngineControl_RotationSpeed(&rpm); /* 제어 로직 */ } ``` --- ## Runnable 트리거 종류 | 트리거 | 설명 | 예시 | |--------|------|------| | `TimingEvent` | 주기적 실행 | 10ms, 100ms 제어 루프 | | `InitEvent` | ECU 시작 시 1회 | 변수 초기화 | | `DataReceivedEvent` | 데이터 수신 시 | CAN 메시지 수신 트리거 | | `SwcModeSwitchEvent` | 모드 변경 시 | 주행/주차 모드 전환 | | `BackgroundEvent` | 빈 시간에 실행 | 진단, 로그 처리 | --- ## SWC 종류 | 타입 | 설명 | |------|------| | Application SWC | 일반 기능 로직 | | Sensor-Actuator SWC | 하드웨어와 직접 연결되는 SWC (MCAL 근처) | | Service SWC | BSW 서비스를 애플리케이션에 제공 (NvM, DCM 등) | | Composition SWC | 여러 SWC를 묶는 논리적 컨테이너 | 기능 개발자는 **Application SWC**만 구현하면 된다. --- ## SWC 설계 원칙 1. **단일 책임** — 하나의 SWC는 하나의 기능 도메인을 담당한다 2. **포트만으로 통신** — 전역 변수로 다른 SWC 데이터에 접근하지 않는다 3. **재사용 가능** — 하드웨어 의존성 없이 다른 ECU에 이식 가능해야 한다 4. **Runnable 크기** — 하나의 Runnable은 짧게 유지한다. 긴 연산은 Background Task나 별도 Runnable로 분리한다 --- ## 실무 함정: Runnable 재진입 하나의 Runnable이 여러 Task에 매핑되면 **재진입(re-entrancy)** 문제가 생길 수 있다. AUTOSAR SWS에서는 Runnable이 기본적으로 **비재진입**이라고 가정한다. 동시에 두 Task에서 같은 Runnable이 실행되는 구성은 피해야 한다. arxml에서 `canBeInvokedConcurrently`를 확인할 것.
// COMMENTS
Newest First
ON THIS PAGE