Jak programuje się codzienne maszyny?

147

W jaki sposób programuje się maszyny codziennego użytku (nie tyle komputery i urządzenia mobilne, ile urządzenia, zegarki cyfrowe itp.)? Jaki kod jest używany do programowania automatu sprzedającego Coca-Cola? W jaki sposób mój ekspres akceptuje zaprogramowany czas i zaczyna parzyć dzbanek kawy kilka godzin później, kiedy ten czas nadejdzie?

Czy tego typu maszyny mają w sobie systemy operacyjne, czy jest to coś jeszcze bardziej podstawowego? Czy są napisane w asemblerze, C lub jakimś innym języku?

I naprawdę chciałbym znaleźć jakieś źródło, które zawiera listę tych systemów operacyjnych lub bazowych systemów kodu, być może nawet z kodem źródłowym, jeśli to możliwe. Gdyby ktoś wiedział o takim zasobie (wyszukiwanie nic dla mnie nie dało), byłoby to fantastyczne.

Josh Leitzel
źródło
12
Fantastyczne pytanie! Sam się nad tym zastanawiałem.
Jonathan Sterling
7
Poszukaj informacji na temat „systemów wbudowanych” (dodałem nawet tag za Ciebie).
mu jest za krótkie
Po zakończeniu głosów: nie uważam tego za materiał dla programistów, ponieważ jest o programowaniu . Z drugiej strony może dobrze sobie radzić na stronie Electronics SE, po prostu dlatego, że będzie więcej specjalistów. Oczywiście odpowiedź to niektóre z powyższych. Aby uzyskać jedną odpowiedź, musisz wybrać mniejszą klasę.
dmckee --- kociak ex-moderator
To bardzo szerokie pytanie, które obejmuje co najmniej 3 dyscypliny inżynierskie i wiele odcieni pomiędzy nimi.
Jodrell,
FWIW, możesz być zainteresowany zabawą na platformie mikrokontrolera, takiej jak Arduino (~ 30 USD) arduino.cc .
parowiec

Odpowiedzi:

47

Większość z tego, o czym mówisz, to systemy wbudowane, w których C jest luksusem, często niedostępnym. Nie mają oprogramowania w tradycyjnym sensie. W większości przypadków oprogramowanie jest napisane w języku C, asemblerze lub nawet w kodzie maszynowym. C i ASM wymagają, aby kompilatory były napisane, aby używać ich na tej platformie. Kod maszynowy jest zapisywany w postaci binarnej bez kompilatora.

Twój dzbanek do kawy i większość takich prostych systemów nie ma systemu operacyjnego. Po prostu ładują się z adresu początkowego w pamięci i umieszczasz tam swój kod. Często te systemy mają swój „kod” wypalony w EEPROMS, który działa jako dysk twardy systemu. Schrzań kod po spaleniu studniówek, wyrzuć żetony, ponownie spal kod na chipie i zacznij od nowa. Istnieją nowsze układy FPGA, których urządzenia z wyższej półki używają do łatwiejszego testowania, wdrażania itp., Ale to to samo.

Maszyny, routery itp. Coca-coli zazwyczaj używają systemu operacyjnego czasu rzeczywistego, takiego jak QNX, EMBOS lub czasami RTlinux, jeśli masz szczęście. Większość z nich to zastrzeżony system operacyjny, na który licencjonujesz za dużo pieniędzy, ale mają kompilatory C, sterowniki do pracy ze sprzętem itp.

http://www.qnx.com/

http://www.segger.com/cms/embos.html

http://www.microsoft.com/windowsembedded/en-us/campaigns/compact7/default.aspx?WT.srch=1&WT.mc_ID=SEARCH

RTLinux

chubbsondubów
źródło
35
Ludzie kodują binarnie? Asemblery są tak głupio proste do napisania, że ​​trudno mi w to uwierzyć. Czy masz źródło tego? Również ta odpowiedź daje fałszywe wrażenie, że wszystkie systemy zawierają mikroprocesor, który wykonuje kod. Chociaż staje się to coraz bardziej popularne, ponieważ mikrokontrolery i EEPROM (które ułatwiają debugowanie i aktualizację) stają się tańsze, nadal nie jest tego warte w przypadku bardzo tanich systemów lub systemów, które nie zmieniły się zbytnio w ciągu ostatnich 20 lat. Na przykład niektóre zegarki cyfrowe.
BlueRaja - Danny Pflughoeft
6
Jest to po prostu zbyt stanowcze. Nie musisz hostować kompilatora w miejscu docelowym. Kompilatory krzyżowe są bardzo powszechne w programowaniu osadzonym.
dmckee --- kociak ex-moderator
12
Maszyna koksownicza z systemem QNX? WTF - to inny rodzaj coli! I tak, istnieje kompilator C dla każdej platformy, która jest obecnie w sprzedaży. Nikt nie chce pisać asemblera, brak C byłby ogromnym utrudnieniem. (Niektóre kompilatory nie są zbyt dobre , przyznaję.)
Potatoswatter
8
Ponadto pamięć EEPROM z definicji można przepisać ponad 100 000 razy. Wspomnienia jednorazowego zapisu są przestarzałe; Wszystkie popularne dziś mikrokontrolery mają Flash. FPGA to zupełnie inny rynek niż low-endowe MCU… nie masz pojęcia, o czym mówisz.
Potatoswatter
7
Mam znajomego, który pracuje na dość skomplikowanych automatach sprzedających. Mają radiotelefony komórkowe, monitorują zapasy, śledzą temperaturę, raportują dane finansowe i wysyłają wywołania HTTP z powrotem do serwerów w celu zagregowania wszystkich tych danych, dzięki czemu można śledzić wszystkie swoje maszyny. I tak, te marki maszyn używają wbudowanego systemu operacyjnego. Myślę, że używają RTLinux z C. Więc tak, nawet skromny automat staje się na tyle złożony, że gwarantuje wbudowany system operacyjny.
chubbsondubs
29

Korzystają z mikrokontrolerów, 8051 jest klasyczny. Są to rdzenie 8-bitowe lub 16-bitowe, rzadko mają system operacyjny. Programista pisze kod w celu zainicjowania wbudowanych urządzeń peryferyjnych i implementacji obsługi przerwań. Używane języki to asembler i C. Trudne zadania debugowania wymagają emulatora w obwodzie.

Jest jeszcze dużo miejsca poza tym, dzięki 32-bitowym wbudowanym rdzeniom (ARM to 100-funtowy goryl), które uruchamiają wbudowaną wersję Linuksa i / lub Java JVM.

Hans Passant
źródło
5
To raczej mały goryl, ale
wydaje
Dziękuję Ci! Twoja odpowiedź była dla mnie przydatna i dałem ci za.
Josh Leitzel
Chipy ARM również wchodzą w dolny koniec ... z cenami <1 USD, śladami 2x2mm.
domeną
24

To są systemy wbudowane i byłyby programowane przy użyciu języka niskiego poziomu, takiego jak C lub assembler. Ogólnie rzecz biorąc, taki system będzie działał bez systemu operacyjnego, chociaż niektóre nowsze „codzienne maszyny”, takie jak odtwarzacze Blu-ray DVD i routery bezprzewodowe, uruchamiają swój kod na systemie operacyjnym opartym na Uniksie.


Aktualizacja

Zgodnie z tym, co powiedzieli inni, wiele nowoczesnych systemów wbudowanych również obsługuje okna. To zależy od aplikacji. Ponadto w wielu obszarach istnieje tendencja do uruchamiania na bardziej wydajnej platformie z systemem operacyjnym, aby radzić sobie z przypadkami, takimi jak odtwarzacze Blue-ray, które wymagają obsługi języka Java, i innymi przypadkami, w których użytkownik końcowy potrzebuje większej funkcjonalności.

Justina Ethiera
źródło
Aby wyjaśnić, Bluray używa języka Java.
Andrew Marshall,
6
Być może, ale rzeczywiste odtwarzacze działają na Linuksie i są napisane w C / C ++
Justin Ethier
Kasy fiskalne, dystrybutory benzyny i tym podobne działały dos (niektóre marki), niestety niektóre z nich mają teraz okna (sklep spożywczy lub inne linie samoobsługowe). Pragnienie, aby programy telewizyjne ryczały do ​​ciebie, gdy pompowałeś gaz, i tańcząc bzdury na ekranie, gdy nie, doprowadziło do większej mocy. Podobnie maszyny do koksu i wody z chwytakiem dwuosiowym.
old_timer
@Justin, cóż, oczywiście, Java musi siedzieć na czymś, aby działać. Chodziło mi o to, że wykorzystuje język wysokiego poziomu (stosunkowo) jak Java.
Andrew Marshall,
@Andrew: A na jakim systemie operacyjnym działa interpreter Java w Blue Ray? W jakim języku napisano ten system operacyjny?
Gunther Piez
18

Pomyślmy o procesorze w Twoim komputerze stacjonarnym. Wszystko, co robi, to uruchamianie instrukcji maszynowych i samo w sobie nie zajmuje się tak naprawdę „systemami operacyjnymi” lub „programami”.

Po włączeniu komputera procesor wskazuje pierwszą instrukcję i zaczyna się ona wykonywać.

Na Twoim pulpicie rozpocznie wykonywanie „systemu operacyjnego”. Ale nie ma powodu, aby procesor nie wykonywał żadnego wybranego zestawu instrukcji. (Może to nie być zbyt przydatne, ponieważ nadal chciałbyś wyświetlać wyniki na ekranie, a ta funkcja znajduje się w systemie operacyjnym). W tym samym czasie, jeśli instrukcje maszyny zawierały odpowiednie opkody, tak aby procesor wyświetlał poprawna sekwencja sygnałów do namalowania obrazu na monitorze, tym lepiej. Nie jest potrzebny system operacyjny.

Komputery stacjonarne robią tak wiele rzeczy , że generalnie wymagamy abstrakcji systemu operacyjnego. Ale w istocie wszystko, co robi procesor, to wykonywanie instrukcji.

To samo dotyczy procesora w maszynach koksowniczych i ekspresach do kawy. Wszystko, co robi, to wykonywanie instrukcji.

Cóż, pisanie instrukcji maszynowych krok po kroku jest żmudne. Tak więc, podobnie jak w przypadku komputerów stacjonarnych, zazwyczaj piszemy kod w języku C, który jest następnie kompilowany do kodu maszynowego. Ten kod maszynowy jest ładowany do wbudowanego procesora i działa.

Systemy wbudowane robią tak mało , że nie potrzebują pełnych systemów operacyjnych. Mikrokontroler może mieć 8 lub 16 pinów w chipie - w porównaniu z wynikami pinów w zwykłym gnieździe procesora.

Tak więc przepływ pracy polega na napisaniu kodu (powiedzmy w C), skompilowaniu go na komputerze stacjonarnym. Ten kompilator generuje kod maszynowy dla wbudowanego chipa. Następnie ten kod jest ładowany do mikroprocesora (i potrzebujesz do tego specjalnego sprzętu). Następnie włączasz chip i zaczyna on wykonywać instrukcje. Prosty!

poundifdef
źródło
2
Dziękuję bardzo! Gdybym mógł wybrać inną najlepszą odpowiedź, byłaby to Twoja. Uważam, że to bardzo przydatne. +1
Josh Leitzel
Nowoczesne procesory są zaskakująco mocno zaniepokojone systemami operacyjnymi. Zapewniają takie funkcje, jak jednostki zarządzania pamięcią , uprzywilejowane instrukcje i tryby oraz wirtualizacja sprzętu . Nowoczesne systemy operacyjne zależą od niektórych z tych funkcji. To jest powód, dla którego nie można ( łatwo ) uruchomić Linuksa na małych mikrokontrolerach.
Mira Weller
12

Wiele urządzeń wykonujących określoną funkcję nie zawiera żadnego „kodu”. Pełnią swoje funkcje poprzez właściwości swoich elementów elektronicznych. Bardziej zaawansowane systemy, które mogą pełnić wiele różnych funkcji lub które wymagają łatwej aktualizacji, będą zawierały mikrokontroler i jakiś „system operacyjny”. Ponieważ nadal mają one pewne ograniczenia w swojej funkcjonalności, system operacyjny będzie prosty i specjalnie zaprojektowany. Jeszcze bardziej zaawansowane urządzenie będzie zawierało coś podobnego do komputera. Będzie miał bardziej skomplikowany system operacyjny, który może komunikować się z różnymi częściami systemu. Wreszcie docierasz do urządzeń takich jak smartfony, które zawierają pełny system operacyjny, który może uruchamiać kod na poziomie użytkownika i ma znacznie więcej danych wejściowych użytkownika niż prostsze urządzenia. Jednak, nawet nowoczesne procesory to zasadniczo bardzo duże obwody elektryczne. Każda instrukcja rozpoznawana przez procesor spowoduje użycie innego obwodu do wykonania tej funkcji.

Oto kilka stron Wikipedii, które mogą Cię zainteresować:

http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki / Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller

ughoavgfhw
źródło
To jest źle. Głównym czynnikiem wpływającym na koszt tanich chipów jest opakowanie zawierające krzem. Z tego powodu tańsze jest zastąpienie dyskretnej logiki mikrokontrolerem, gdy dojdzie się do kilkudziesięciu bramek… a kilkanaście bramek niewiele robi. Wszechobecność MCU podniosła koszt dyskretnych bram, zmieniając równowagę. Ponadto większość tanich mikrokontrolerów nie obsługuje żadnego systemu operacyjnego.
Potatoswatter
7

To bardzo szerokie pytanie i zależy w dużej mierze od maszyny. Mogę się tylko domyślać, że większość tych automatów jest kontrolowana przez mikrokontrolery (8051, PIC, ARM7, żeby wymienić niektóre z najczęściej używanych) i rzadko ma system operacyjny, a jeśli ma, byłby to jakiś rodzaj RTOS, taki jak FreeRTOS .

Bardziej złożone maszyny, takie jak odtwarzacze DVD / BluRay lub telefony komórkowe, działają na zaawansowanych platformach, takich jak OMAP4 . Zwykle działa na nich system operacyjny Unix.

Thiago Cardoso
źródło
Dziękuję za Twoją odpowiedź! +1
Josh Leitzel
7

Niedrogie mikrokontrolery znalezione w urządzeniach codziennego użytku zazwyczaj nie obsługują systemu operacyjnego. Są wybierane ze względu na niski koszt, a głównymi czynnikami wpływającymi na ten koszt jest liczba pinów w chipie (od kilkunastu do kilkuset) i ilość pamięci wewnątrz (od kilku kilobajtów do megabajta ROM, od kilku bajtów do stu kilobajtów pamięci RAM).

Ponieważ pełzanie funkcji działa magicznie, zdarza się, że kuchenka mikrofalowa może potrzebować wielu zadań. W takim przypadku programista przywołuje kurs swoich systemów operacyjnych i implementuje przekazywanie komunikatów, planowanie zadań, asynchroniczne we / wy itp. W razie potrzeby!

Oczywiście ze względu na celowość, prostotę, rozmiar kodu itp., Funkcje są zwykle wykonywane w szczątkowy sposób. Często zależy to od sposobu analizy programu, aby znaleźć uogólnioną funkcjonalność systemu operacyjnego w kodzie specyficznym dla zadania. Ale od zakodowanego na stałe harmonogramu zadań do systemu operacyjnego jest długa droga, a kiedy masz tylko kilka kilobajtów do pracy, gotowy system operacyjny nie jest rozwiązaniem.

Zajrzyj na DigiKey, popularną witrynę z wyborem części elektronicznych, aby dowiedzieć się o niższych jednostkach MCU. Oto ich informacje na temat bardzo taniego mikrokontrolera z kontrolerem LCD, takiego jaki można znaleźć w ekspresie do kawy. Łatwo jest zdobyć podręcznik programowania i wszystko.

Potatoswatter
źródło
5

Zadaniem systemu operacyjnego jest zapewnienie współdzielonego dostępu do zasobów - czasu wykonania procesora, pamięci RAM, I / O itp. Większość prostych systemów wbudowanych opartych na mikrokontrolerach ma tylko jeden program działający na raz, który ma dostęp (i zarządza) do tych zasobów samodzielnie , dlatego nie potrzebują systemu operacyjnego.

Systemy wbudowane są zwykle programowane w języku C, a czasami w asemblerze w celu uzyskania ekstremalnego taktowania lub optymalizacji pamięci. Niektóre wbudowane kompilatory pozwalają na przeplatanie asemblacji w języku wyższego poziomu.

Nick Forge
źródło
4

Niedawno natknąłem się na automat do sprzedaży papierosów, na którym działał Ubuntu (maszyna uruchamiała się ponownie, więc mogłem zobaczyć logo).

ryyst
źródło
1

Jeśli szukasz ogólnych informacji w Google, poszukaj takich rzeczy, jak „systemy wbudowane”, „soc” (system na chipie). Powiedziałbym, że duża część tego typu urządzeń działa w językach niskiego poziomu, takich jak C.

Ciekawostka: Java została pierwotnie pomyślana jako rozwiązanie do programowania systemów wbudowanych: http://en.wikipedia.org/wiki/Oak_(programming_language )

Travis Webb
źródło
Dzięki, na pewno zbadam je dalej! +1
Josh Leitzel
1

Większość kiosków, rejestrów, ekranów drive-thru, a nawet wysokiej klasy ekspresów do kawy i kuchenek mikrofalowych w rzeczywistości działa pod systemem Windows XP lub Linux, tak jak maszyny serii „Jura Impressa”; możesz do nich SSH i parzyć kawę.

Oto skrypt github dotyczący zadania cron w ekspresie do kawy: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

Większość routerów, nowszych piekarników, nowszych lodówek, samochodów, odtwarzaczy DVD, różnych urządzeń elektronicznych, nowszych produktów automatyki domowej, w tym żarówek, obsługuje wersję ARM linux lub wbudowany Linux.

Większość tańszych urządzeń, poniżej 20 USD, jeśli są nowsze, działa na ESP8266 lub podobnym urządzeniu (można uruchomić LUA lub zredukowany serwer Node za 2 USD luzem - niesamowicie tani)

http://nodemcu.com/index_en.html

Korzystanie z układów FPGA i systemów wbudowanych, takich jak 8051, Z80 lub innych urządzeń wbudowanych, takich jak PICC, AVR i Arduino, zostanie wkrótce zastąpione systemami all-in-one / SoC (System on Chip), takimi jak ESP8266. Są po prostu zbyt łatwe do zaprogramowania i stanowią kompletny system na chipie z własnym serwerem WWW; po prostu je zasilasz, przesyłasz kod źródłowy i masz serwer sieciowy za 2 $.

Dorastałem, kodując PICC, AVR i 8051 i przykro mi, że odchodzą, ale od lat nie dotykałem niczego innego niż ESP8266, ponieważ są one 1/10 ceny i są o rząd wielkości łatwiejsze w obsłudze . Możesz je zdobyć na płytach rozwojowych z pakietami baterii i rozbitymi układami pinów za 5 USD w serwisie eBay lub 10 USD w Adafruit.

Nick Steele
źródło
-2

Słyszałem od inżyniera, że ​​pociągi Siemens Light-Rail Commuter Trains jeżdżą na 386.

luser droog
źródło