Software Component DescriptionAUTOSAR 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 CompositionRoot 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 ConnectorComposition 외부 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 EventImplicit 데이터 접근 완료 또는 에러
Data Received Event특정 데이터 수신 완료
Data Receive Error Event네트워크 수신 에러
Operation Invoked EventClient의 서비스 요청을 서버가 수신
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 PointRte_Write_<PPort>_<DataElement>(data) / Rte_Send_<PPort>_<DataElement>(data)
Data Receive Point By ArgumentRte_Read_<RPort>_<DataElement>(data) / Rte_Receive_<RPort>_<DataElement>(data)
Data Receive Point By Valuesdata = Rte_DRead_<RPort>_<DataElement>()
Synchronous Server Call PointRte_Call_<RPort>_<Operation>(...)
Asynchronous Server Call PointRte_Call_<RPort>_<Operation>(...)
Asynchronous Server Call Result PointRte_Result_<RPort>_<Operation>(...)
Mode Switch PointRte_Switch_<PPort>_<ModeDeclarationGroup>(mode)
Mode Access Pointmode = Rte_Mode_<P/RPort>_<ModeDeclarationGroup>()
Data Write AccessRte_IWrite_<Runnable>_<PPort>_<DataElement>(data)
Data Read AccessRte_IRead_<Runnable>_<PPort>_<DataElement>()
Internal Triggering PointRte_IrTrigger_<Runnable>_<InternalTriggeringPoint>()
External Triggering PointRte_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 → 코드로 진행.

#구성 요소작업
1Interface(없음 — Timing만 쓸 경우)
2ComponentComponent 생성
3Port(없음)
4CompositionComponent Prototype 생성
5Connector(없음)
6RunnableComponent 내 Runnable 추가
7EventTiming Event 추가 + Runnable 연결
8Access Point(없음)
9EcuSwMappingEcuSwMapping 수행
10RteSwComponentInstancePrototype에 대한 RteSwComponentInstance 생성
11RteEventToTaskMappingTiming Event에 Task + Alarm 연결
12Runnable 코드 구현C 코드 작성

Sender-Receiver / Client-Server 케이스에서는 Interface·Port·Access Point 단계가 활성화된다.

같이 보기