taskENTER_CRITICAL(), taskEXIT_CRITICAL()
FreeRTOS에서 임계구역을 설정하여 자원 혹은 Task의 CPU 등이 선점되지 않게 하여 자원의 불일치 혹은 중단 없는 안전한 작업을 수행하는 방법이다.
※ 임계구역이란?
2024.05.21 - [소프트웨어 공학 용어 정리] - [SW 용어] 동기화(Synchronization), 임계 영역(Critical Section)
taskENTER_CRITICAL()
기능
1. FreeRTOS의 임계 구역(Critical Section)을 시작한다.
2. 임계 구역에 진입하여 현재 태스크가 인터럽트에 의해 중단되지 않도록 한다.
3. 임계 구역에 들어가면 모든 인터럽트를 비활성화하여 태스크 간의 중단 없이 안전하게 중요한 작업을 수행할 수 있다.
용도
1. 이 함수를 호출하면 FreeRTOS는 특정 우선순위 이하의 인터럽트를 비활성화한다.
2. 멀티태스킹 환경에서 공유 자원에 접근하거나 중요한 연산을 수행할 때, 다른 태스크나 인터럽트에 의해 중단되지 않도록 보호한다.
영향 범위
1. 해당 임계 구역 내에서 태스크 전환이 발생하지 않는다.
2. 일부 인터럽트는 여전히 발생할 수 있다.(우선순위에 따라 다름)
3. 중첩 가능성: 이 함수는 중첩될 수 있으며, 각 호출마다 반드시 대응하는 taskEXIT_CRITICAL()이 있어야 한다.
taskEXIT_CRITICAL()
기능
1. taskENTER_CRITICAL()로 설정한 임계 구역을 종료하고, 비활성화된 인터럽트를 다시 활성화한다.
2. 임계 구역에서 나와 이전에 비활성화했던 인터럽트를 다시 활성화한다.
용도
1. 임계 구역에서의 작업이 끝나면 다시 인터럽트를 활성화하여 시스템이 정상적으로 인터럽트를 처리할 수 있도록 한다.
2. taskENTER_CRITICAL()과 쌍을 이뤄 사용하고 임계 구역 이전 상태로 복원된다.
사용예제
taskENTER_CRITICAL();
// 임계 구역 내에서 중요한 코드 실행부
taskEXIT_CRITICAL();
댓글