STM32F407_FreeRTOS 기본 개념 정리

3 분 소요

STM32F407_FreeRTOS 기본 개념 정리

이번 포스팅은 본격적으로 FreeRTOS를 시작하기에 앞서 필수로 알아야하는 내용과 알면 좋은 내용과 같은

기본 개념을 정리하였습니다.

1. OS(Operating System)

1.1 OS(Operating System) 이란?

  • 컴퓨터 시스템을 구성하는 하드웨어(Hardware)와 응용프로그램(User-Application)의 중간에 위치하여 User가 보다 쉽고 간편하게 컴퓨터 시스템을 이용할 수 있도록 제어하고 관리하는 시스템 소프트웨어

image

1.2 OS(Operating System) 구분

  • 사용되는 분야에 따른 분류
    • RTOS : 주로 임베디드 분야
    • GPOS : 주로 범용 PC, 워크스테이션 등
    • Mobile OS : 휴대폰, 스마트워치 등의 휴대기기
  • 작업 과정에 따른 분류
    • Interactive(사용자<->운영체제 간 상호작용하는) (ex : 사용자가 조작할 수 있는 키보드, 마우스, 키패드 등을 사용)
    • Non-Interactive(사용자<->운영체제 간 상호작용하지 않는) (ex : 사용자가 조작하지 않고 자동으로 실행)
  • 기능에 따른 분류
    • 싱글 유저 – 단일 태스킹 OS (MS DOS)
    • 싱글 유저 – 멀티 태스킹 OS (Windows)
    • 멀티 유저 – 멀티 태스킹 OS (UNIX, Linux, Windows Server)
  • 데이터 처리방식에 따른 분류
    • 일괄 처리 시스템(Batch System) : 일정양, 일정기간 데이터를 모아서 한번에 처리
    • 실시간 처리 시스템(Read-Time System) : 데이터가 발생하는 즉시 처리
    • 시분할 처리 시스템(Time-Shared System) : CPU의 처리시간을 분할(slice)하여 하나의 처리장치(Processor)에서 다수의 Task를 시간적으로 균등하게 처리
    • 분산 처리 시스템(Distributed Processing System) : 지역적으로 분산된 컴퓨터들을 통신회선으로 연결하여 작업을 분담 처리

2. GPOS(General-Purpose Operating System)

2.1 Linux

  • 1991년 리누스 토발츠에 의해 시작
  • Open Source
  • UNIX 기반 커널이 아님 (따로 리눅스 커널이 존재)
  • 1994년 GNU Utils를 포함하는 커널 버전 1.0 발표
  • IBM, Google, Microsoft 등의 기업에서 리눅스 개발을 지원
  • PC, 워크스테이션, 서버, 모바일 등 다양한 곳에서 사용
  • Steam이 지원
  • 기술지원 비용은 무료가 아님
  • 다양한 프로세서에 이식(x86, ARM, MIPS 등)
  • 다양한 배포판이 존재(fedora, Ubuntu, Gento, slackware 등)
    • Linux에서는 위를 Root File System 으로 부르기도 한다.

2.2 임베디드 Linux

  • Open Source로 라이센스 비용이 없음
  • 다양한 프로세서에 이식
  • 용도와 크기에 맞게 변경 가능
  • 안정된 Linux 커널
  • Yocto, Linaro, OpenEmbedde,d Buildroot, openWrt, LTIB 등의 빌드시스템 사용 가능.

3. RTOS(Real-Time Operating System)

3.1 RTOS(Real-Time Operating System) 이란?

  • 주로 임베디드 시스템에서 사용되는 실시간 시스템을 위해 개발된 운영체제.
    • Real-Time : 한정된 자원의 환경에서 원하는(제한된) 시간 안에 작업 처리 완료 후 결과를 내야하는 시스템
    • Scheduler를 이용한 Multitasking을 지원
    • 선점형 스케줄링(Preemption Scheduling)
    • Task 우선순위(Priority)를 가짐

3.2 RTOS 목적 및 구분

  • Multitasking 환경에서 Task의 처리 시간을 일관되게 유지하기 위한(가장 급한 Task들 부터 처리) 용도로 사용함.
  • Hard Real-Time
    • 특정 작업을 일정 시간 안에 반드시 처리해야 하는 시스템 (ex : 군사장비, 의료장비, 위성장비, 비행기 등)
  • Soft Read-Time
    • 특정 작업에 대한 시간 제약이 있지만 그렇지 못하더라도 큰 영향이 없는 시스템 (ex : TV, 세탁기, 라우터 등)

3.3 RTOS 구현 방법

  • 시분할 시스템 하에서 우선순위 기반 스케줄링을 통해 우선순위가 높은 Task가 먼저 작업을 처리 할 수 있게 해야함.
  • 스케줄링(Scheduling) : 운영 체제의 동작 기법 중의 하나로 특정 방법에 따라 프로세서(Task)들에게 CPU에 자원 배정 하는 것.
  • 우선순위 기반(Priority Scheduling) : 현재 수행중인 Task보다 높은 Priority를 갖는 Event(ISR 호출 등)가 서비스를 요청 할 때, Task 전환(스케쥴링 작업)을 수행.

3.4 RTOS 종류

  • vxWorks
    • 미국 윈드리버에서 개발
    • 빠른 멀티태스킹
    • WindSh 쉘 지원
    • 파일 시스템 입출력 지원
    • 다양한 프로세서 지원 (ARM, IA-32, x86-64, MIPS, PowerPC 등)
  • FreeRTOS
    • 2003년 Richard Barry가 개발
    • Open Source
    • 2017년 아마존에 인수
    • 35개 이상의 마이크로 컨트롤러 지원(ARM, AVR, ColdFire, IA-32, PIC, MSP430 등)
  • mbed-OS
    • ARM에서 개발
    • Open Source
    • IoT Device를 위한 RTOS
    • ARM의 Cortex-M, Cortex-R만 지원

3.5 OS 비교

3.5.1 Non-OS vs RTOS

11

3.5.2 GPOS vs RTOS

12

3.6 RTOS에 쓰이는 기본적인 자료구조(참고)

  • Task를 사용하기 위한 2가지 자료 구조에 대한 이해 필요.

    3.6.1 Stack(스택)

  • 나중에 들어온 데이터가 먼저 나간다 (LIFO)
  • Push : Stack에 Data를 Input하는 행위(입력)
  • Pop : Stack의 Data를 Output하는 행위(출력)
  • Task에 관련된 정보를 저장하는데 쓰임.
  • Task 내의 User가 작성한 Code를 저장하는데 쓰임.

image

3.6.2 Queue(큐)

  • 먼저 들어온 데이터가 먼저 나간다 (FIFO)
  • Back position : 데이터가 Queue에 Input되는 위치(Enqueue 한다).
  • Front position : 데이터가 Queue에 Output되는 위치(Dequeue 한다).
  • Task 간 데이터를 주고 받는데 사용.(Message Queue)

image

3.7 RTOS 메모리 구조 기본

16

  • Memory(RAM)의 Task 영역은 Task의 실제 code 및 Local Variable가 저장 되어 있는 Stack과 Task의 state, SP, PC, Priority 정보가 있는 TCB(Task Control Block)으로 구성.
  • 기본적으로 Task내의 수행 작업이 Stack에 저장.
  • SP(Stack Pointer) : 최근에 쌓아 올린 스택 위치를 가리킴.
  • Scheduler는 특정 Event(ex: ISR 호출) 발생 시, Task state, Task Priority 에 따라서 CPU Registers의 Context를 Switching함.

3.8 CMSIS_RTOS API / FreeRTOS API(Native API)

  • FreeRTOS의 Native API를 바로 쓰는게 아닌 CMSIS_RTOS API를 사용
    • RTOS 또는 API 종류가 바뀌더라도 CMSIS_RTOS API의 코드내용만 바꾸면 되므로(User-Application Code를 안바꿔도됨) 호환성이 좋음.
  • ‘cmsis-os.c’ 파일에 구현되어 있음.
    • (Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS)
  • STM32CubeMX는 FreeRTOS 코드 생성 시, CMSIS_RTOS API를 이용함.
  • User는 어느 API를 이용해도 상관 없음.

image

3.8.1 FreeRTOS API 함수 관련 참고사항

  • FreeRTOS 함수/매크로 명명 규칙을 통해 각각에 대한 대략적 정보를 유추할 수 있다. image

3.8.2 FreeRTOS Clock Tick

  • 시분할 시스템을 구현하기 위한 RTOS 커널 내부의 기준 시간
    • 문맥전환(Context Switching) 여부를 주기적으로 판단하기 위해 Tick ISR 호출 Event를 통한 Kernel Scheduler 호출.
    • 시간관리 서비스 함수, 각 종류별 오브젝트 실행, Blocking 시간 관리 등에 이용.
    • 시스템 성능에 따라 1ms~10ms 주기 타이머 인터럽트로 구현
    • 타이머 인터럽투 주파수는 configTICK_RATE_HZ 매크로로 설정할 수 있다. image

3.8.3 CMSIS_RTOS V1 vs CMSIS_RTOS V2

(CMSIS_RTOS V1 vs CMSIS_RTOS V2)

그 외 추가로 공부한 기본적인 내용들은 지속적으로 Update할 예정이다.

댓글남기기