null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
P-Port, R-Port와 인터페이스 설계
#autosar
#port
#provide-port
#require-port
#interface
@devpc
|
2026-05-04 12:39:27
|
GET /api/v1/nodes/426?nv=1
History:
v1 (2026-05-04) (Latest)
0
Views
1
Calls
# P-Port, R-Port와 인터페이스 설계 ## 포트의 역할 SWC는 포트를 통해서만 외부와 통신한다. 포트는 두 종류다. - **P-Port (Provide Port)** — 데이터 또는 서비스를 **제공**하는 쪽 - **R-Port (Require Port)** — 데이터 또는 서비스를 **요구**하는 쪽 ``` SWC_A SWC_B ┌──────────┐ ┌──────────┐ │ │──P-Port────────→──R-Port │ │ 제공자 │ │ 소비자 │ └──────────┘ └──────────┘ ``` --- ## 포트 인터페이스 종류 | 인터페이스 타입 | 용도 | RTE API | |----------------|------|---------| | `SenderReceiverInterface` | 데이터 생산자→소비자 | `Rte_Write`, `Rte_Read` | | `ClientServerInterface` | 함수 호출 형태 | `Rte_Call` | | `NvDataInterface` | 비휘발성 데이터 | `Rte_Rte_Write_NvM_*` | | `ParameterInterface` | 설정값(읽기 전용) | `Rte_Prm_*` | --- ## Sender-Receiver 인터페이스 가장 많이 쓰는 패턴이다. SWC_A가 쓴 데이터를 SWC_B가 읽는다. ```c /* SWC_A — 데이터 쓰기 (P-Port) */ Rte_Write_EngineControl_RotationSpeed(3500.0f); /* SWC_B — 데이터 읽기 (R-Port) */ float32 rpm = 0.0f; Std_ReturnType ret = Rte_Read_Dashboard_RotationSpeed(&rpm); if (ret == RTE_E_OK) { /* rpm 유효 */ } ``` 인터페이스 이름은 같아야 한다. P-Port와 R-Port가 같은 `SenderReceiverInterface`를 참조해야 연결된다. --- ## Client-Server 인터페이스 서비스를 호출하는 형태다. 동기(synchronous)와 비동기(asynchronous) 두 방식이 있다. ```c /* Client (R-Port) — NvM 읽기 요청 */ Std_ReturnType ret; uint8 buffer[16]; ret = Rte_Call_NvStorage_ReadBlock(BLOCK_ID, buffer); if (ret == E_OK) { /* 읽기 성공 */ } ``` 동기 호출은 응답이 올 때까지 블로킹된다. 짧은 Task에서 긴 동기 호출은 CPU 점유 문제를 일으킬 수 있다. --- ## 포트 네이밍 관례 실무에서는 포트 이름에 방향과 데이터를 포함시키는 게 일반적이다. ``` SWC 이름 : EngineControl 포트 이름 : RotationSpeed 전체 이름 : EngineControl_RotationSpeed P-Port API : Rte_Write_EngineControl_RotationSpeed(value) R-Port API : Rte_Read_<SWC명>_RotationSpeed(&value) ``` RTE가 생성한 헤더(`Rte_<SWC명>.h`)를 열면 해당 SWC에서 사용 가능한 모든 RTE API 목록을 볼 수 있다. --- ## 주의: 포트 연결이 없으면 컴파일 에러 arxml에서 P-Port와 R-Port가 연결(Assembly Connector)되어 있지 않으면 RTE 생성 단계에서 에러가 난다. 포트를 새로 추가했는데 빌드가 안 되면 먼저 arxml Assembly Connector를 확인한다.
// COMMENTS
Newest First
ON THIS PAGE