Embedded RTOS - narzędzia i wsparcie społeczności
March 27, 2024

Jeżeli korzystasz z jakiegoś systemu RTOS na co dzień, to naturalne, że stanowi on Twoją pierwszą opcję przy podejmowaniu nowego projektu. Jednak jeśli dopiero zaczynasz lub myślisz o wypróbowaniu czegoś nowego, warto zwrócić uwagę na wsparcie społeczności oraz dostępne narzędzia. Uważamy, że kluczowe przy wyborze RTOSa do współpracy nad projektem są właśnie te dwa aspekty: narzędzia oraz wsparcie, jakie oferują społeczność i producent. Poniżej przedstawiamy przegląd tych elementów w różnych systemach.

RTOS narzędzia

Przy wyborze RTOS-a warto zwrócić uwagę na narzędzia do trackingu. Pozwalają one dobrze przyjrzeć się, co dokładnie dzieje się w naszej aplikacji – możemy łatwo sprawdzić, czy taski wykonały się w takiej kolejności jak chcieliśmy, albo czy zgadzają się czasy wykonania lub okresowość naszych tasków. Przyjrzyjmy się zatem co jest dostępne wśród naszych RTOSów.

embOS - SystemView

Segger wraz ze swoim RTOS-em dostarcza dedykowane narzędzie czyli SystemView. Z racji że oba pochodzą od producenta to integracja nie jest skomplikowana.
W skrócie należy:
+ dodać do aplikacji pliki nagłówkowe SystemView,
+ zaznaczyć w konfiguracji szczegóły platformy docelowej,
+ podać źródło taktowania i rozpocząć tracing.

Dane zapisywane do struktury podanej przy inicjalizacji, więc po wykonaniu programu należy je stamtąd pobrać i zapisać w formacie .SVDat. Całość jest przejrzyście opisana w dokumentacji do SystemView: https://www.segger.com/doc/UM08027_SystemView.html#SystemView_on_the_target

SystemView w swojej okazałości

GUI prezentuje się przejrzyście i czytelnie i pozwala na zdobycie informacji:

  1. Oś czasu - zawiera eventy typu wywłaszczenie tasku, przerwanie czy zwolnienie semafora;
  2. Wizualizacja – najważniejsza część narzędzia; pokazuje w przystępny sposób wszystko opisane na osi wyżej;
  3. Informacje – podstawowe informacje dotyczące systemu i aplikacji;
  4. Zużycie CPU – pokazuje graficznie zajęcie czasu pracy przez każdy z tasków;
  5. Statystyki – informacje na temat każdego taska z osobna.

FreeRTOS – SystemView

FreeRTOS nie dostarcza własnego narzędzia do tracingu. Mimo to można zintegrować go z opisanym już SystemView. Jest to możliwe dzięki dedykowanemu patchowi od Seggera: https://wiki.segger.com/FreeRTOS_with_SystemView
Należy sprawdzić czy wersja patcha zgadza się z wersją używanego FreeRTOSa. Sam sposób integracji zależy od użytego IDE. Poza tym, pozostałe kroki do uzyskania pliku z danymi do wykorzystania w SystemView są analogiczne do tych przy embOSie.

Zephyr - SystemView

Z Zephyrem sytuacja wygląda podobnie jak z FreeRTOSem - do aplikacji można dodać obsługę SystemView. Dokumentacja opisuje sposób włączenia tej opcji poprzez edycję pliku konfiguracyjnego ale nie wspomina, że przydatna jest też opcja CONFIG_TRACING_BACKEND_RAM=y. Opis analizy typu post-mortem jest dosyć skąpy a jeżeli chcemy oglądać przebiegi w czasie rzeczywistym to potrzebny jest J-Link.

ThreadX – TraceX

Microsoft, podobnie jak Segger, dostarcza własne narzędzie do tracingu. TraceX jest modułem ThreadX, więc z racji że sam RTOS jest mocno modularny, nie wymaga osobnej integracji. Aby włączyć tworzenie bufora do tracingu, należy włączyć te funkcjonalność w pliku konfiguracyjnym i podać źródło taktowania (np. DWT dla Cortex-M4). Dokładne instrukcje zawarte są w dokumentacji: https://learn.microsoft.com/en-us/azure/rtos/tracex/chapter5
Podobnie jak w przypadku SystemView, dane zapisywane są w odpowiedniej strukturze, zaś po ich eksporcie należy je zapisać w formacie .trx.

TraceX od Microsoftu

GUI można pobrać ze strony Microsoftu i oferuje ono podobne informacje jak SystemView:

  1. Wizualizacja – niestety w przeciwieństwie do SystemView, osi nie można w łatwy sposób przesuwać, powiększać i pomniejszać; poza tym rozmiar każdego elementu w osi Y nie jest proporcjonalny do czasu jaki zajęło jego wykonanie;
  2. Informacje o tasku;
  3. Zużycie CPU;
  4. Zużycie stosu;
  5. Statystyki.

RTOS wsparcie społeczności

FreeRTOS

Główne forum społeczności: https://forums.freertos.org/
Organizacja forum

5 kategorii na forum (Announcements / Kernel / Libaries / Partners / CommunityMedia).
Aktywność na forum
Ponad 70 zapytań w wyżej wymienionych kategoriach i ponad 400 odpowiedzi  w zeszłym miesiącu (stan z 03.2024).
Na forum znajdują się tysiące wątków dotyczących jądra FreeRTOS (10,494 wątki) i setki odnośnie bibliotek (767 wątków).
Inne
Ksiązki o FreeRTOS, takie jak:
+ Building real-time embedded systems using FreeRTOS;
+ FreeRTOS - A practical approach with Arduino;
+ Beginning STM32: Developing with FreeRTOS, libopencm3 and GCC;

Zephyr

Główne forum społeczności (platforma discord): https://discord.com/invite/Ck7jw53nU2
Organizacja forum
Podział na kategorie i kanały w ramach tych kategorii.
Forum zawiera 12 kategorii (m.in. Zephyr / Architektura / Subsystems / Tooling/Bluetooth / Vendors / Third-party) w ramach których znajdziemy ponad 150 kanałów do rozmów. Przykładowa lista kanałów dla kategorii Bluetooth: ble / ble-audio / ble-mesh / ble-llcp / hci / qualification.
Aktywność na forum
Ponad 1000 wiadomości w zeszłym miesiącu (stan z 03.2024).
Inne
Kanał na YT: The Zephyr Project (136 filmów).

ThreadX

Tu mamy problem. Z racji migracji ThreadX spod skrzydeł Microsoftu do Eclipse Foundation - stare forum na stronie Microsoftu zamarło. Nowe jeszcze nie istnieje. Jest obecnie możliwość zapisania się na listę mailową dla developerów (221 subskrybentów na dzień 15.04.2024). Pozostaje nam obecnie forum producentów mikrokontrolerów, gdzie znaleźć możemy wątki dotyczące ThreadX.

embOS

Forum Seggera: https://forum.segger.com/index.php/Board/11-embOS-related/?s=bcc1df586c32666977bf3af2415937f7a065edb0 
Jeden wątek w tym roku. Kilkanaście w 2022.
Segger stawia na Wiki: https://wiki.segger.com/embOS

Baza wiedzy zawierająca kilkanaście artykułów z obszarów: General / Architekture & IDE / embOS project configuration / third-party support.

Naszym zdaniem Segger postawił wszystko na "Ticket Support".
Uzupełniasz formularz zawierający 8 pytań (od danuch pytającego po serial number produktu) i voilà!
Próg wejścia jest duży, choć trzeba przyznać, że support odpowiada dosyć sprawnie (w większości przypadków do 48h).

Podsumowanie

Jeżeli chodzi o integrację tracing toola z RTOS-em, to najprościej wygląda to w przypadku ThreadXa i embOSa - posiadają dedykowane narzędzia. FreeRTOS i Zephyr radzą sobię, poprzez patche do SystemView.
Jeśli chodzi o narzędzia do tracingu, to według nas SystemView zdecydowanie przoduje nad TraceX. Jest przejrzysty i intuicyjny. Pozwala między innymi na łatwą manipulację osią z widokiem na taski. TraceX niestety przyporządkowuje każdemu eventowi tak samo duży prostokąt na osi, przez co ciężko na pierwszy rzut oka stwierdzić, który task zajmuje ile czasu. Poza tym należy też ręcznie przeliczyć i podać podstawę czasową. Ot, drobny szkopuł.

Jeśli chodzi o wsparcie społeczności, to najlepiej wypada Zephyr i FreeRTOS. ThreadX obecnie zdecydowanie odstaje od tej dwójki (brak obecnie forum i bazy wiedzy dostępnej szerokiemu gremium).
Komercyjne rozwiązanie - jakim jest embOS - trudno tutaj porównywać z pozostałymi. Przez system ticketów do obsługi projektów, szeroko dostępny jest tylko fragment wsparcia i wiedzy - na wiki i rzadko uczęszczanym forum.