FreeRTOS

Jak zacząć? Jak skonigurować? Jak uruchomić?

Programowanie mikrokontrolerów 32 bitowych ARM nie jest dużo trudniejsze niż 8 bitowych AVR. To co zwykle odpycha na początku przygody z 32-bitowcami to konfiguracja środowiska.

Podobnie jest z systemami czasu rzeczywistego - ich obsługa nie jest przesadnie skomplikowana, natomiast największe trudności na początku sprawia uruchomienie systemu. Na tej stronie podpowiadam jak uruchomić pierwszy projekt z użyciem systemu operacyjnego używając środowiska Eclipse i popularnego kompilatora gcc (toolchain: arm-none-eabi).

Opis opiera się na projekcie z wykorzystaniem STM32F3, jednak FreeRTOS jest dostępny na wiele architektur i nic nie stoi na przeszkodzie by użyć innego mikroprocesora.

FreeFrtos tutorial
Widok na pliki projektu - kliknij by powiększyć

Warto pamiętać, że w odróżnieniu od PC-towych systemów operacyjnych FreeRTOS jest kompilowany razem z kodem. Do tematu najłatwiej podejść dodając RTOS do istniejącego szablonu/szkieletu programu. Zwykle sprawia to mniej problemów niż zaczynanie "od zera" i dokładanie do tego własnej aplikacji.

Aby start był jak najłatwiejszy warto zacząć od konfiguracji procesora z gotowego szablonu, a potem dodać pliki kernela (jądra systemu). Najszybszy sposób na stworzenie nowego, skonfigurowanego już projektu to utworzenie go za pomocą dodatku do Eclipse GNU ARM Eclipse Plug-ins. Dodatek ten można zainstalować wybierając w menu Help->Install New Software

FreeRTOS stm32 kurs
Dodatek GNU ARM Eclipse Plug-ins - kliknij by powiększyć

Świeżo utworzony projekt powienien wyglądać jak na screenie poniżej. Warto oczywiście sprawdzić czy na tym poziomie wszystko działa poprawnie i dodać podstawowe mimnum wykorzystywanych później funkcjonalności (konfiguracja portów, zegara, etc). Można odpalić debuger (polecam Open-OCD) i sprawdzić, czy jest możliwość wejścia do funkcji main lub zaimplemetować w kilku linijkach klasyczne miganie diody.

FreeRTOS queue
Pliki wchodzące w skład czystego projektu pod STM32 - kliknij by powiększyć

Teraz przyszedł czas na dodanie plików RTOSa. Ściągamy najnowszą wersję systemu (w chwili gdy powstaje ten poradnik jest to v8.2.1) i w eclipsowym projekcie tworzymy dwa katalogi - na pliki nagłówkowe i źródłowe. W pierwszym folderze umieszczamy całą zawartość katalogu FreeRTOS/Source/include. Dokładamy również portmacro.h z katalogu FreeRTOS/Source/portable/GCC/ARM_CM3 lub z innego który odpowiada aktualnie używanemu procesorowi. Opis zawartości plików można znaleźć w artykule FreeRTOS - opis plików.

Niezbędny będzie również plik FreeRTOSConfig.h który można skopiować z dowolnego przykładu dostarczanego z FreeRTOSem lub ze strony twórców. Plik ten zawiera konfigurację działania systemu. Mimo, że w większości przypadków jest ona podobno to warto dokładnie przeanalizować i ewentualnie zmienić istniejące tam wpisy. Zadeklarowanie w tym pliku zbyt małej wielkości stosu dla zadań to jeden z najczęściej popełnianych błędów.

Do naszego katalogu source wklejamy pliki źródłowe pochodzące z folderu FreeRTOS/Source i dodatkowo plik implementujący mechanizm zarządzania pamięcią (np heap_3.c) z folderu FreeRTOS/Source/portable/MemMang .

Jak skonfigurowac RTOS
Implementacja plików FreeRTOS we własnym projekcie - kliknij by powiększyć

W tym momencie wypadałoby poinformwać kompilator gdzie ma szukać odwołań do FreeRTOSA. W ustawieniach właściwości projektu wybieramy C/C++ General->Paths and Symbols, następnie w zakładce Includes podajemy lokalizacje plików nagłówkowych i analogicznie w zakładce Source Location plików źródłowych. Następnie przechodzimy do C/C++ Build->Settings->Cross ARM GNU C Compiler i w zakładce Includes dodajemy lokalizację plików źródłowych.

  • ktore pliki includowac FreeRTOS?
    Nagłówki FreeRTOS w ustawieniach kompilatora - kliknij by powiększyć
  • FreeRTOS w Eclipse
    Źródła FreeRTOS w ustawieniach kompilatora - kliknij by powiększyć

Musimy jeszcze powiadomić naszego RTOSa jakich funkcji z biblioteki CMSIS może używać jako handlerów przerwań :

Bez obaw możemy wstawić teraz odwołania do niezbędnych nagłówków w naszym pliku main. Ich lista znajduje się poniżej:

Na koniec zostaje tylko utworzyć taski i wystartować planiste:

Voila! - serce systemu bije, tzn. scheduler zgodnie z konfiguracją zawartą we FreeRTOSConfig.h przełącza zadania.

TAGS: DMA, FreeRTOS jak skonfigurować, RTOS smt32, FreeRTOS pliki, Unit testy