[STM32 / MBED] MBED RTOS

ARMmbedLogo2-1170x316.png

개요 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의 수는 사용하시면서 조절하시면 됩니다.
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
118 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 17,727
117 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 14,331
116 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 14,301
115 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 19,490
114 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 14,534
113 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 14,445
112 아두이노 Learn ESP32 icon 양재동메이커 06-25 14,182
111 라즈베리 파이 라즈베리 파이 (Raspberry Pi) 기초 icon 양재동메이커 06-19 15,610
110 라즈베리 파이 (동영상 강의) 라즈베리 파이 강좌 Link icon 양재동메이커 06-17 14,618
109 STM32 / MBED [MED] Switch debouncing icon HellMaker 12-30 16,757
108 기타 [타이젠] 아두이노의 16x2 LCD Display라이브러리 LiquidCrystal_I2C의 타이젠 포팅 icon 양재동메이커 09-15 16,506
107 기타 [타이젠] GPIO의 디지탈 출력과 입력 인터럽트의 C++ Class 제작 icon 양재동메이커 09-12 15,815
106 마이크로비트 서보 모터 icon HellMaker 09-03 15,571
105 마이크로비트 아날로그 온도센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 16,200
104 마이크로비트 터치센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 15,096
103 마이크로비트 디지털 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 14,353
102 마이크로비트 리니어 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 13,741
101 마이크로비트 불꽃 감지 센서 (마이크로 비트 센서 활용) icon HellMaker 08-26 14,104
100 마이크로비트 로터리 엔코더 (마이크로 비트 센서 활용) icon HellMaker 08-25 14,336
99 마이크로비트 2컬러 LED(3mm) (센서 활용) icon HellMaker 08-22 14,252