임베디드/STM32 (ARM Cortex - M4)

[STM32] FREERTOS를 사용한 쓰레드와 뮤텍스

O_oz 2024. 1. 26. 17:23
반응형

rtos를 활성화해서 쓰레드와 뮤텍스를 사용해보려고 한다

 

쓰레드

pin configuration -> Middleware -> FREERTOS에서 CMSIS_V2로 rtos를 활성화 하자

 

System Core -> SYS에 들어가보면 기본으로 사용하는 타이머가 SysTick인 것을 확인할 수 있다

해당 타이머는 우선 순위가 낮기 때문에 다른 타이머를 사용해야 한다

비활성화 된 타이머를 선택하자

 

다시 FREERTOS로 돌아와서 Newlib setting을 Enable 해주고

 

Tasks and Queues에서 쓰레드 함수 (= Tasks)를 추가해주자

 

저장을 하면 코드가 생성되는데, 이런 폴더와 코드들이 생성된다

 

main.c의 최하단을 보면 생성한 쓰레드 함수가 있는 것을 확인할 수 있다

쓰레드 함수를 생성하면 main()문은 사용할 수 없기 때문에, 기존에 작성했던 코드가 있다면 쓰레드 함수로 옮겨야 한다

 


 

뮤텍스

쓰레드와 비슷한 방식으로 뮤텍스를 생성한다

 

저장하면 뮤텍스 관련 코드들이 생성된다

extern osMutexId_t myMutex01Handle;

// 기존에 lock이 걸려 있으면 풀릴 때까지 기다린다
// control이 다른 task에 넘어가지 않도록 lock
if (osMutexWait(myMutex01Handle, 1000) == osOK)
{
    move_cursor(0, 0);
    lcd_string(lcd_buff);
    osMutexRelease(myMutex01Handle);
    // unlock control이 다른 task로 넘어 가도록 함
}

예시 코드지만, 공유하는 자원을 위와 같은 방법으로 자물쇠를 걸어 사용한다

반응형

'임베디드 > STM32 (ARM Cortex - M4)' 카테고리의 다른 글

[STM32] RTC  (1) 2023.10.22
[STM32] PWM DCMotor 제어  (0) 2023.10.22
[STM32] I2C LCD 출력  (1) 2023.10.22
[STM32] 초음파 측정기  (1) 2023.10.21
[STM32] DHT11 온 습도 측정기  (0) 2023.10.21