본문 바로가기
카테고리 없음

[FreeRTOS] 임계구역 설정

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

taskENTER_CRITICAL(), taskEXIT_CRITICAL()

FreeRTOS에서 임계구역을 설정하여 자원 혹은 Task의 CPU 등이 선점되지 않게 하여 자원의 불일치 혹은 중단 없는 안전한 작업을 수행하는 방법이다.


※ 임계구역이란?

2024.05.21 - [소프트웨어 공학 용어 정리] - [SW 용어] 동기화(Synchronization), 임계 영역(Critical Section)

 

[SW 용어] 동기화(Synchronization), 임계 영역(Critical Section)

동기화(Synchronization)1. 동기화는 시스템을 동시에 작동시키기 위해 여러 사건들을 조화시키는 것을 의미한다.2. 병행성과 관련해서 공유되는 자원에 대한 이해와 공유자원 사용과 관련해서 생길

kfdd6630.tistory.com

 


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();
반응형

댓글