🤖 ESP32 STEP 3. freeRTOS

:robot: ESP32 STEP 3. freeRTOS

Wprowadzenie

FreeRTOS to systemem operacyjnym czasu rzeczywistego (ang. real time operating system) dla mikrokontrolerów takich jak ESP32.
Istotną cechą FreeRTOS jest wielozadaniowość , tzn. możliwość wykonywania wielu zadań w tym samym czasie. Polega to na przydzielaniu zadań do rdzeni procesora i przełączanie się pomiędzy kolejnymi zadaniami tak szybko, że mamy wrażenie jakby zadania wykonywały się równocześnie.

W środowisku espressif IDF freeRTOS jest standardem, warto się z nim zapoznać przed rozpoczęciem skomplikowanego projektu w którym wielozadaniowość osiągana dzięki freeRTOS jest bardzo cenna.

Żeby wyjaśnić wielozadaniowość pokaże przykład kodu Arduino:

void loop() {
  printf("In Super Loop...\n");
  delay(1000);                // czekamy sekunę
  printf("In Super Loop...\n");
  delay(1000);                // czekamy sekunę
  printf("In Super Loop...\n");
  delay(1000);                // czekamy sekunę
}

taki kod jak powyżej będzie wykonywał się w pętli 3 sekundy. podczas delay urządzenie będzie całkowicie niedostępne. Taki przykładowydelay to oczwiście może być kod którego wykonanie trwa, np. połączenie wifi, mqtt czy czytanie wartości czujnika z GPIO.

A teraz podobny kod w IDF kożystający z wielozadaniowości freeRTOS:

void task1(void *arg){
    while (1){
        printf("In task1 Loop...\n");
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}
void task2(void *arg){
    while (1){
        printf("In task2 Loop...\n");
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}
void task3(void *arg){
    while (1){
        printf("In task3 Loop...\n");
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

void app_main(void)
{
    vTaskDelay(2000 / portTICK_PERIOD_MS);
    printf("Hello freeRTOS world!\n");

    xTaskCreate( task1, "task1", 4096,  NULL,  10, NULL);
    xTaskCreate( task2, "task2", 4096,  NULL,  10, NULL);
    xTaskCreate( task3, "task3", 4096,  NULL,  10, NULL);
}

w tym kodzie tworzymy 3 zadania które w trzech niskończonych pętlach wykonują swoje zadania (logują tekst na wyjściu i czekają 1 sekundę). Istotne jest to, że dzięki freeRTOS zadania są wykonywane jednocześnie - podczas gdy w jednej pętli mamy vTaskDelay wykonywany jest kod z kolejnej pętli itd…
Łatwo wyobrazić sobie sytuacje w której jedno zadanie to utrzymanie połączenia wifi, drugie to pobierania danych z czujnika a trzecie to raportowanie po mqtt do systemu typu HA.

Kod

Ten przykładowy kod dostępny jest w reposytorium w katalogu step3-freertos:

jak zwykle nie trzeba nic instalować tylko wystarczy otworzyć projekt w kontenerze, tak samo jak to zostało opisane w step1 i step2:

Zakończenie

Systemy operacyjne działające na mikrokontrolerach są szeroko stosowane w każdej branży. Urządzenia z których kożystamy na codzień, takie jak: drukarka, zmywarka czy pralka także działa w oparciu o mini system operacyjny. Wraz z rozwojem IoT takich urządzeń przybywa coraz więcej, a FreeRTOS jest jednym wiodących rozwiązań.

Amazon przejeło FreeRTOS w 2017:

2 polubienia