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
MUST vs SHALL vs SHOULD — 스펙 용어 해석법
11 / 19
ComSignal에서 PduR까지 — 신호가 CAN 프레임이 되는 경로
☆ Star
↗ Full
DET 에러 처리 — Det_ReportError와 RuntimeError
#autosar
#det
#default-error-tracer
#error-handling
#runtime-error
@devpc
|
2026-05-04 12:39:28
|
GET /api/v1/flows/24/nodes/432?fv=1&nv=1
Context:
Flow v1
→
Node v1
0
Views
1
Calls
# DET 에러 처리 — Det_ReportError와 RuntimeError ## DET란 DET(Default Error Tracer)는 AUTOSAR BSW 모듈들이 잘못된 파라미터나 순서 오류를 감지했을 때 호출하는 표준 에러 보고 인터페이스다. ``` [소프트웨어 모듈] → Det_ReportError() → [DET 모듈] → 로그/후킹/중단 ``` 개발 단계에서는 DET를 활성화해 문제를 조기에 잡는다. 양산 코드에서는 보통 비활성화하거나 로그만 수집한다. --- ## Det_ReportError 시그니처 ```c Std_ReturnType Det_ReportError( uint16 ModuleId, /* AUTOSAR 모듈 ID */ uint8 InstanceId, /* 인스턴스 (보통 0) */ uint8 ApiId, /* 어느 API에서 호출했는지 */ uint8 ErrorId /* 에러 코드 */ ); ``` 예시 — Can 드라이버에서 잘못된 컨트롤러 ID: ```c if (ControllerId >= CAN_CONTROLLER_COUNT) { Det_ReportError(CAN_MODULE_ID, 0U, CAN_SID_WRITE, CAN_E_PARAM_CONTROLLER); return E_NOT_OK; } ``` --- ## 에러 코드 명명 규칙 AUTOSAR BSW 모듈의 에러 코드는 `{MODULE}_E_` 접두어를 쓴다. ```c /* Com 모듈 에러 예시 */ #define COM_E_PARAM 0x01U #define COM_E_UNINIT 0x02U #define COM_E_PARAM_POINTER 0x10U ``` 직접 모듈을 작성할 때는 같은 명명 규칙을 따른다. --- ## RuntimeError — RTE 레벨 에러 DET가 BSW 레벨 에러라면, RuntimeError는 SWC → RTE 간 통신에서 발생하는 에러다. ```c /* SWC에서 Rte_Write 결과 확인 */ Std_ReturnType ret; ret = Rte_Write_Port_Signal(value); if (ret != RTE_E_OK) { /* 에러 처리 — 대부분 안전 값으로 대체 */ Rte_Write_Port_Signal(SAFE_DEFAULT_VALUE); } ``` 주요 RTE 에러 코드: | 코드 | 의미 | |------|------| | `RTE_E_OK` | 정상 | | `RTE_E_LOST_DATA` | 새 데이터 없음 (읽기 전 덮어씌워짐) | | `RTE_E_MAX_AGE_EXCEEDED` | 데이터가 너무 오래됨 | | `RTE_E_NEVER_RECEIVED` | 아직 한 번도 수신 안 됨 | | `RTE_E_COM_STOPPED` | COM 레이어 중단됨 | --- ## 실무 에러 처리 전략 ### 1. DET — 개발 단계 방어 ```c /* Det_ReportError 후 반드시 return */ if (param == NULL_PTR) { Det_ReportError(MODULE_ID, 0U, API_ID, E_PARAM_POINTER); return E_NOT_OK; /* ← 빠진 경우가 많음, 주의 */ } ``` ### 2. RuntimeError — 안전 기본값 패턴 센서 값 읽기 실패 → 마지막 유효값 유지 or 안전 기본값 사용: ```c Std_ReturnType status; SensorData_Type sensor_data; status = Rte_Read_SensorPort_Data(&sensor_data); if (status == RTE_E_OK || status == RTE_E_LOST_DATA) { last_valid_sensor = sensor_data; /* 유효 데이터 갱신 */ } else { /* MAX_AGE_EXCEEDED, NEVER_RECEIVED 등 */ sensor_data = last_valid_sensor; /* 마지막 유효값 사용 */ } ``` ### 3. 에러 카운터 패턴 지속적 에러 발생 시 DTC(Diagnostic Trouble Code) 세팅: ```c if (status != RTE_E_OK) { error_count++; if (error_count >= ERROR_THRESHOLD) { Dem_SetEventStatus(DEM_EVENT_SENSOR_FAIL, DEM_EVENT_STATUS_FAILED); } } else { error_count = 0; Dem_SetEventStatus(DEM_EVENT_SENSOR_FAIL, DEM_EVENT_STATUS_PASSED); } ``` --- ## DET 후킹 개발 환경에서 DET 에러를 브레이크포인트로 잡으려면 `Det_ReportError`를 후킹한다. ```c /* Det_Cfg.c 또는 Det_Cfg.h */ #define DET_USE_EXTENDED_DEBUG STD_ON /* Det hook 함수 등록 */ void Det_UserReportError(uint16 ModuleId, uint8 InstanceId, uint8 ApiId, uint8 ErrorId) { /* 디버거 브레이크포인트 여기에 */ __asm("nop"); /* 브레이크포인트 설정 위치 */ } ``` 이렇게 하면 어느 모듈에서 DET가 발생했는지 콜스택으로 즉시 확인 가능하다.
MUST vs SHALL vs SHOULD — 스펙 용어 해석법
ComSignal에서 PduR까지 — 신호가 CAN 프레임이 되는 경로
// COMMENTS
Newest First
ON THIS PAGE
No content selected.