그라운드 임베디드 EN 유튜브 구독

로드맵

펌웨어 · 과목 13

RTOS

할 일이 많아지면 무한 루프 하나로는 감당이 안 됩니다. 실시간 운영체제가 그 답입니다.

목표: 여러 작업을 태스크로 나누고 동기화 문제 없이 돌릴 수 있다.

  • 중급난이도
  • 약 4주하루 1시간 기준
  • 8개주제
  • 4개실험실

먼저 볼 과목 MCU 펌웨어자료구조와 알고리즘

다음 과목 임베디드 리눅스

지도에서 보기 →
  1. 슈퍼루프의 한계

    무한 루프 하나로 모든 일을 할 때 생기는 지연과 복잡도.

  2. 태스크와 스케줄러

    작업을 태스크로 나누고, 스케줄러가 시간을 나눠 주는 방식.

    GROUND EMBEDDED · 실험실RTOS 누가 지금CPU를 쓰는가 1volatile uint32_t *ODR 2 = (uint32_t*)0x40020014; 3*ODR |= (1u << 5); 4while (1) { 5 if (flag) toggle(); 6}3D 실험실
  3. 우선순위와 선점

    급한 태스크가 덜 급한 태스크를 밀어내는 선점형 스케줄링.

    GROUND EMBEDDED · 실험실RTOS 누가 지금CPU를 쓰는가 1volatile uint32_t *ODR 2 = (uint32_t*)0x40020014; 3*ODR |= (1u << 5); 4while (1) { 5 if (flag) toggle(); 6}3D 실험실
  4. 세마포어와 뮤텍스

    공유 자원을 동시에 건드리지 않게 막는 장치.

    GROUND EMBEDDED · 실험실RTOS 누가 지금CPU를 쓰는가 1volatile uint32_t *ODR 2 = (uint32_t*)0x40020014; 3*ODR |= (1u << 5); 4while (1) { 5 if (flag) toggle(); 6}3D 실험실
  5. 큐와 이벤트 그룹

    태스크끼리 데이터와 신호를 안전하게 주고받는 방법.

  6. 우선순위 역전

    낮은 태스크가 높은 태스크를 막는 현상과 우선순위 상속.

    GROUND EMBEDDED · 실험실RTOS 누가 지금CPU를 쓰는가 1volatile uint32_t *ODR 2 = (uint32_t*)0x40020014; 3*ODR |= (1u << 5); 4while (1) { 5 if (flag) toggle(); 6}3D 실험실
  7. 메모리와 스택 관리

    태스크마다 스택 크기를 정하고 넘침을 감지하는 방법.

  8. FreeRTOS 실습

    STM32에서 FreeRTOS로 센서 읽기, 통신, 제어를 태스크로 나눕니다.

확인 과제

세 태스크로 나눈 센서 로거 만들기

센서 읽기, 통신, LED 표시를 태스크로 나누고 큐와 뮤텍스로 연결합니다.

세 가지에 모두 체크할 수 있으면 다음 과목으로 넘어가도 됩니다. 체크는 이 브라우저에만 저장됩니다.