Dlaczego miałbym rozważyć użycie RTO dla mojego wbudowanego projektu?

Najpierw tło, potem szczegóły mojego pytania:

W firmie, którą pracuję na platformie, na której pracujemy, jest obecnie rodzina Microchip PIC32 wykorzystująca MPLAB IDE jako nasze środowisko programistyczne. Wcześniej pisaliśmy również firmware dla rodzin Microchip dsPIC i TI MSP dla tej samej aplikacji. Oprogramowanie układowe jest dość proste, ponieważ kod jest podzielony na trzy główne moduły: sterowanie urządzeniem, próbkowanie danych i komunikacja z użytkownikiem (Zwykle komputer użytkownika). Sterowanie urządzeniem odbywa się za pomocą kombinacji linii magistrali GPIO i co najmniej jednej części wymagającej sterowania SPI lub I2C. Próbkowanie danych jest sterowane przerwaniem za pomocą modułu timera w celu utrzymania częstotliwości próbkowania i większej liczby linii magistrali SPI/I2C i GPIO do sterowania sprzętem do próbkowania(tj. ADC). Komunikacja z użytkownikami jest obecnie realizowana przez USB za pomocą Microchip App Framework.


Więc teraz pytanie: biorąc pod uwagę to, co opisałem powyżej, w którym momencie rozważyłbym zatrudnianie RTO do mojego projektu? Obecnie myślę o tych możliwych punktach wyzwalających jako powodach użycia RTO:

  • złożoność kodu? Architektura/organizacja bazy kodu jest na tyle mała, że mogę zachować wszystkie szczegóły w głowie.
  • Wielozadaniowość/Gwintowanie? skrócenie czasu wykonania modułu za pomocą przerwań na razie wystarczy do wielozadaniowości.
  • testy? obecnie niewiele robimy formalne testy lub weryfikacja po teście dymu HW (coś, co mam nadzieję poprawić w najbliższej przyszłości).
  • Komunikacja? obecnie używamy niestandardowego formatu pakietów i protokołu, który w zasadzie tylko uruchamia, zatrzymuje i wysyła polecenia z danymi jako binarny blob.
  • Zakres projektu? istnieje możliwość, że w niedalekiej przyszłości będziemy mieli projekt integracji naszego urządzenia z większym systemem w celu podjęcia tego system do masowej produkcji. Obecnie wszystkie nasze projekty są eksperymentalnymi prototypami z szybkim zwrotem około miesiąca, produkującymi jedną lub dwie jednostki na raz.

Co jeszcze powinienem rozważyć? Z Twojego doświadczenia co przekonało (lub zmusiło) do rozważenia użycia RTO zamiast uruchamiania kodu w podstawowym środowisku uruchomieniowym? Wskaźniki do dodatkowych zasobów dotyczących projektowania / programowania dla RTO są również bardzo cenione.

Author: spade78, 2010-08-31

5 answers

Istnieje wiele powodów, dla których warto użyć RTO. Są one zróżnicowane i trudno powiedzieć, w jakim stopniu odnoszą się do twojej sytuacji. (Uwaga: mam tendencję do myślenia w ten sposób: RTOS implikuje twardy czas rzeczywisty, który implikuje preemptive kernel...)

  • Rate Monotonic Analysis (RMA) - jeśli chcesz użyć Rate monotonic Analysis , aby zapewnić dotrzymanie terminów, musisz użyć prewencyjnego scheduler

  • Dotrzymywanie terminów w czasie rzeczywistym - nawet bez korzystania z RMA, z pierwszeństwem RTO opartym na priorytetach, twój harmonogram może pomóc zapewnić dotrzymanie terminów. Paradoksalnie, RTO zazwyczaj zwiększa opóźnienie przerwania ze względu na sekcje krytyczne w jądrze, gdzie przerwania są zwykle maskowane

  • Zarządzanie złożonością -- zdecydowanie RTO (lub większość smaków systemu operacyjnego) może w tym pomóc. Pozwalając projektowi na rozłożone na niezależne wątki lub procesy, i za pomocą usług systemu operacyjnego, takich jak kolejki wiadomości, muteksy, semafory, flagi zdarzeń, itp. aby komunikować się i synchronizować, Twój projekt (z mojego doświadczenia i opinii) staje się łatwiejszy do zarządzania. Pracuję nad większymi projektami, w których większość ludzi rozumie koncepcję ochrony wspólnych zasobów, więc wiele błędów rookie się nie zdarza. Ale uważaj, gdy przejdziesz do podejścia wielowątkowego, sprawy mogą stać się bardziej złożone, dopóki nie owiniesz głowy wokół problemów.

  • Korzystanie z pakietów innych firm - wiele RTOSs oferuje inne komponenty oprogramowania, takie jak stosy protokołów, systemy plików, sterowniki urządzeń, Pakiety GUI, bootloadery i inne oprogramowanie pośredniczące, które pomagają budować aplikację szybciej, stając się prawie bardziej "integratorem" niż sklepem dla MAJSTERKOWICZÓW.

  • Testowanie - tak, zdecydowanie można myśleć o każdym wątku sterowania jako testowalnym komponencie z dobrze zdefiniowanym interfejsem, zwłaszcza jeśli stosowane jest spójne podejście(np. zawsze blokowanie w jednym miejscu w kolejce komunikatów). Oczywiście nie jest to substytut jednostki, integracji, systemu itp. testuję.

  • Robustness / fault tolerance - RTO może również zapewnić wsparcie dla MMU procesora (w Twoim przypadku PIC, to chyba nie ma zastosowania). Pozwala to każdemu wątkowi (lub procesowi) działać we własnej chronionej przestrzeni; wątki / procesy nie mogą "zanurzać się" w pamięci innych i deptać po niej. Parzyste regiony urządzeń (MMIO) mogą być wyłączone dla niektórych (lub wszystkich) wątków. Ściśle mówiąc, nie potrzebujesz RTO, aby wykorzystać MMU procesora (lub MPU), ale 2 działają bardzo dobrze ręka w rękę.

Ogólnie rzecz biorąc, kiedy mogę rozwijać się za pomocą RTO (lub jakiegoś typu prewencyjnego wielozadaniowego), wynik wydaje się być czystszy, bardziej modułowy, bardziej zachowawczy i łatwiejszy do utrzymania. Kiedy mam taką opcję, używam jej.

Należy pamiętać, że rozwój wielowątkowy ma trochę nauki krzywa. Jeśli dopiero zaczynasz korzystać z RTO/multithreaded development, możesz zainteresować się artykułami na temat wyboru RTO, [12]}I[57]} Wprowadzenie do prewencyjnego wielozadaniowości [12]}.

Wreszcie, mimo że nie prosiłeś o rekomendacje... Oprócz wielu komercyjnych RTOS, istnieją darmowe oferty (FreeRTOS będąc jednym z najpopularniejszych), A Quantum Platform jest frameworkiem sterowanym zdarzeniami bazuje na koncepcji obiektów aktywnych , która zawiera jądro prewencyjne. Istnieje wiele opcji, ale odkryłem, że posiadanie kodu źródłowego (nawet jeśli RTO nie jest wolne) jest korzystne, esp. podczas debugowania.

 34
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-01 00:56:04

RTO, przede wszystkim pozwala na zorganizowanie równoległych przepływów w zestaw zadań z dobrze zdefiniowaną synchronizacją między nimi.

IMO, projekt non-RTOS jest odpowiedni tylko dla architektury jednoprzepływowej, gdzie cały program jest jedną dużą, nieskończoną pętlą. Jeśli potrzebujesz multi-flow - wielu zadań, działających równolegle - lepiej z RTO. Bez RTO będziesz zmuszony wdrożyć tę funkcjonalność we własnym zakresie, wymyślając na nowo koło.

 6
Author: Ilia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-02 14:20:53

Ponowne użycie kodu -- jeśli kodujesz sterowniki / protokoły obsługujące przy użyciu API RTOS, mogą one łatwiej podłączyć się do przyszłych projektów

Debugowanie -- niektóre IDE (takie jak IAR Embedded Workbench) mają wtyczki, które pokazują ładne dane na żywo o uruchomionym procesie, takie jak wykorzystanie procesora zadaniowego i wykorzystanie stosu

 3
Author: Doug Currie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-31 17:04:15

Zazwyczaj chcesz użyć RTO, jeśli masz jakiekolwiek ograniczenia w czasie rzeczywistym. Jeśli nie masz ograniczeń w czasie rzeczywistym, może wystarczyć zwykły system operacyjny. Systemy RTO / OS zapewniają infrastrukturę czasu pracy, taką jak kolejki wiadomości i zadania. Jeśli po prostu szukasz kodu, który może zmniejszyć złożoność, zapewnić wsparcie niskiego poziomu i pomoc w testowaniu, niektóre z następujących bibliotek mogą to zrobić:

  • standardowe biblioteki C / C++
  • Boost libraries
  • biblioteki dostępne za pośrednictwem producent układu, który może zapewnić wsparcie sprzętowe
  • Biblioteki komercyjne
  • biblioteki Open source
 2
Author: waffleman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-31 17:55:35

Oprócz wymienionych wcześniej punktów, użycie RTO może być również przydatne, jeśli potrzebujesz wsparcia dla

  • standardowe urządzenia pamięci masowej (SD, Compact Flash, dyski ...)
  • standardowy sprzęt komunikacyjny (Ethernet, USB, Firewire, RS232, I2C, SPI,...)
  • standardowe protokoły komunikacyjne (TCP-IP, ...)

Większość RTOSes udostępnia te funkcje lub można je rozszerzyć w celu ich obsługi

 1
Author: chrmue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-02 14:37:14