
CubeMX의 MAX_PRIORITEIS 설정을 통해 사용할 Task 우선순위의 범위를 설정할 수 있다.

BaseType_t xTaskCreate( TaskFunction_t pvTaskCode,
const char * const pcName,
unsigned short usStackDepth,
void *pvParameters,
UBaseType_t uxPriority,
TaskHandle_t *pxCreatedTask );
#include “FreeRTOS.h”
#include “task.h”
void vTaskDelete( TaskHandle_t pxTask );
#include “FreeRTOS.h”
#include “task.h”
void vTaskPrioritySet( TaskHandle_t pxTask, UBaseType_t uxNewPriority );
#include “FreeRTOS.h”
#include “task.h”
void vTaskSuspend( TaskHandle_t pxTaskToSuspend );
#include “FreeRTOS.h”
#include “task.h”
void vTaskResume( TaskHandle_t pxTaskToResume );
#include “FreeRTOS.h”
#include “task.h”
void vTaskDelay( TickType_t xTicksToDelay );
FreeRTOSConfig_base.h의 configTICK_RATE_HZ 로 설정한다.Context Switch가 발생한다.#include “FreeRTOS.h”
#include “task.h”
void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, TickType_t xTimeIncrement );
임계 영역 보호를 위한 상호 배제 구현 방법
(1) 공유 변수 사용 X
(2) 세마포어 or 뮤텍스 사용 <---------- 가장 추천되고, 안전한 방식. 그러나 남발하면 코드가 늘어나니, 성능 저하 유발
(3) 임계영역에서 인터럽트 일시 중지 -> Tick Interrupt 발생 x -> 스케줄링(Preemptino) 발생 x
(4) 공유 변수 사용 O 더라도, Task 1개가 특정 변수 or I/O 장치를 독점적으로 사용하게한다.
//임계영역 시작
taskENTER_CRITICAL();
//...임계영역
taskEXIT_CRITICAL();
//임계영역 끝
taskENTER_CRITICAL() 와 taskEXIT_CRITICAL() 사이에서 인터럽트가 일시 중지됨
기존에 실행되던 Task의 레지스터 값을 모두 Stack에 저장 -> 새로운 Task의 Stack에 저장된 레지스터 값을 CPU로 로드 -> 새로운 Task가 실행됨