Czy można uruchomić oprogramowanie w czasie rzeczywistym?

60

Wiem, że działa pod Linuksem i są dostępne łaty w czasie rzeczywistym dla Linuksa. Czy te łatki działałyby?

Czy ktoś próbował innej OS w czasie rzeczywistym na Raspberry Pi?

Chodzi o to, aby użyć tablicy do regulacji i kontroli zadań, które mają krytyczne znaczenie dla czasu.

Lars Pötter
źródło
2
Myślę, że jedynym wyjątkowym powodem, który przychodzi mi na myśl, dlaczego nie mógłbyś być, gdyby zamknięte rozwiązanie GPU było przeszkodą. Pod warunkiem, że możesz zdecydować się po prostu zignorować procesor graficzny podczas wykonywania zadań w czasie rzeczywistym, pomyślałbym, że rozszerzenia czasu rzeczywistego mogłyby zostać uruchomione.
Chris Stratton,
7
Cały system Raspberry Pi nie jest otwarty do modyfikacji; pytanie brzmiałoby, czy część, która nie jest (GPU), byłaby gotowa trzymać się z daleka podczas wykonywania zadań w czasie rzeczywistym, czy też nieuchronnie wymagałoby to albo cykli autobusowych, aby uzyskać dostęp do pamięci RAM, a nawet „uwagi „z rdzenia ARM w sposób, który udaremniłby trudne cele czasowe.
Chris Stratton,
4
Najwyraźniej RISCOS jest dość dobrze dostosowany do niektórych aplikacji w czasie rzeczywistym i jego port Raspberry Pi działa dobrze. * 8 ')
Mark Booth
4
RISCOS nie jest systemem czasu rzeczywistego (zgodnie z linkiem z Wikipedii), więc jak może pomóc?
Lars Pötter,
4
Poprawka CONFIG_PREEMPT_RT została zademonstrowana na kilku procesorach ARM z systemem Linux. Mogą występować pewne problemy z opóźnieniem, ale powinny być mierzalne w kolejności mikrosekund.
Przełom

Odpowiedzi:

16

Możesz być zainteresowany uruchomieniem Xenomai na RaspberryPi. Tutaj znajdziesz poradnik jak to zrobić. W skrócie, Xenomai to projekt, który stworzył niestandardowe jądro Linuksa (zapewniają łatki, które muszą być zastosowane do źródeł jądra), umożliwiając mu uruchomienie innego jądra (jądra Xenomai) w czasie rzeczywistym. Umożliwia to uruchamianie aplikacji Xenomai na szerokiej gamie sprzętu bez potrzeby pisania dla nich sterowników (ponieważ Linux działa na bardzo szerokiej gamie sprzętu). Umożliwia to pisanie aplikacji w przestrzeni użytkownika RT przy użyciu kilku różnych dostępnych interfejsów API RT.

Krzysztof Adamski
źródło
1
Jaką maksymalną częstotliwość mogę uzyskać za pomocą tego narzędzia? Jestem zainteresowany kontrolą silnika prądu stałego z częstotliwością zaokrąglającą 1 kHz
Nicolás Arias,
19

W jądrze Linuksa włączenie PREEMPT_RTzapewni ograniczone opóźnienia i interfejsy API w czasie rzeczywistym. Oprócz konfiguracji PREEMPT_RTnależy również wybrać zasady SCHED_FIFOi SCHED_RR. A aplikacje muszą ustawiać parametry w czasie rzeczywistym, wywołując odpowiednie interfejsy API lub używając odpowiednich narzędzi.

Według szkolenia z wykorzystaniem wolnych elektronów: Realtime in Embedded Linux , PREEMPT_RT był projektem, który wprowadza możliwości jądra w czasie rzeczywistym. W pełni spakował się do strumienia jądra 2.6.33 i 3.0. Zobacz dokument, w którym znajdziesz wszystko.

Zasadniczo istnieją dwa podejścia do wprowadzenia możliwości jądra Linux w czasie rzeczywistym:

  • Zmodyfikuj w jądrze, to jest PREEMPT_RTprojekcie.
  • Uruchomić side-by-side w niepełnym wymiarze czasu rzeczywistego z normalnym jądra i poniżej normalnego jądra, były trzy pokolenia: RTLinux, RTAI, i Xenomai. ( Aedosjak Aviowspomniano poniżej?)

Edytować:

minghua
źródło
2
Witamy w Raspberry Pi, fajna odpowiedź! RT PREEMPT patchPrzez Ingo Molnar stosowany razem z High Resolution Timers(HTZ) wsparcia, pozwalają osiągnąć jądro ciężko w czasie rzeczywistym możliwości. Obecnie jego wsparcie dociera do jądra 3.4.11 , a „dobrą wiadomością” jest to, że łatka „kurczy się”, więc wydaje się, że większość z nich zostaje włączona do głównych źródeł jądra. Doskonały samouczek dotyczący sposobu jego zastosowania i korzystania z niego znajduje się tutaj .
Avio
1
Nie zapomnij podać Adeos jako alternatywy dla zapewnienia twardego wsparcia w czasie rzeczywistym w Linuksie.
Avio
2
Muszę wspomnieć, że uzyskanie PREEMPT_RT do pracy z jądrem Raspberry Pi nie jest prostą sprawą, po prostu zastosowanie łaty powoduje, że jądro nie działa. Ponadto w jądrze Raspberry Pi znajduje się wiele nowych sterowników, które nie zostały przetestowane z PREEMPT_RT, ani nie zostały usunięte z zbyt długich blokujących uśpień. To znaczy bardzo w toku.
Nakedible
2
Wszelkie aktualizacje tego? Czy sterowniki są teraz wystarczająco stabilne, aby korzystać z tej poprawki jądra? Chciałbym zrobić samouczek dla osób, które nie skompilowały jeszcze jądra.
fabb
@fabb: Nawet po wielu latach nadal będą sterowniki, które mają błędy w stosunku do wymagań RT. Dowiesz się tylko, uruchamiając go. Nawiasem mówiąc, ostatnio widzę pewną usterkę sieciową, kiedy raz podniosłem priorytety niektórych aplikacji w przestrzeni użytkownika, co jest nieoczekiwane. Chociaż wszystkie tego rodzaju sytuacje są ściśle związane z konfiguracją i aplikacją.
minghua
6

Wyolum mas aLaMode (nazywam go Almond Pi), aby zmieścił się na Pi w sposób umożliwiający układanie w stosy. Ma zegar czasu rzeczywistego, wykorzystuje aTiny 328, zasila GPIO Real UART / moc i jest flashowany na różne sposoby. Jest to świetne, ponieważ Pi może robić, co chcesz, serwer WWW / bazę danych, podczas gdy Arduino działa w czasie rzeczywistym.

wprowadź opis zdjęcia tutaj

Piotr Kula
źródło
1
Może wydawać się trochę niepraktyczne, aby mieć 2 mikrokontrolery działające, ale z drugiej strony zapewnia to działanie w czasie rzeczywistym, jeśli inne podejścia nie są wystarczająco szybkie.
fabb
1
Wszelkie wskazówki na temat tego, w jaki sposób RPi będzie się komunikować z drugim µC bez spowalniania pętli sterowania?
fabb
1
Tak, ale µC chyba musiałoby odpytywać UART, aby nie dopuścić, aby przerwania UART odłożyły przerwanie timera pętli sterowania. Czy następnie sondowałbym UART na początku pętli sterowania i upewniał się, że nie czytam zbyt wielu bajtów, aby nie trwało to zbyt długo? A może bufory UART przepełniają się w ten sposób zbyt łatwo? Czy też częstotliwość pętli sterowania byłaby o wiele wyższa niż prędkość UART, że odczyt jednego bajtu w każdej pętli, jeśli jest dostępny, byłby wystarczający?
fabb
1
Niezła sugestia. BTW Raspberry Pi Alamode to już gra słów. Tryb Ala polega na nakładaniu lodów na ciasto.
Dan
1
Naprawdę Hehe Zastanawiałem się, co to znaczy. Ma to teraz sens :)
Piotr Kula
2

Najlepszym rozwiązaniem, jakie widziałem w tym przypadku, jest X10i - karta kontrolna czasu rzeczywistego dla Raspberry Pi firmy Heber.

X10i to uniwersalny, wydajny i bezpieczny kontroler w czasie rzeczywistym, który umożliwia kontrolę nad wieloma wejściami / wyjściami przez USB z dowolnego systemu PC. Heber oferuje teraz wsparcie w wielu językach programowania, aby jeszcze bardziej ułatwić programistom, wynalazcom i programistom łączenie się ze światem zewnętrznym z poziomu komputera.

Powyższy link zapewnia doskonałą i obszerną dokumentację i starają się aktualizować sterowniki do najnowszej wersji Debian dla Pi.

Jivings
źródło
Więc potrzebujesz złącza wstążki od Pi do tego? Nie mogę znaleźć zdjęcia wynajmowanego obiektu, ale wygląda na naprawdę nieporęczne. Ma wiele przykładów, więc chyba dobrze. +1
Piotr Kula
Nie mogę powiedzieć, że go użyłem, ale bym się tego spodziewał, chociaż wydaje mi się, że pamiętam faceta używającego interfejsu USB w wersji demo. Jest dość nieporęczny, ale tak.
Jivings,
1

Oto artykuł (francuski tłumaczony przez Google Translate) na temat Raspberry Pi działającego z Xenomai .

Pierre-Jean Coudert
źródło
5
Cześć. Zazwyczaj odradzamy odpowiedzi, które są po prostu linkami na wypadek poruszenia się połączonej strony. Czy mógłbyś streścić informacje na tej stronie w swojej odpowiedzi? Następnie możesz dołączyć link jako odniesienie. Dzięki!
Jivings
1

RODOS to kolejna opcja. Jest to projekt Open Source opracowany przez German Aerospace Center oraz zespół i studentów prof. Czarnogóry.

Korzysta z C ++, jest całkowicie napisany obiektowo i obsługuje ARM7, Atmel AVR, STM32 / Cortex-M3, Xilinx, Raspberry Pi :), ...

Jest obecnie używany w satelitarnych TET i maszynach LoTTo, jeśli nie pomyliłem się.

Oczywiście wolałbym uruchamiać go powyżej Linuksa (co jest możliwe), aby mieć to, co najlepsze z obu światów - ale pozostają pytania w CZASIE RZECZYWISTYM, ponieważ nie jestem pewien, czy to możliwe, że Linux może zapewnić poprawne API.

Aby uzyskać RODOS, należy napisać wiadomość do Prof. Sergio Czarnogóry lub DLR (Niemieckie Centrum Kosmiczne).

Radagast
źródło
1

poza linuksem istnieją systemy operacyjne w czasie rzeczywistym. dość popularnym wśród otwartych źródeł jest ChibiOS / RT:

to kompletny, przenośny, open source, kompaktowy i niezwykle szybki RTOS (Real-Time Operating System)

krótkie wprowadzenie znajduje się na stronie http://chibios.org/dokuwiki/doku.php?id=chibios:documents:introduction . różniąc się od linuxa, możesz również polubić odczyty

Cóż, istnieją pewne wybory projektowe, które należy wyjaśnić i przyczynić się do uczynienia ChibiOS / RT szczególnym projektem. Nic samo w sobie nowego, ale całość jest interesująca.

albo nie. jeśli ci się spodoba - eksperymentowanie na pi może być warte doświadczenia na https://github.com/steve-bate/ChibiOS-RPi :

Widelec ChibiOS do eksperymentów z Raspberry PI.

autor dodaje fajny przewodnik na

http://www.stevebate.net/chibios-rpi/GettingStarted.html

osobiście, jeśli chodzi o RTO, dla mnie Linux jest jak noszenie sprzętu alpejskiego na zwykłe potrzeby kraju. możesz tego po prostu nie potrzebować. nawet pi może być za dużo. sprawdź http://forum.arduino.cc/index.php?topic=144715.0, aby uzyskać jeszcze mniejszą wagę :)

drganie
źródło