AUTOSAR 오류 처리는 AUTOSAR Classic Platform의 BSW(Basic Software) 모듈이 오류를 유형에 따라 나눠 감지하고 보고하는 방식이다. AUTOSAR R25-11의 BSW 일반 명세는 BSW 모듈이 감지하거나 보고할 수 있는 모든 오류를 development error, runtime error, production error, extended production error로 나누고, 각 오류는 모듈의 SWS(Software Specification) 7장에 정한다.[1]

오류 유형

  • Development error: 주로 소프트웨어 개발 중에 생기는 버그로, 초기화하지 않은 소프트웨어를 쓰려는 것이 전형적인 예다. Det_ReportError로 Det(Default Error Tracer)에 보고하며, assertion처럼 동작해 ECU 전체를 멈추거나 리셋해 정상 실행 흐름을 끊는다.
  • Runtime error: ECU가 도는 동안 소프트웨어나 하드웨어 문제로 생기는 오류로, 메모리 스택의 큐 넘침, 잘못된 때의 API(Application Programming Interface) 호출, 입자 방사로 CAN 컨트롤러의 제어 레지스터 비트가 뒤집히는 일이 예다. 원인이 사라지면 나을 수도 있다. Det_ReportRuntimeError로 Det에 보고하지만 assertion을 일으키지 않아 실행이 이어지고, 대신 대응하는 오류 처리기가 돈다.
  • Production error: 노화, 열화, 하드웨어의 완전한 고장, 나쁜 생산 품질, 잘못된 조립 같은 하드웨어 문제로 생기는 오류다. 배출가스를 늘려 법규상 감지해야 하거나, 다른 OBD(On-Board Diagnostics) 관련 진단 monitor의 능력을 제한하거나, limp-home 대응을 요구하거나, 정비소가 고장 부품을 찾게 해야 하는 경우가 여기에 든다. Dem에 보고하며, monitor가 fail이면 대개 primary event memory에 항목이 생기고 pass면 그 항목이 취소될 수 있다.
  • Extended production error: production error처럼 하드웨어 문제나 환경의 이상을 나타내지만, production error의 기준에 들지 않거나 이미 정의된 production error와 근본 원인이 같은 오류다. production error의 실제 원인을 더 알아내는 데 쓴다. Dem에 보고하되, fail 상태가 곧바로 primary event memory의 항목이 되어서는 안 된다.[1]

Development error의 감지와 보고는 설정 스위치 <Ma>DevErrorDetect를 켰을 때만 하고, 이 스위치의 기본값은 꺼짐이다. 스위치를 켜면 API 매개변수 검사도 켜진다. Runtime error는 development error와 달리 설정으로 끌 수 없다. Production error와 extended production error의 감지도 모듈의 SWS가 활성 조건을 따로 정하지 않는 한 끌 수 없다.[1]

BSW 모듈은 설정된 production error와 extended production error를 Dem의 Dem_SetEventStatus로 보고한다. 오류가 일어났으면 DEM_EVENT_STATUS_FAILED를, 오류가 없음을 확인했으면 DEM_EVENT_STATUS_PASSED를 넘기고, 판정에 debouncing이 더 필요하면 DEM_EVENT_STATUS_PREFAILED나 DEM_EVENT_STATUS_PREPASSED를 넘긴다. 검사할 수 없으면 아무 결과도 보고하지 않는다.[1]

보고 경로

오류를 알리는 길은 다섯이다.[2]

길쓰임
API호출자에게 동작의 성공이나 실패를 알린다
정적으로 정할 수 있는 callback 함수(notification)호출자에게 실패를 알린다
Det의 중앙 error hook개발 중에 오류를 기록하고 추적한다
Det의 중앙 callout제품 수명 동안 오류를 처리한다
Dem의 중앙 오류 함수양산 코드에서 오류에 대응하고 기록한다

API로 알릴 때 기본 반환형은 성공을 뜻하는 E_OK(값 0)와 실패를 뜻하는 E_NOT_OK(값 1)다. 양산 코드에서 오류를 서로 구분해야 하면 따로 반환형을 정하되, 호출자가 실제로 그 오류를 다룰 수 있을 때만 쓴다. Development error는 API로 돌려주지 않으며, Det에 보고할 수 있다. Det의 callout에서 Integration Code는 development error 때 ECU가 리셋되기 전에 준비를 할 수 있고, runtime error 때 보고를 더 할 수 있다.[2] Callout은 AUTOSAR 계층 구조에서 다룬다.

Det

Det(Default Error Tracer)는 BSW에서 감지한 모든 development error와 runtime error를 보고받는 모듈이다. API 매개변수로 오류를 감지한 모듈, 함수, 오류의 종류를 추적할 수 있다. API 뒤의 기능은 Det 명세의 범위 밖이어서, 디버거 중단점 걸기, 보고된 오류 세기, RAM(Random-Access Memory) 버퍼에 호출과 매개변수 기록하기, 통신 인터페이스로 외부 로거에 보내기 같은 전략을 개발자와 통합자가 고른다.[3]

Det_ReportError는 인자 넷을 받는다.[3]

인자타입뜻
ModuleIduint16호출한 모듈의 모듈 ID(identifier)
InstanceIduint8인덱스로 구분하는 모듈 인스턴스의 식별자. 0부터 매기고, 인스턴스가 하나뿐인 모듈은 0을 넘긴다
ApiIduint8오류를 감지한 API 서비스의 ID. 호출한 모듈의 SWS가 정한다
ErrorIduint8감지한 development error의 ID. 호출한 모듈의 SWS가 정한다

Det_ReportRuntimeError도 같은 꼴의 인자를 받되 ErrorId는 감지한 runtime error의 ID이고, 설정된 callout이 있으면 그것을 부르며, 늘 E_OK를 돌려준다. 두 보고 함수는 재진입할 수 있고, 설정된 error hook을 모두 곧바로 부른다. Det_ReportError는 실행을 멈춘다.[3]

Runtime error가 일어나면 대응하는 오류 처리기가 돌고, 통합자는 이 처리기를 Det 안의 callout으로 구현할 수 있다. 이 처리기는 오류 이벤트를 메모리에 저장하거나, Dem을 부르거나, 짧고 합당한 동작만 한다. 이 callout의 함수 이름은 Det의 설정 파라미터 DetReportRuntimeErrorCallout으로 정한다.[1]

[1]
“General Specification of Basic Software Modules (AUTOSAR CP R25-11),” AUTOSAR, 2025. Accessed: Sep. 30, 2026. [Online]. Available: https://www.autosar.org/fileadmin/standards/R25-11/CP/AUTOSAR_CP_SWS_BSWGeneral.pdf
[2]
“Layered Software Architecture (AUTOSAR CP R25-11),” AUTOSAR, 2025. Accessed: Sep. 30, 2026. [Online]. Available: https://www.autosar.org/fileadmin/standards/R25-11/CP/AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf
[3]
“Specification of Default Error Tracer (AUTOSAR CP R25-11),” AUTOSAR, 2025. Accessed: Oct. 07, 2026. [Online]. Available: https://www.autosar.org/fileadmin/standards/R25-11/CP/AUTOSAR_CP_SWS_DefaultErrorTracer.pdf