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.
źródło
Odpowiedzi:
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, ponowniespal 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
źródło
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.
źródło
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.
źródło
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!
źródło
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
źródło
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.
źródło
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.
źródło
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.
źródło
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).
źródło
Spójrz na Embedded Systems Magazine i Circuit Cellar
źródło
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 )
źródło
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.
źródło
Słyszałem od inżyniera, że pociągi Siemens Light-Rail Commuter Trains jeżdżą na 386.
źródło