Software Component Description — AUTOSAR Classic Platform에서 SW-C의 구성과 설계 정보를 담는 공식 설계 산출물. AUTOSAR 개발 프로세스의 1~2단계에서 작성되며, 3개 레벨(VFB / RTE / Implementation)로 점진적 상세화된다. 해당 ECU에 할당된 뒤 ECU Configuration Description과 함께 RTE Generator의 입력이 된다.
3-Level 구조
┌─────────────────────────────────────┐
│ VFB-level (가장 추상화) │ Component / Composition / Port /
│ │ Interface / Connector
├─────────────────────────────────────┤
│ RTE-level (중간) │ Runnable / Event / Access Point
├─────────────────────────────────────┤
│ Implementation-level (가장 구체) │ Code (Runnable body)
└─────────────────────────────────────┘상위 레벨은 “무엇이 있고 어떻게 연결되는가”를, 하위 레벨은 “언제 실행되고 어떻게 접근하는가”를 기술한다. VFB-level은 ECU·HW를 모르고, Implementation-level만 C 코드다.
VFB-level
Component-type vs Component-prototype
- Component-type — 컴포넌트의 속성 정의 (포트, 인터페이스 구성)
- Component-prototype — Component-type의 인스턴스 (메모리 할당 단위)
하나의 type에서 여러 prototype이 생성되면 Multiple Instantiation이라 부르며, 각 prototype은 동일 속성을 가지되 메모리상 독립. 예: SeatHeatingControl (type) → SHCFrontLeft, SHCFrontRight (prototypes).
9개 Component-type 분류표는 Component-type 9종 참조.
Composition
다른 Component를 포함하는 Component. 내부적으로 Component-prototype·Port·Connector를 소유한다. Composition도 Component-type이므로 더 큰 Composition에 prototype으로 속할 수 있으며, 최상위는 Root Composition → Root Composition Prototype.
상세는 Composition.
Port / Interface
- Port — Component 간 통신 지점. P-Port(Provide) / R-Port (Require)
- Interface — Port가 주고받는 타입 정의
Interface 유형 6종 (Client-Server, Sender-Receiver, Mode Switch, Trigger, Parameter, Nv Data)은 Port Interface 유형 (6종) 참조.
Connector
Port 간 연결을 정의. 두 종류.
| Connector | 연결 대상 |
|---|---|
| Assembly Connector | 같은 Composition 내 두 Component-prototype의 P-Port ↔ R-Port |
| Delegation Connector | Composition 외부 Port ↔ 내부 Component-prototype의 동형 Port |
Delegation은 같은 방향끼리만 연결 (P↔P, R↔R) — 외부로 노출되는 의미를 보존.
RTE-level
Runnable
Component의 실행 단위. Runnable 참조.
Event (12종)
Runnable이 언제 실행될지 지정하는 트리거.
| Event | 트리거 조건 |
|---|---|
| Timing Event | 정의된 주기로 반복 |
| Data Send Completed Event | 특정 데이터 송신 완료 또는 에러 |
| Data Write Completed Event | Implicit 데이터 접근 완료 또는 에러 |
| Data Received Event | 특정 데이터 수신 완료 |
| Data Receive Error Event | 네트워크 수신 에러 |
| Operation Invoked Event | Client의 서비스 요청을 서버가 수신 |
| Asynchronous Server Call Returns Event | 비동기 서버 호출 완료 |
| Swc Mode Switch Event | 모드 전환에 따른 Runnable 실행 |
| Mode Switched Ack Event | 모드 수신 완료 또는 에러 |
| External Trigger Occurred Event | 외부 트리거 발생 |
| Internal Trigger Occurred Event | 내부 트리거 발생 |
| Background Event | 우선순위 최하 백그라운드 반복 실행 |
Access Point (12종 + RTE API)
Runnable이 RTE API를 사용하기 위한 사용 지점. 설계 시 Access Point를 선언하면 RTE Generator가 해당 API를 Runnable 시그니처에 맞게 자동 생성한다.
| Access Point | 생성 RTE API |
|---|---|
| Data Send Point | Rte_Write_<PPort>_<DataElement>(data) / Rte_Send_<PPort>_<DataElement>(data) |
| Data Receive Point By Argument | Rte_Read_<RPort>_<DataElement>(data) / Rte_Receive_<RPort>_<DataElement>(data) |
| Data Receive Point By Values | data = Rte_DRead_<RPort>_<DataElement>() |
| Synchronous Server Call Point | Rte_Call_<RPort>_<Operation>(...) |
| Asynchronous Server Call Point | Rte_Call_<RPort>_<Operation>(...) |
| Asynchronous Server Call Result Point | Rte_Result_<RPort>_<Operation>(...) |
| Mode Switch Point | Rte_Switch_<PPort>_<ModeDeclarationGroup>(mode) |
| Mode Access Point | mode = Rte_Mode_<P/RPort>_<ModeDeclarationGroup>() |
| Data Write Access | Rte_IWrite_<Runnable>_<PPort>_<DataElement>(data) |
| Data Read Access | Rte_IRead_<Runnable>_<PPort>_<DataElement>() |
| Internal Triggering Point | Rte_IrTrigger_<Runnable>_<InternalTriggeringPoint>() |
| External Triggering Point | Rte_Trigger_<PPort>_<Trigger>() |
핵심 규칙: API 이름은 Rte_<verb>_<Port>_<Element> 꼴로 자동 생성된다. Port·Element 이름은 SW-C 설계에서 정해진 것이 그대로 치환된다.
Implementation-level
Runnable Body를 C 코드로 구현하는 단계. 작성 규칙.
// ① RTE 헤더 include
#include "Rte_<Swc>.h"
// ② Runnable body — void fn(void) 형식이 기본
void run_1(void) {
// ③ Access Point로부터 생성된 RTE API 사용
Rte_Write_<PPort>_<DataElement>(data);
}
void run_2(void) {
Rte_Read_<RPort>_<DataElement>(&data);
}- ① —
<SWC>는 해당 SW-C 이름. 이 헤더가 RTE API 선언과 타입 정의를 포함 - ② — Runnable은 기본적으로 인자·리턴이
void - ③ — 외부 자원 접근은 반드시 Access Point로 선언된 API만 사용 (다른 SW-C 함수 직접 호출 금지)
Use Case — Timing Event 설계 12단계
Timing Event로 주기 동작하는 애플리케이션을 만드는 순서. 각 단계는 Software Component Description → ECU Configuration Description → 코드로 진행.
| # | 구성 요소 | 작업 |
|---|---|---|
| 1 | Interface | (없음 — Timing만 쓸 경우) |
| 2 | Component | Component 생성 |
| 3 | Port | (없음) |
| 4 | Composition | Component Prototype 생성 |
| 5 | Connector | (없음) |
| 6 | Runnable | Component 내 Runnable 추가 |
| 7 | Event | Timing Event 추가 + Runnable 연결 |
| 8 | Access Point | (없음) |
| 9 | EcuSwMapping | EcuSwMapping 수행 |
| 10 | RteSwComponentInstance | Prototype에 대한 RteSwComponentInstance 생성 |
| 11 | RteEventToTaskMapping | Timing Event에 Task + Alarm 연결 |
| 12 | Runnable 코드 구현 | C 코드 작성 |
Sender-Receiver / Client-Server 케이스에서는 Interface·Port·Access Point 단계가 활성화된다.