[STM32 / MBED] MBED RTOS
- HelloMaker
- 0
- 10,249
- 0
- 0
- 글주소
- 03-11
개요 : RTOS는 Real Time Operating System 의 약자로 실시간 운영체제를 뜻하며 쉽게 말하며 다중 프로그램을 동시동작 하는 것입니다. 실제로는 동시동작하지 않지만 소프트웨어적으로 마치 그런식으로 움직이도록 OS를 입히는 것입니다. MBED는 이 RTOS를 무료로 제공하고 있습니다. RTOS를 이용하면 여러가지 복합 소스를 체계적으로 관리 할 수 있기 때문에 복잡한 소스를 정리하기 위해 RTOS를 처음 사용하는 사람들은 신세계를 경험한다고 이야기 하곤 합니다.
예를 들어 리모콘으로 수신받는 소스, 디스플레이 출력 소스, 컴퓨터와의 통신소스, 모터제어 소스 등등 여러 소스가 하나의 while문에 혼합되게 되면 소스의 내부적인 딜레이가 생기게 되어 오작동을 일으키게 됩니다. 이때 정밀한 시간에 대한 동작을 요하는 경우에는 RTOS를 사용하면 서로의 소스가 딜레이적인 영향을 주지 않아 정상 작동 하게 됩니다.
RTOS 소스
#include "mbed.h" #include "rtos.h"
DigitalOut led1(LED1); DigitalOut led2(LED2);
void led2_thread(void const *args) { while (1) { led2 = !led2; Thread::wait(1000); } }
int main() { Thread thread(led2_thread); while (1) { led1 = !led1; Thread::wait(500); } } |
위의 소스를 보면 LED1은 1초(0.5초 두번)마다 깜빡이며, LED2는 2초(1초 두번)마다 깜빡입니다. 기본적으로 main문에 while은 하나의 Thread로 취급받으므로 추가로 생성된 Thread 1개를 포함하면 총 2개의 Thread가 있는 소스입니다.
둘은 전혀 서로의 대기(wait)에 영향 받지 않으며 자신의 순수 Thread 대기(Thread wait)에만 적용 받습니다. Thread 대기(Thread wait)와 그냥 대기(wait)의 차이점은 Thread 대기(Thread wait)는 대기 상태에 있을때 CPU를 사용하지 않지만 일반 대기(Wait)의 경우는 계산을 하기 위한 CPU를 사용하게 됩니다.
RTOS는 램을 사용하기 때문에 램이 적으면 Thread의 갯수가 한계가 있습니다. 만약 적은 램에 Thread 갯수가 많아지면 제대로된 동작을 하지 않을 수도 있습니다. Thread의 수는 사용하시면서 조절하시면 됩니다.