본문 바로가기
임베디드 관련/FreeRTOS

[FreeRTOS] 인터럽트 비활성화 및 활성화하는 방법

by minhyeok.lee 2024. 9. 10.
반응형

portDISABLE_INTERRUPTS(), portENABLE_INTERRUPTS()

FreeRTOS에서 인터럽트에 의해 선점되면 안되는 중요한 로직을 실행하는 함수를 보호하는 방법이 있다.


portDISABLE_INTERRUPTS()

기능

1. 이 매크로는 전역적으로 시스템 전체에 모든 인터럽트를 비활성화한다.

2. 시스템의 모든 마스킹 가능한 인터럽트를 비활성화한다.

3. 이 함수를 호출하면 즉시 모든 인터럽트가 비활성화되어, 인터럽트 서비스 루틴(ISR)이 실행되지 않도록 한다.

 

주의 사항

1. 모든 인터럽트를 비활성화하기 때문에, 시스템의 다른 기능들이 일시적으로 중단될 수 있다.

2. 다른 인터럽트 기반 기능(예: 타이머, 통신 등)이 영향을 받을 수 있다.

3. 인터럽트를 오랫동안 비활성화하면 시스템 응답성이 저하될 수 있다.

 

 

결론

1. 이 매크로가 호출된 후에는 어떤 인터럽트도 발생하지 않으며, 인터럽트 핸들러가 실행되지 않는다.

2. 중요한 코드나 자원 접근을 할 때 인터럽트가 발생하지 않도록 하여 코드의 실행이 중단되지 않도록 한다.


portENABLE_INTERRUPTS()

기능

1. portDISABLE_INTERRUPTS()로 비활성화한 인터럽트를 재활성화할 때 사용한다.

2. 중요한 코드 실행이 완료된 후, 다시 시스템이 정상적으로 동작할 수 있도록 인터럽트를 재활성화한다.


사용예제

portDISABLE_INTERRUPTS();

// 인터럽트에 의해 중단되면 안 되는 중요한 코드 실행부

portENABLE_INTERRUPTS();
반응형

댓글