
Mbed OS는 ARM에서 제공하는 오픈소스 embedded OS(Operating System)이다.
embedded에서 mbed라는 단어가 나왔다는 말도 있다.
Mbed OS는 CMSIS(Cortex Microcontroller Software Interface Standard)기반으로 작성되어 다양한 Hardware환경에서도 Cortex M proccessor라면 동일한 function을 사용할 수 있다.
즉, ARM Cortex M proccessor를 사용한다면 동일한 함수로 제어할 수 있다.
또한, 웹 환경에서 Mbed Compiler를 제공하기 때문에 다양한 OS환경에서 컴파일하고 다운로드 할 수 있다.
내부에 TLS/DTLS를 포함하기 때문에 통신에 보안을 제공해준다.
RTOS(Real Time Operating System)이기때문에 멀티 태스킹, 정확히 하자면 Mbed OS에서는 멀티 쓰레드를 지원한다.
Mbed OS는 C++로 구성되어 있어 FreeRTOS보다 쓰기는 편하다.
#실제로 사용했을 땐?
C코드 기반의 FreeRTOS보다 진짜로 쓰기 편했을까?
일단 내가 사용한 하드웨어는 STM32보드에 Cortex M 을 장착하여 사용했다.
커스텀 보드이기 때문에 기본적으로 Mbed에서 제공하는 다운로드가 안되었다.
그래서 우리 STM32보드의 필수품, ST-Link를 사용하여 다운로드 하였다.

즉, 원터치 다운로드는 나에게 체감이 되지 않았다.
이렇게 수동으로 파일을 넣어야하니 웹에서 작업하기보다는 local환경에서 하는게 더 빠르고 편했다.
그래서 Web을 이용한 간편한 compile 환경도 저 멀리.
이런 자잘한 사항을 제외해도 MBed OS에 대한 내 평가는 그리 좋지 않다.
일단 개인적으로 발생했었던 문제임을 알려둔다.
이 문제가 Mbed OS 관련 문제가 아닐수도 있다.
C++로 되어 있어서 클래스기반의 객체지향(이라고 하고 like C 가 된다)으로 짤 수 있다는 건 좋다.
원래 나는 Linux기반의 C++프로그램 개발자로 시작했으니 말이다.
와! STL이랑 동적할당이랑 마구마구 써야지~!
라며 시작했는데, Vector를 제외한 STL에서 제공하는 Heap, Stack, list 등을 사용하면 Hard Fault가 발생했다.
분명 인터넷에 검색해보면 STL을 잘 사용할 수 있다고 하는데, 나는 아니였다.
그래서 거의 모든 container는 vector를 사용하였다.
동적할당은 우리 하드웨어 메모리를 많이 주지않아 스펙상 한계로 제한적으로 사용하였다.
또, Thread에서 우선순위가 높으면 바로 뻗었다.
예상으론 우선순위가 낮은 Thread가 병목현상이 생겨 죽는걸로 예상했다.
결국 Thread들을 Below normal로 설정한 후에야 Fault가 사라졌다.
상기한 문제 이외에도 메모리 관련 오류로 Hard Fault가 끊임없이 발생하여 Mbed OS의 어플리케이션은 별로 만들고 싶지 않다.