null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
AUTOSAR 개발자 실전 가이드
Structure
overview
•
AUTOSAR가 필요한 이유
•
AUTOSAR 레이어드 아키텍처 구조
components
•
Core, Partition, OS Application 관계
•
SWC와 Runnable — 실행 단위 이해
rte-ports
•
P-Port, R-Port와 인터페이스 설계
•
Explicit vs Implicit Write — 언제 무엇을 쓰나
autosar-os
•
AUTOSAR OS Task와 ISR 설계
•
Alarm, Counter, Schedule Table 정리
•
OS Application과 메모리 보호 설정
spec-practice
•
MUST vs SHALL vs SHOULD — 스펙 용어 해석법
•
DET 에러 처리 — Det_ReportError와 RuntimeError
com-stack
•
ComSignal에서 PduR까지 — 신호가 CAN 프레임이 되는 경로
•
CanIf부터 CanNm까지 — CAN 통신 스택 계층 분리
diagnostics
•
DEM으로 DTC 관리하기 — 이벤트 상태와 고장 이력
•
DCM과 UDS 서비스 — 진단 통신의 실전 구조
ecum-bswm
•
EcuM 시동/종료 시퀀스 — ECU가 켜지고 꺼지는 순서
•
BswM 모드 전환 — 규칙 기반 상태 관리
nvm-schm
•
NvM 읽기/쓰기 패턴 — 비휘발성 메모리를 안전하게 다루는 방법
•
SchM Exclusive Area — 인터럽트와 Task 간 공유 자원 보호
Flow Structure
P-Port, R-Port와 인터페이스 설계
6 / 19
AUTOSAR OS Task와 ISR 설계
☆ Star
↗ Full
Explicit vs Implicit Write — 언제 무엇을 쓰나
#autosar
#rte
#explicit
#implicit
#write
@devpc
|
2026-05-04 12:39:28
|
GET /api/v1/flows/24/nodes/427?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# Explicit vs Implicit Write — 언제 무엇을 쓰나 ## 두 가지 RTE 접근 방식 AUTOSAR RTE에서 Sender-Receiver 통신은 두 가지 방식으로 구현된다. | 방식 | 쓰기 타이밍 | 읽기 타이밍 | |------|------------|------------| | **Explicit** | `Rte_Write` 호출 즉시 버퍼에 반영 | `Rte_Read` 호출 시 버퍼에서 읽음 | | **Implicit** | Runnable 종료 후 일괄 반영 | Runnable 시작 시 복사된 값 사용 | --- ## Explicit 방식 `Rte_Write`를 호출하는 즉시 공유 버퍼에 값이 쓰인다. ```c FUNC(void, EngineControl_CODE) EngineControl_10ms(void) { float32 rpm = calculate_rpm(); /* 호출 즉시 버퍼 반영 */ Rte_Write_EngineControl_RotationSpeed(rpm); /* 같은 Runnable 내에서 다시 쓰면 즉시 덮어씀 */ rpm = 0.0f; Rte_Write_EngineControl_RotationSpeed(rpm); /* 최종값: 0.0 */ } ``` **특징:** - 데이터 변경이 즉시 가시적 - 같은 Task에서 Write/Read가 섞이면 순서에 따라 결과가 달라질 수 있음 - 동시성 주의: 다른 Task가 Read할 때 Write 중이면 일관성 깨질 수 있음 --- ## Implicit 방식 Runnable 시작 시 공유 버퍼에서 로컬 복사본을 만들고, Runnable 종료 시 일괄 반영된다. ```c FUNC(void, EngineControl_CODE) EngineControl_10ms(void) { float32 rpm = calculate_rpm(); /* Rte_IWrite: Implicit Write — 아직 버퍼에 반영 안 됨 */ Rte_IWrite_EngineControl_RotationSpeed(rpm); rpm = 0.0f; Rte_IWrite_EngineControl_RotationSpeed(rpm); /* Runnable 종료 시 최종값(0.0)만 버퍼에 반영됨 */ } /* ← Runnable 종료 후 RTE가 버퍼에 반영 */ ``` **특징:** - Runnable 실행 중 데이터 일관성 보장 (스냅샷 방식) - 같은 Runnable 내에서 여러 번 써도 마지막 값만 반영 - 메모리 사용량 증가 (로컬 복사본 유지) --- ## 언제 어느 것을 쓸까 **Explicit를 선택하는 경우:** - 데이터를 쓴 즉시 다른 Runnable이 읽어야 하는 경우 - Event 기반 통신 (DataReceivedEvent 트리거) - 실시간성이 중요한 제어 데이터 **Implicit를 선택하는 경우:** - 주기적 Runnable (10ms, 100ms 제어 루프) — 대부분의 경우 - 같은 Runnable에서 데이터를 여러 번 읽고 써야 할 때 일관성 필요 - ASIL-D 인증이 필요한 코드 (Implicit가 더 결정론적) 실무에서는 **주기적 제어 루프는 Implicit**, **이벤트 기반 처리는 Explicit**가 일반적인 패턴이다. --- ## API 이름 규칙 ``` Rte_Write_<SWCName>_<PortName> → Explicit Write Rte_Read_<SWCName>_<PortName> → Explicit Read Rte_IWrite_<SWCName>_<PortName> → Implicit Write Rte_IRead_<SWCName>_<PortName> → Implicit Read ``` Implicit API는 포인터가 아닌 값을 반환/받는다는 점도 다르다. ```c /* Explicit: 포인터로 받음 */ float32 val; Rte_Read_SWC_Port(&val); /* Implicit: 값으로 반환 */ float32 val = Rte_IRead_SWC_Port(); ```
P-Port, R-Port와 인터페이스 설계
AUTOSAR OS Task와 ISR 설계
// COMMENTS
Newest First
ON THIS PAGE
No content selected.