Как программируются повседневные машины?


как программируются повседневные машины (не столько компьютеры и мобильные устройства, сколько приборы, цифровые часы и т. д.)? Какой код входит в Программирование торгового автомата Coca-Cola? Как моя кофеварка принимает заранее запрограммированное время и начинает заваривать кофе через несколько часов, когда это время приходит?

есть ли у этих машин операционные системы внутри них, или это что-то еще более основное? Они написаны в сборке, C или какой-то другой язык?

и, я действительно хотел бы найти какой-то ресурс, который перечисляет эти операционные системы или базовые системы кода, возможно, даже с исходным кодом, если это возможно. Если кто-нибудь знает о таком ресурсе (поиск ничего не дал для меня), это было бы фантастически.

13 140

13 ответов:

большая часть того, о чем вы говорите, - это встроенные системы, где C-это роскошь, часто недоступная. У них нет программного обеспечения в традиционном смысле. Большую часть времени программное обеспечение написано на C, сборке или даже машинном коде. C и ASM требуют, чтобы компиляторы были написаны, чтобы использовать их для этой платформы. Машинный код пишется как двоичный без компилятора.

ваш кофейник и большинство простых систем, как это не несут операционной системы. Они просто загружают из начальный адрес в памяти, и вы положили свой код там. Часто эти системы имеют свой" код", записанный в EEPROMS, которые действуют как жесткий диск системы. Испортить код после сжигания выпускных вечеров, выбросить фишки запишите код на чип, и начать все сначала. Есть более новые чипы FPGA, которые более высокие конечные устройства используют для упрощения тестирования, развертывания и т. д., Но это одно и то же.

машины Кока-Колы, маршрутизаторы, ЕТК. обычно используют ОС реального времени, такие как QNX, ЭМБО, или иногда RTlinux, если Вам ПОВЕЗЕТ. Большинство из них являются проприетарными ОС, которые вы лицензируете за большие деньги, но у них есть компиляторы C, драйверы для работы с оборудованием и т. д.

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

Они используют микроконтроллеры, 8051 является классическим. Это 8-битные или 16-битные ядра, они редко имеют операционную систему. Программист пишет код для инициализации встроенных периферийных устройств и реализации обработчиков прерываний. Используемые языки-сборка и C. жесткие задания отладки требуют встроенного эмулятора.

есть много растущей комнаты за этим, с 32-битными встроенными ядрами (ARM-это 100-фунтовая горилла), которые загружают встроенную версию Linux и / или Java JVM.

Это встраиваемых систем, и будет запрограммирован с использованием очень низкоуровневого языка, такого как C или assembly. В целом такая система будет работать без операционной системы, хотя некоторые новые "повседневные машины", такие как blue-ray DVD-плееры и беспроводные маршрутизаторы, запускают свой код поверх операционной системы на базе unix.


обновление

в соответствии с тем, что говорили другие, многие современные встроенные системы также запускают разновидностью Windows. Это зависит от приложения. Кроме того, во многих пространствах существует тенденция работать на более мощной платформе с операционной системой, обрабатывать такие случаи, как игроки Blue-ray, нуждающиеся в запуске Java, и другие случаи, когда конечный пользователь желает больше функциональности.

давайте подумаем о процессоре на вашем рабочем столе. Все, что он делает, это запускает машинные инструкции, и сам по себе, на самом деле не беспокоится об "операционных системах" или "программах".

вы включаете компьютер, процессор указывает на первую инструкцию, и она начинает выполняться.

на вашем рабочем столе он начинает выполнять "операционную систему". Но нет никакой причины, по которой вы не могли бы заставить процессор выполнять любой набор инструкций, которые вы выбрали. (Это может быть не так очень полезно, Так как вы все равно хотите выводить результаты на экран, и эта функциональность находится в ОС.) В то же время, если ваши машинные инструкции состояли из правильных опкодов, чтобы процессор выводил правильную последовательность сигналов для рисования картинки на мониторе, тем лучше. ОС не требуется.

настольные компьютеры делают так много материал что мы обычно требуем абстракции ОС. Но по своей сути, все, что делает процессор, это выполнить инструкции.

то же самое для процессора в коксовых машинах и кофеварках. Все, что он делает, это выполняет инструкции.

Ну, написание машинных инструкций бит за битом утомительно. Поэтому, как и в случае с настольными компьютерами, мы обычно пишем код на C, который затем компилируется в машинный код. Этот машинный код загружается на встроенный процессор и запускается.

встроенные системы так мало что им не нужны полноценные ОС. Микроконтроллер может иметь 8 или 16 контактов на чипе-по сравнению с десятками контактов в обычном гнезде процессора.

Итак, рабочий процесс-это написать некоторый код (скажем, в C), скомпилировать его на вашем настольном компьютере. Что компилятор генерирует машинный код для встроенного чипа. Затем этот код загружается на микропроцессор (и для этого вам нужно специальное оборудование.) Затем вы включаете чип, и он начинает выполнять инструкции. Просто!

многие устройства, выполняющие определенную функцию, не содержат никакого "кода". Они выполняют свои функции через свойства своих электронных компонентов. Более продвинутые системы, которые могут выполнять множество различных функций или должны быть легко обновляемыми, будут содержать микроконтроллер и какую-то "операционную систему". Поскольку они все еще имеют некоторые ограничения на их функциональность, операционная система будет простой и специально разработанной. Становится еще более продвинутый прибор содержат что-то похожее на компьютер. Он будет иметь более сложную операционную систему, которая может взаимодействовать с различными частями системы. Наконец, вы достигаете устройств, таких как смартфоны, которые содержат полную операционную систему, которая может запускать код уровня пользователя и иметь гораздо больше пользовательского ввода, чем более простые устройства. Однако даже современные процессоры представляют собой по существу очень большие электрические схемы. Каждая инструкция, которую распознает процессор, приведет к тому, что для ее выполнения будет использоваться другая схема функция.

вот некоторые страницы Википедии, которые могут вас заинтересовать:

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

Это очень широкий вопрос, и он во многом зависит от машины. Я могу только догадываться, что большинство этих торговых автоматов управляются микроконтроллерами (8051, PIC, ARM7, чтобы назвать некоторые из наиболее используемых) и редко имеют ОС, а если и есть, то это будут какие-то RTOS, такие как FreeRTOS.

более сложные машины, такие как DVD / BluRay плееры или мобильные телефоны работают поверх софистических платформ, таких как OMAP4. Обычно ОС Unix бежит по ним.

низкоуровневые микроконтроллеры, найденные в бытовых приборах, как правило, не работают под управлением операционной системы. Они выбираются по низкой стоимости, и основными факторами, определяющими эту стоимость, являются количество контактов на чипе (от десятка до пары сотен) и объем памяти внутри (от пары килобайт до мегабайта ROM, от нескольких байт до ста килобайт RAM).

как функция ползучести работает свою магию, бывает, что микроволновая печь может потребоваться многозадачность. В этом случае программист вспоминает свой курс операционных систем и реализует передачу сообщений, планирование задач, асинхронный ввод-вывод и т. д. По мере необходимости!

конечно, ради целесообразности, простоты, размера кода и т. д. функции, как правило, выполняются в зачаточном виде. Часто это зависит от того, как вы анализируете программу, чтобы найти обобщенную функциональность ОС в рамках конкретного кода задачи. Но это долгий путь от жестко планировщика задач операционной системы, и когда у вас есть только несколько килобайт работа с готовой ОС не решение.

взгляните на DigiKey, популярный сайт выбора электронных деталей, чтобы узнать о низкоуровневых MCUs. здесь это их информация об очень дешевом MCU с ЖК-контроллером, например, в кофеварке. Это достаточно легко сделать руководство по программированию и все.

задача операционной системы заключается в предоставлении общего доступа к ресурсам-время выполнения процессора, ОЗУ, ввода / вывода и т. д. Большинство простых микроконтроллерных встроенных систем имеют только одну программу, работающую одновременно, и они сами получают доступ (и управляют) этими ресурсами, поэтому им не нужна операционная система.

врезанные системы типично запрограммированы в C, и иногда в агрегате для весьма времени или оптимизации памяти. Некоторые встроенные компиляторы позволяют чередовать сборка в языке более высокого уровня.

недавно я наткнулся на автомат по продаже сигарет, который запускал Ubuntu (машина перезагружалась, поэтому я мог видеть логотип).

Если вы ищете общую информацию, ищите такие вещи, как" встроенные системы"," soc " (system-on-a-chip). Я бы сказал, что большая часть этих типов устройств работает на языках низкого уровня, таких как C.

забавный факт: Java изначально задумывалась как решение для программирования встроенных систем:http://en.wikipedia.org/wiki/Oak_ (programming_language)

большинств киоски, регистры, привод-через экраны, и даже машины кофе высокого класса и микроволны фактически бегут Виндовс СП или Линукс, как машины серии "Юра Импресса"; вы можете ССХ в их и заварить кофе.

вот скрипт github задания cron для кофе-машины:https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

большинств маршрутизаторы, более новые печи, более новые холодильники, автомобили, ДВД-плееры, различная электроника, более новый дом средства автоматизации, в том числе электрических лампочек, запустить версию АРМ Linux или встраиваемого Linux.

большинство более дешевых устройств, менее $ 20, если они новее, работают на ESP8266 или аналогичном устройстве (можно запустить LUA или уменьшенный сервер узлов за $ 2 навалом-безумно дешево)

http://nodemcu.com/index_en.html

использование FPGA и встроенных систем, таких как 8051, Z80 или других встроенных устройств, таких как PICC, AVR и Arduino, скоро будет заменено на all-in-one/SoC (Система на чипе) системы, такие как ESP8266. Они просто слишком легко программируются и представляют собой полную систему на чипе, которая запускает свой собственный веб-сервер; вы просто включаете их, загружаете свой исходный код, и у вас есть сетевой сервер за $2.

Я вырос, кодируя PICC и AVR и 8051, и мне грустно видеть, как они уходят, но я не касался ничего, кроме ESP8266es в течение многих лет, потому что они составляют 1/10 цены и на порядок легче работать. Вы можете получить их на доски развития с батарейными блоками и взорванными планами штыря для $5 на ebay или $10 на adafruit.

Я слышал от инженера, что пригородные поезда Siemens Light-Rail ходят на 386s.