// [유형 1] 무한루프 함수
void Your_Task( void *pvParameters)
{
for(;;) {
/* USER CODE Is here */
// Call one of FreeRTOS's services:
vTaskDelay();
vTaskSuspend();
vTaskPrioritySet();
vTaskResume();
/* USER CODE is here */
}
// [유형 2] 실행 후 스스로를 삭제하는 함수
void YourTask(void *pvParameters)
{
/* USER CODE is here */
vTaskDelete(NULL);
}
● 무한루프 함수와 스스로를 삭제하는 형태의 함수가 가능 ● 태스크는 절대 리턴하면 안되므로 항상 'void' 로 리턴형을 사용 예) void userTask(void *pvParameters)
근데 좀 헷갈리실 만한 게 있어요. Task1 이건 함수명이죠. "Task1" 이것도 함수명이잖아요. 근데 "Task1" 은 이름의 성격이에요. 간단하게 description 할 수 있어요. 이 함수가 어떤 함수다라고 하는 것을 description 하게끔 하는 것입니다. 태그, 하나의 식별자를 넣는거에요. 이게Task1이라는 이름의 task다라고 하는 식으로.
FreeRTOS는 2003년 Richard Barry 가 만든 실시간 운영체제 35개 이상의 마이크로 컨트롤러에 이식됨 아마존에서 AWS IOT 엣지 서비스 확장을 위해 2017년 11월 인수 MIT License 용도 : 각종 장비 개발이 가능 공식 사이트 http://www.freertos.org (소스 다운로드 가능) MIT 라이센스에 따라 소스코드 공개 등의 조건없이 상업적인 목적에도 사용 가능
기존에 이름만 들어도 알만한 상업용 OS 회사들이 다 하위에 있습니다. 이것도 마이크로-C OS도 굉장히 유명한 OS인데 한참 밀렸네요. 그만큼 무료의 힘이 막강하네요.
근데 항상 이제 1위의 자리를 놓치지 않고 있는게 있는데, 바로 임베디드 리눅스죠. 임베디드 리눅스는 항상 10년 전에 조사한 것도 그렇고, 20년 전에 조사한 것도 그렇고, 항상 상위에 랭크됩니다.
그 다음에 윈드리버의 RTOS가 가장 유명한데 지금 점유율은 항상 이 정도입니다. 10년 전에 조사할 때도 한 5% 밖에 안 나왔어요. 별 차이 없죠.
이 FreeRTOS을 쓰는 이유를 꼭 이제 이게 좋아서만 쓴다고 볼 수는 없고요.
많은 부분이 로얄티가 없기 때문에 많은 사용자들 층을 가지고 있다 그것도 중요한 이유가 될 수 있다고 생각합니다.
FreeRTOS의 특징 (1)
● Portable 35개 이상의 마이크로컨트롤러에 이식.
커널 코드의 대부분이 이식 가능한 ANSI C를 기반
(일부 마이크로프로세서에 국한된 부분은 어셈블러로 코딩)
● ROMable 해당 C 컴파일러, 어셈블러, 링커, 로더가 필요,
설정이나 응용프로그램에 따라 메모리의 크기를 자유로이 결정할 수 있다.
● 커널 바이너리 이미지는 4K에서 9K 바이트 영역
● Preemptive Scheduling
높은 우선 순위 작업이 먼저 수행된다.
● Round Robin Support
● Real-Time 빠른 응답성을 갖는다.
● Multitasking 독자적 우선순위를 가지는 무제한으로 생성 가능한 태스크
Free RTOS의 특징입니다. Free RTOS는 기존에 상용OS를 가지고 있는 여러가지 특징을 그대로 다 가지고 있습니다. 그래서 35개 이상의 마이크로컴퓨터를 인식할 수 있고
롬화가능합니다. 롬의 사이즈에 최적화 시킬 수가 있습니다 kernel binary 기준으로 4k나 9k 정도로 작게 만들 수가 있어요!
선점 스케줄이 되구요. round robin도 지원되고 round robin은 그 서로 번갈아가면서 실행될 수 있는 것입니다. time quantum을 가지고 서로의 time quantum을 가지고 실행될 수 있는 걸 round robin이라고 합니다.
리얼타임 당연히 되구요, 멀티태스킹이 되구요.
또, 태스크를 이제 이론적으로 메모리만 문제없다면 무제한으로 만들 수 있다라고 하는게 장점이죠 .
뭐 이게 왜 장점이 되느냐고 할 수 있지만 기존에 마이크로 C-OS 와 비교하면 장점입니다.
예전에 MicroC-OS는 무제한으로 만드는 게 안됐거든요. 버전 2까지만 해도 이거는 유한한 태스크의 개수를 지원할 수 있었거든요 근데 Free RTOS는 무제한입니다.
FreeRTOS의 특징 (2)
● 임베디드 운영체제로써 대표적인 공개형 소스코드 기반 커널
● 신뢰성과 안정성을 가진다.
작은 사이즈 - 많은 시스템에 적용가능
작은 임베디드 시스템에 탑재 가능하며 임베디드 시스템 중에서도
강력한 네트워크가 필요한 곳과 높은 성능 시스템에 사용하는 것이 적합
● 프로젝트에 따른 소스 코드의 절약이 가능
● 스택오버플로우체크, 처리시간 체크, 후크(HOOK), Queue, Semaphore, 5가지 Heap memory 등의 시스템 서비스 제공
● 저전력 애플리케이션을위한 틱리스 (tickless) 모드 지원
● 효율적인 소프트웨어 타이머
● 인터럽트 관리 태스크의 수행을 일시 중지하거나 재개가 가능하다.
인터럽트 중첩
임베디드 운영체제로서 대표적인 공개형 소스코드 기반 커널 입니다.
프로젝트 소스 코드를 이제 최적화시켜 작게 만들 수 있고, 사용자가 원하는 스타일로 힙 메모리를 스타일링 할 수 있어요. 저전력 tickless 모드를 지원하고요. 효율적인 소프트웨어 타이머를 지원합니다. 마이크로C-OS에서는 없었는데, 소프트웨어 타이머도 지원해요. 그 다음에 인터넷 중첩도 시킬 수 있습니다.
FreeRTOS의 특징(3)
● 강력한 실행 추적 기능 ● 스택 오버플로 감지 옵션 ● 단점 디바이스 드라이버 부재 멀티코어 지원 안됨
다만 이제 디바이스 드라이버 없는 것은
FreeRTOS라서 없는 게 아니고
대부분의 RTOS가 디바이스 드라이버가 없습니다.
멀티코어 지원 안되는 점도 Free RTOS 만의 문제가 아닙니다. 많은 상용 RTOS도 마찬가지입니다.
근데 VxWorks 는, 디바이스 드라이버도 있고, 멀티코어 지원도 다 됩니다.
몇몇 OS들은 지원합니다만 손에 꼽을만한 열 손가락에 꼽을만한 OS 정도만 지원하고 대부분의 RTOS들은 디바이스 드라이버라고 하는게 아예 없습니다.
멀티코어도 지원하지 않구요
이런 두 가지를 구현하려면 기술력도 있어야 되고
애초에 OS가 설계될 때부터 이런 점을 고려해서 OS가 만들어졌어야 돼요. 근데 FreeRTOS는 처음부터, 디바이스 드라이브나 멀티코어 지원을 만들 생각 없이 만들었습니다. 그렇기 때문에 다른 OS들처럼 지원하지 않아요.