반응형
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();
반응형
'임베디드 관련 > FreeRTOS' 카테고리의 다른 글
[FreeRTOS] ISR 내에서 임계구역 설정 (0) | 2024.09.13 |
---|---|
[FreeRTOS] Task 전환 제어 (0) | 2024.09.11 |
[FreeRTOS] Critical Section(임계 영역), 공유자원 보호하기 (0) | 2024.06.10 |
[FreeRTOS] Task의 Stack 최적의 사이즈 설정 (0) | 2024.05.30 |
[FreeRTOS] Task의 우선순위와 선점 (0) | 2024.05.18 |
댓글