"Programowanie systemów czasu rzeczywistego"

Odpowiedz Nowy wątek
gość
2018-08-25 20:41
gość
0

Czasami w ofertach pracy w c++ jest taki opis lub wymagana znajomość i chciałbym się spytać czym to się właściwie różni od "zwykłego" programowania? Bo chyba czymś się różni, skoro jest wyszczególniane?

Pozostało 580 znaków

sig
2018-08-25 22:56
sig

Rejestracja: 8 lat temu

Ostatnio: 5 godzin temu

0

Program systemu czasu rzeczywistego różni się tym od zwykłego, że ma określoną ilość czasu (zwykle wyrażoną w milisekundach) na reakcję na takie czy inne zdarzenie.. Zwykle stosuje się je w systemach wbudowanych, np dekodery tv.

edytowany 1x, ostatnio: sig, 2018-08-25 22:58
Pokaż pozostałe 2 komentarze
@WeiXiao: to nie wypuszczamy na produkcję :) - Tenonymous 2018-08-26 00:03
czyli takie zapewnienie, że coś się wykona nie polega na zastosowaniu jakiegoś mechanizmu, a po prostu dobraniu algorytmu, który dla "najcięższych danych" i tak zmieści się w limicie? ta? - WeiXiao 2018-08-26 00:08
yep, to bardziej algorytmika/matematyka aniżeli mechanizm. Sam system czasu rzeczywistego to oczywiście urządzenie, natomiast wynik jest uzależniony od czasu obliczenia. Samo pojęcie zresztą nie jest takie proste, żeby można je było zamknąć w jednym zdaniu. Co ciekawe, wcale to nie oznacza, że musimy się bawić z gołymi wskaźnikami, const char* i innymi cudami. Takie systemy całkiem dobrze działają przy użyciu wysokopoziomowych struktur danych jak np vector - Tenonymous 2018-08-26 00:17
@WeiXiao: Ze studiów pamiętam "To następuje zdarzenie poważne w skutkach" A co do mechanizmów to pamiętam o przekazywaniu tokena - jak w sieci token ring, ale już nie kojarzę jakiś szczegółów na ten temat - przemyslowiec 2018-08-26 11:01

Pozostało 580 znaków

2018-08-26 09:38

Rejestracja: 2 lata temu

Ostatnio: 3 miesiące temu

Lokalizacja: Siemianowice Śląskie

1

Tak, to są systemy czasu rzeczywistego. Ale nie odpowiada to na pytanie, co odróżnia programistę czasu rzeczywistego od zwykłego programisty. Co ten pierwszy potrafi, czego drugi nie potrafi? To, że funkcja ma się wykonać w x ms to po prostu założenie projektu i nie widzę - jako ten zwykły programista - co to za rewolucyjna zmiana.


Przeważnie ignoruję niezarejestrowanych użytkowników.

Pozostało 580 znaków

2018-08-26 10:12

Rejestracja: 1 rok temu

Ostatnio: 3 godziny temu

2

Systemy czasu rzeczywistego wykorzystują systemy operacyjne, tak skalibrowane, żeby np. główny program nie był wywłaszczany z czasu procesora i zasobów i była pewność wykonania go w określonym czasie. To też zależy jaką odpowiedzialność i zastosowania ma spełniać. Można robic takie systemy w C#, odpowiednio konfigurując system i zasoby - np. gdy robimy system sterowania jakiegoś urządzenia na bazie odczytów. Niemniej taki system to może być np. sterowanie silnikiem samochodu, lub jakąś frezarką - w takich przypadkach czasami stosuje sie bardziej niskopoziomowe podejście, gdyż jest łatwiej zapewnić pewien reżim czasowy a czasami nawet tak zaprojektować, że fizycznie będzie niemożliwe przekroczenie czasu odpowiedzi - np. projektując odpowiednią architekturę w FPGA, można wyliczyć dla każdego wejścia ile będzie trwało wyjście. Często to zostaje na FPGA, a nie na dedykowanych układach, gdyż daje to pewną możliwość aktualizacji etc. Systemy czasu rzeczywistego, to pojęcia tak rozległe, jak systemy wbudowane, systemy sieciowe, systemy rozproszone. To są ogólne działy, które są workiem skupiającym wiele klas problemów. 2 inżynierów systemów czasu rzeczywistego może posiadać zupełnie różne kompetencje.

Pozostało 580 znaków

2018-08-26 10:19

Rejestracja: 3 lata temu

Ostatnio: 1 godzina temu

1
WwiXiao napisał(a):

czyli takie zapewnienie, że coś się wykona nie polega na zastosowaniu jakiegoś mechanizmu, a po prostu dobraniu algorytmu, który dla "najcięższych danych" i tak zmieści się w limicie? ta?

Tenonymous napisał(a):

yep, to bardziej algorytmika/matematyka aniżeli mechanizm. Sam system czasu rzeczywistego to oczywiście urządzenie, natomiast wynik jest uzależniony od czasu obliczenia. Samo pojęcie zresztą nie jest takie proste, żeby można je było zamknąć w jednym zdaniu. Co ciekawe, wcale to nie oznacza, że musimy się bawić z gołymi wskaźnikami, const char* i innymi cudami. Takie systemy całkiem dobrze działają przy użyciu wysokopoziomowych struktur danych jak np vector

No, niezupełnie. Z grubsza, nie chodzi tylko o to by system zareagował na jakieś zdarzenie w czasie < X, ale by przede wszystkim by procesy i wątki nie były blokowane czekaniem na odpowiedzi. W tym celu stosuje się mechanizmy, choćby takie jak: model aktora albo Real-Time Object Oriented Modeling, które polegają na tym że aktorzy zamiast wywoływać metody innych aktorów, wysyłają im sygnały. Tworzenie takiego systemu polega na zaprojektowaniu całego modelu i napisaniu kodu obsługującego poszczególne sygnały.
W Javie/Scali model aktora można zrealizować przy pomocy AKKA. Z kolei do ROOM służyły takie narzędzia jak RSARTE albo darmowy Papyrus RT.

edytowany 1x, ostatnio: GutekSan, 2018-08-26 10:23
Pokaż pozostałe 2 komentarze
ale wspomniał o C++ i wymaganej znajomości systemów czasu rzeczywistego, więc można założyć, że chodzi tu o RTOS. - Tenonymous 2018-08-26 11:37
ale przecież systemy czasu rzeczywistego to również systemy działające w oparciu o RTOOM i napisane w C++. Modele działają niezależnie od przyjętego języka. - GutekSan 2018-08-26 12:06
Doświadczenie komercyjne mam na tym polu nie wielkie, ale tak na szybko dopytałem ludzi z większym doświadczeniem i nikt modelu aktora/RTOOM nie stosuje - Tenonymous 2018-08-26 12:08
Telekomy stosują. Ericssonowe WCDMA/LTE opiera się o RTOOM. - GutekSan 2018-08-26 12:14
czasek zatem uzupełnić wiedzę :P - Tenonymous 2018-08-26 12:17

Pozostało 580 znaków

2018-08-26 10:41

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

Lokalizacja: www

0

Hej,
wydaje mi się, że gry, w dość sporym przypadku działają w czasie rzeczywistym, np. sieciowa wersja WarCrafta (lubiłem trochę grać, ale na stacjonarnej wersji) :)

edytowany 1x, ostatnio: hurgadion, 2018-08-26 10:41
Przy takim podejściu równie dobrze można powiedzieć, że Word działa w czasie rzeczywistym, bo klikasz i pojawia się na ekranie - nie do końca jednak o to chodzi w RTOSach. - Patryk27 2018-08-26 11:38
trzebaby sprecyzować, w systemie czasu rzeczywistego jest możliwe działanie bez interwencji użytkownika, lepiej ?? :) - hurgadion 2018-08-26 11:44
Nie do końca - przecież w innych systemach również jest możliwe działanie bez interwencji użytkownika i nie sprawia to automatycznie, że stają się bądź nie stają RTOSami. https://pl.wikipedia.org/wiki[...]peracyjny_czasu_rzeczywistego ;-) - Patryk27 2018-08-26 11:49
dobra, dzięki za temat, muszę to przemyśleć, ale nie teraz :) teraz zabieram się za Rakietę, za dr Rakietę ;) - hurgadion 2018-08-26 11:51

Pozostało 580 znaków

2018-08-26 12:03

Rejestracja: 4 lata temu

Ostatnio: 4 godziny temu

Lokalizacja: Tam gdzie jest (centy)metro...

2

Jeśli kogoś nie stać na ew.. książkę, zaczął bym od tego:
https://en.wikipedia.org/wiki/Real-time_computing
oraz (bo może ładniej narysowana funkcja zysku)..
https://pl.wikipedia.org/wiki/System_czasu_rzeczywistego

A następnie zastanowił bym się (dla własnych potrzeb), na ile mechanizmy które są obecne w językach programowania głównego nurtu są deterministyczne. Ba... na ile sam x86 jest deterministyczny :) Bo np. takie alokowanie pamięci na stosie (vide przykład z std::vector a nawet "goły malloc") nie jest przy domyślnym alokoatorze czy (dla C) implementacji. A maszyny wirtualne oraz praca GC także nie jeśli nie jest wcześniej jawnie implementowana z dbałością o determinizm. To nie znaczy że takie systemy nie będą czasu rzeczywistego. To oznacza że nie będą mogły wystąpić w pewnej kategorii tych systemów a więc i końcowych zastosowań.

Ogólnie.. Python'a czy Javy do awioniki bym nie wpychał bez względu na to czy go lubię. A i C i C++ tylko po narzuceniu ścisłych restrykcji co do mechanizmów wykorzystywanych.


Każdy problem w informatyce można rozwiązać, dodając kolejny poziom pośredniości,z wyjątkiem problemu zbyt dużej liczby warstw pośredniości — David J. Wheeler
a jak kogoś stać to masz coś godnego polecenia? ;) - Tenonymous 2018-08-26 12:13
ok, ale do czego... sprzęt, języki, projektowanie, wzorce ... Jeśli na początek, bez szokowania.. poczytaj o wzorcach RT. Trochę już "z brodą": https://www.amazon.com/Real-T[...]p;keywords=real+time+patterns. Zbuduje to Ci świadomość jakie tam są problemy. Klasyk to: https://www.amazon.com/Real-T[...]r=1-10&keywords=real+time Ogólnie jest tego trochę więc sprecyzuj. - Mokrowski 2018-08-26 12:30
to drugie mnie zadowala :D - Tenonymous 2018-08-26 12:31

Pozostało 580 znaków

2018-08-26 15:14

Rejestracja: 2 lata temu

Ostatnio: 3 miesiące temu

Lokalizacja: Siemianowice Śląskie

0

Zaryzykuję w takim razie tezę, że w tym programowaniu chodzi o to, żeby wiedzieć, czego można używać, a czego nie. Mieć świadomość, co siedzi w bebechach poszczególnych wywołań i czy nadają się do RTC. Umieć programować z ominięciem mechanizmów, które są niedeterministyczne.

Na przykład dodawanie elementu do ArrayList jest stałe w czasie, ale pechowe operacje mogą się rozciągnąć na liniowy czas wykonywania (gdy trzeba rozszerzyć listę i przepisać ją do nowej pamięci). A dla klasycznej implementacji LinkedList nie ma tego problemu. Działa wolniej, ale zawsze tak samo, na każdy element pobierając nowy mały kawałek pamięci. W pewnym uproszczeniu, bo co siedzi w malloc-u przekracza moją wiedzę. A już chyba najpewniej będzie z góry zarezerwować maksymalną objętość pamięci i pracować na archaicznej tablicy.

Do tego pewnie dochodzi znajomość jakiejś teorii, metodologii, wzorcowych rozwiązań, może frameworków.

Ogólnie wydaje się, że znając dobrze C jest się już bardzo blisko.


Przeważnie ignoruję niezarejestrowanych użytkowników.
Pokaż pozostałe 6 komentarzy
@hurgadion: serio? c embedded w Google zwraca prawie 250 milionów rezutatów, z czego drugi z nich (zaraz po Wikipedii) to https://www.elprocus.com/basi[...]-with-examples-for-beginners/ wraz z https://www.coursera.org/courses?query=embedded%20c. Jest też cały ekosystem Arduino, poradniki od Forbot.pl i masa, masa innych materiałów. - Patryk27 2018-08-27 08:18
sorki, nigdy się tym nie interesowałem, myślałem, że to trochę niszowe, hehe :) - hurgadion 2018-08-27 08:21
swoją drogą zastanawiam się, co takiego jest genialnego w C, że tyle lat przetrwał ?? czy to, że kod jest tłumaczony na język maszynowy ?? sorki za pytanie (może zawieje lamerem), C ma wbudowane instrukcje a'la assembler ?? - hurgadion 2018-08-27 08:24
kurła, tyle mam rzeczy do ogarnięcia, że nie wiem za co się zabrać :) na razie jad po suple :) - hurgadion 2018-08-27 08:25
już wiem jak będą wyglądały moje randki :) chodź do kina, please :) nie mam czasu, embedded stygnie :) idź sama, albo z koleżanką, opowiesz mi, ale w pigułce, mam minutę, albo dwie :) - hurgadion 2018-08-27 08:27

Pozostało 580 znaków

2018-08-28 16:17

Rejestracja: 2 lata temu

Ostatnio: 9 miesięcy temu

0

Systemem czasu rzeczywistego jest system obsługujący np. metro. Jak tam jest zonk na produkcji to jest naprawdę słabo. Poszukaj coś na sieci o tym.

O dziwo nie musi to być hard RT. - alagner 2018-08-29 12:53

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0