馃 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