Czy Linux jest w stanie pracować jako RTOS, RTOS hard?

Czy Linux jest w stanie pracować jako RTOS, RTOS hard?
0

Cześć, zastanawiam się czy linux jest w stanie pracować jako RTOS, RTOS hard.Chciałbym realizować na linuxie jedną rzecz która będzie się wykonywała co 100ms. Minimalne zwłoki czasowe są dopuszczalne, na poziomie kilku ms, maksymalnie kilkudziesięcu ms.

Kopiuj

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

void *myfunc1 (void *myvar);
void *myfunc2 (void *myvar);

int main(void)
{
	pthread_t thread1, thread2;

	char *msg1 = "First";
	char *msg2 = "Second";
	int ret1 = 0;
	int ret2 = 0;

	ret1 = pthread_create(&thread1, NULL, myfunc1, (void*) msg1);
	ret2 = pthread_create(&thread2, NULL, myfunc2, (void*) msg2);

	pthread_join(thread1, NULL);
	pthread_join(thread2, NULL);

	printf("First thread ret: %d", ret1);
	printf("Second thread ret: %d", ret2);

	return 0;
}

void *myfunc1 (void *myvar)
{
	while(1)
	{
                //update_db();
		printf("Thread1\n");
		usleep(500000);
	}
}

void *myfunc2 (void *myvar)
{
	while(1)
	{
                //update_output();
		printf("Thread2\n");
		usleep(100000);
	}
}

Czy da się uruchomić ten program, aby miał wysoki priorytet? Tak samo zależy mi aby wątek pthread2 którego zadaniem jest wysterowanie pinów wykonywał się co 100ms., Wątek pthread1 którry realizuje zadanie zadanie odczytu i zapisu do bazy danych jest mniej istotny, opóźnienia mogą być. Czasem zapis do DB trwa długo np. 800ms, i pthread1 blokuje pthread2 który ma "ważniejsze zadanie". Chciałbym uzyskać efekt podobny do FreeRTOS tzn. mieć task o najwyższym priorytecie.

edytowany 1x, ostatnio: flowCRANE
hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:9 dni
1

To hard RTOS czy "minimalne zwłoki czasowe są dopuszczalne"?

Ogólnie Linux nie będzie działał jako hard RTOS co najwyżej jako soft (zakładam, że nawet napisanie własnego schedulera nie wiele da). Aczkolwiek jest projekt, który próbuje to uzyskać, ale wygląda na to, że to więcej niż tylko zmiana schedulera.


0

No dobra moja pomyłka, nie hard ale soft. Ważne aby zrealizować zadanie wysterowania pinów z możliwie jak najmniejszą zwłoką czasową. Można dodać priorytety do pthread'ów?

hauleth
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:9 dni
0

@Zimny kot a chociażby sprawdziłeś co masz napisane w man pthread_create? Bo sekcji SEE ALSO ja znalazłem coś takiego man pthread_setschedprio


AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:1493
0

man sched_setscheduler

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Linux jako RTOS to pewnie taki Golf ze spojlerami.
Ale jest kilka takich projektów.
https://en.wikipedia.org/wiki/RTLinux
https://www.zephyrproject.org/

Możesz jeszcze poszukać pod hasłem Embedded - tu masz opis czym to się różni:
https://www.safaribooksonline.com/library/view/building-embedded-linux/059600222X/ch01s02.html

FR
RTLinux to już chyba porzucony projekt. Zephyr to raczej embedded - taka alternatywa dla FreeRTOS.
FR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 6 godzin
  • Postów:30
0

Kiedyś usłyszałem, że jądro Linux jest soft-realtime, tzn. zdecydowana większość deadline jest dotrzymywana. Czy to prawda - nie wiem - spróbuj sam.

Jeśli potrzebujesz zrobić z desktopowego Linuxa - RTOS to masz kilka opcji: możesz spróbować, czy wystarczyłoby Ci gdybyś skompilował jądro z łatami PREEMPT_RT (wydaje mi się że jest to kwestia wyboru opcji podczas kompilacji jajka). Druga opcja, która zapewni Ci hard realtime z dotrzymywaniem terminów w okolicach pojedynczych ms jest Xenomai (https://xenomai.org/). Od razu uprzedzam, że to drugie rozwiązanie jest mocno hardcorowe i może być przerostem formy nad treścią dla tego co chcesz zrobić.

edytowany 1x, ostatnio: Frebiee
vpiotr
Nie poleciłeś FreeRTOS - coś z nim nie tak?
FR
FreeRTOS jest jak najbardziej w porządku, ale raczej na małych procesorach:-) OP pytał o Linuxa i tego się trzymam.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)