Client Server Interface (C/S)
다른 SWC에 정의된 함수 호출시 사용.
AUTOSAR 개발 방법론에서 외부 SWC에 구현된 함수를 코드 상에서 직접 호출해서 사용하면 X
파라미터 Direction
- in : 함수 내부에서 인풋으로 사용
- out : 함수 결과값을 담는 용도
- inout : 인풋 + 결과값 용도
예시
int Add(int a, int b, int* result)
{
*result = a+b;
return 0;
}
a, b는 in, result는 out
Direction에 따라
- in : 포인터 형태 X
- out, inout : 포인터 형태의 코드
CS Port Interface 설계 과정
1. CS Port Interface 만들기
2. Operation 추가
- Operation : CS 인터페이스에서 정의하는 함수
- 포트 인터페이스 설계시에는 함수 형태만 정하고, 함수 내부의 코드 구현은 유저가 별도로 구현.
- Operation의 리턴값은 의미있는 결과값 X, 문제가 생겼을 때 외부로 알리기위한 에러코드를 리턴하는 용도로만 제한.
- 예시
int Add(int a, int b)
{
return a+b;
}
위의 방식 대신 아래 처럼 작성해야 함.
int Add(int a, int b, int* result) // 결과값을 담기 위한 파라미터 추가
{
int ret = 0;
*result = a+b;
return ret;
}
3. Operation 이름 정하기
4. Operation 에서 사용할 파라미터 설정(파라미터명, 데이터타입, Direction)
- 예시
Name: Command
Data Type: uint8
Direction: In
5. Error Code 설정(필수X)
- Application Errors(Possible Errors)에 Error Code 명, Error Code 값(0: 정상 / 1~63 : 사용자가 설정) 추가
- Error Code 사용하는 경우 리턴 타입 StdReturnType (unsigned 8bit 정수형 데이터타입)
- Error Code 사용하지 않은 경우 리턴 타입 Void
- Operation에서 사용할 Error Code 선택
6. SWC에 Port Prototype을 추가
- Port Prototype의 이름 지정(Port Interface랑 Port Prototype은 별개이므로 따로 지정) - ex. LampPort
- Sever: 함수 호출받는 SWC / Provide Port (서비스 제공)
- Client: 함수 호출하는 SWC / Require Port (서비스를 제공 받음)

7. RootComposition에 올려두고 Port 간 연결
포트 설계 후
1. SWC에 Runnable 추가
- Client가 Operation 호출을 요청했을 때 실행될 서버 Runnable을 SWC에 추가하는 작업을 Authoring Tool로 해줘야 함.
2. Server쪽에 OperationInvokedEvent 등록 및 세팅
- Runnable의 이벤트 세팅. (호출 조건 세팅)
- 서버 포트에 만들어져있는 오퍼레이션과 사용할 러너블 매칭.
3. Client 쪽에 ServerCall Point 세팅
- 소프트웨어 컴포넌트 간의 연결은 RTE(Runtime Envirenment) 영역이 담당.
→ SWC간의 함수 호출하는 경우에도 RTE가 담당해야함. 러너블을 직접 호출하면 오토사 규칙 위반.
→ RTE API를 호출(RTE API가 러너블 실행)
#include "Rte_SeatBelt.h"
void SeatBelt_MainFunction(void)
{
uint8 Lamp_Command;
if(조건만족시)
Rte_Call_LampPort_Lamp_Control(Lamp_Command);
}
- 각 러너블마다 Call 하려는 Operation의 Server Call Point를 추가
→ 그래야 Operation 호출을 위한 RTE API가 생성됨.- Synchronos방식: Client SWC에서 함수 호출하는 러너블에 Synchronous ServerCallPoint 세팅
- Asynchronos방식: Client SWC에서 함수 호출하는 러너블에 Asynchronous ServerCallPoint 세팅
※ 설계한 결과물은 모두 Arxml 형태로 작성됨.
4. 설계 내용 Code Generation
5. 러너블 내부코드 구현 및 생성된 RTE API 활용
RTE API 네이밍룰
: Rte_Call_포트프로토타입명_오퍼레이션명
예시
- 포트 인터페이스명: Pi_LampControl
- 오퍼레이션명: Lamp_Control
- 클라이언트 SWC의 Port Prototype명: LampPort
//Rte_Call_포트프로토타입명_오퍼레이션명
Rte_Call_LampPort_Lamp_Control
Synchronous Call VS Asynchronous Call
- 특이사항이 없다면 Sync방식 이용
Synchronous 방식 (Blocking)
: 함수 호출시 곧바로 실행.
- Operation Call
- Operation Code 실행
- 나머지 코드 실행
Asynchronous 방식 (Non Blocking)
: 함수 실행 요청만 보낸 상태로 하던 작업 계속 수행. 서버 러너블(오퍼레이션)은 나중에 실행.
(오퍼레이션 실행시간이 오래 걸리는 경우 사용)
- Operation Call
: OS에게 Operation 실행 요청 - 나머지 코드 실행
- OS에 의해 나중에 Operation 실행
Rte_Result API : Operation 실행 결과를 받기 위한 추가 API 사용.
ㄴ아직 실행되지 않아 결과값이 담겨있지않아서 따로 받아와야함.
(결과값 전달 받을 러너블에 AsynchronousServerCallResultPoint 세팅해줘야 Rte_result API 사용 가능)
Rte_Call_TestPort_Add(data1, data2, &result);
위를 아래처럼 나누어 사용.
Rte_Call_TestPort_Add(data1, data2);
Rte_Result_TestPort_Add(&result);
Rte_Result API의 Return 값:
// Operation 수행 완료된 경우
#define RTE_E_OK (0)
// Operation 수행 안끝난 경우
#define RTE_E_NO_DATA (131)
Operation 실행 완료 여부를 알림받고 싶다면 AsynchronousServerCallReturnEvent를 활용.
요청한 Operation 실행 결과를 받기 위한 2가지 방식
Polling 방식
: RTE_Result API 호출시 오퍼레이션이 아직 완료 안되었다면, RTE_E_NO_DATA 리턴하여 알려주고 끝남. 결과 받으려면 나중에 다시 RTE_Result 호출해야 함.
Waiting 방식
: RTE_Result API 호출시 오퍼레이션이 아직 완료 안되었다면, 뒤쪽 코드가 먼저 실행되는게 아니라 오퍼레이션이 완료될 때까지 기다렸다가 뒤의 코드 실행.
Waiting Point 설정 필요.
RTE Return Event
Async 방식을 이용하여 오퍼레이션 호출시, 나중에 서버에서 오퍼레이션 실행이 완료되면 클라이언트의 특정 러너블을 실행시키는 동작 방식. (Polling 타입에서만 사용 가능)
'AUTOSAR' 카테고리의 다른 글
| AUTOSAR Basic Software(BSW) 개발환경(1) (1) | 2025.07.16 |
|---|---|
| AUTOSAR Basic Software(BSW) 모듈 (1) | 2025.07.15 |
| AUTOSAR Port(2) - Sender Receiver Inferface (0) | 2025.07.10 |
| AUTOSAR Port(1) (0) | 2025.07.10 |
| AUTOSAR Software Architeture (2) | 2025.07.10 |