반응형
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 |