이슈 - Autosar OS Error E_OS_DISABLEDINT
커뮤니케이션 관련 Driver Init 작업중에 OS의 Error Hook이 발생하였다.
에러의 종류는 "E_OS_DISABEDINT"
이 에러가 무엇인지는 오토사 문서에 나와있는데
A Service of the OS is called insied an interrupt disable/enable pair.
해석하자면, OS의 Service Function은 OS System Timer 인터럽트가 Enable이 되어있는 상태에서 호출되어야 한다.
그런데 인터럽트를 disable 한 상태에서 OS Service를 호출하면 에러 훅이 발생하고 ,그 때의 에러타입이 E_OS_DISABLEDINT 이다.
이 에러가 발생한 연유를 알아보니..
오토사 모듈들은 각각 Exclusive Area라는 것이 있는데(없는 것도 있음)
모두 그런건 아니지만 Exclsuvie Area 를 구현하는 가장 기본적인 방법이 인터럽트를 Disable 하는 것이다.
(주로 DisableAllInterupts() 또는 SuspendAllInterrupts() 또는 SuspendOSInterrupts() 를 사용)
암튼 내가 사용하는 모듈에서
Exclusive Area로 진입하면서 Interrupt를 꺼 놓은 상태에서, OS 서비스를 호출하는 바람에 에러가 발생한 것이었다.
암튼 이런 OS Error가 발생한 경우, 어디서 Interrupt가 Disable 됐는지를 찾아보자.
그리고 Exclusive Area에서 Interrupt를 Disable하는 경우가 많으니 이것들을 한번 의심해보자.