Як запрограмовані щоденні машини?


147

Як запрограмовані щоденні машини (не стільки комп’ютери та мобільні пристрої, скільки прилади, цифрові годинники тощо)? Який код входить в програмування торгового автомата Coca-Cola? Як моя кавоварка приймає заздалегідь запрограмований час і починає варити горщик кави через години, коли настає цей час?

Чи мають у цих машин операційні системи всередині них, чи це щось ще більш базове? Чи пишуться вони в Асамблеї, С чи іншою мовою?

І я дуже хотів би знайти якийсь ресурс, у якому перераховані ці операційні системи чи базові системи коду, можливо, навіть із вихідним кодом, якщо це можливо. Якщо хтось знає про такий ресурс (пошук для мене нічого не дав), це було б фантастично.


12
Фантастичне запитання! Мені самому було цікаво те саме.
Джонатан Стерлінг

7
Зробіть кілька пошукових / дослідницьких робіт щодо "вбудованих систем" (я навіть додав тег для вас).
mu занадто короткий

Із закритими голосами: Я не вважаю це матеріалом для програмістів, оскільки мова йде про програмування . З іншого боку, це може бути добре на веб-сайті для електроніки SE, просто, тому що буде більше спеціалістів. Відповідь, звичайно, є дещо з усього вищесказаного. Вам потрібно буде вибрати менший клас, перш ніж ви зможете отримати одну відповідь.
dmckee --- кошеня колишнього модератора

Це дуже широке питання, яке охоплює щонайменше 3 інженерні дисципліни та багато відтінків між ними.
Джодрелл

FWIW, можливо, вам буде цікаво грати з платформою мікроконтролера, таким як Arduino (~ 30 доларів) arduino.cc .
пароплав25

Відповіді:


47

Більшість того, про що ви говорите, - це вбудовані системи, де C - це розкіш, яка часто недоступна. Вони не мають програмного забезпечення в традиційному розумінні. Більшу частину часу програмне забезпечення пишеться на C, складанні або навіть машинному коді. C і ASM вимагають написання компіляторів, щоб використовувати їх для цієї платформи. Машинний код записується у вигляді двійкового компілятора.

Ваш кавовий горщик і більшість простих таких систем не мають операційної системи. Вони просто завантажують із стартової адреси в пам'ять, і ви поміщаєте туди свій код. Часто ці системи мають свій "код" спалений у EEPROMS, який виступає як жорсткий диск системи. Накрутіть код після запису випускних карт , викиньте фішки, відновіть код на мікросхемі, і починайте спочатку. Є новіші мікросхеми FPGA, які використовуються пристрої вищого класу для спрощення тестування, розгортання тощо, але це те саме.

Машини Coca-Cola, маршрутизатори тощо використовують, як правило, ОС у режимі реального часу, такі як QNX, EMBOS або іноді 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


35
Люди, кодування в двійковому? Ассамблерам так дурно просто написати, що мені важко повірити. У вас є джерело для цього? Також ця відповідь створює помилкове враження, що всі системи містять мікропроцесор, який запускає код. Хоча це стає все більш популярним, оскільки мікроконтролери та EEPROM (які полегшують налагодження та оновлення) стають дешевшими, все-таки це не варто для дуже дешевих систем або систем, які не сильно змінилися за останні 20 років. Наприклад, деякі цифрові годинники.
BlueRaja - Danny Pflughoeft

6
Це просто занадто рішуче сказано. Вам не потрібно розміщувати компілятор у цілі. Крос-компілятори дуже часто зустрічаються у вбудованому програмуванні.
dmckee --- кошеня колишнього модератора

12
Коксовий апарат, що працює на QNX? WTF - це ще один вид коксу! І так, є компілятор C для кожної платформи, яка зараз постачається в обсязі. Ніхто не хоче писати асамблею, відсутність С буде величезним недоліком. (Деякі компілятори не дуже хороші , правда.)
Potatoswatter

8
Також EEPROM за визначенням може бути переписаний 100000+ разів. Пишіть-раз спогади застаріли; усі популярні сьогодні мікроконтролери мають Flash. FPGA - це зовсім інший ринок від MCU низького класу ... ви не маєте поняття, про що говорите.
Potatoswatter

7
У мене є друг, який працює на автоматах, які досить складні. У них є стільникові радіостанції, слідкують за інвентарем, температурою відстежують, звітують про фінансові показники та відправляють HTTP-дзвінки назад на сервери, щоб зібрати всі ці дані, щоб ви могли відстежувати всі ваші машини. І так, ці марки машин використовують вбудовану ОС. Я думаю, що вони використовують RTLinux за допомогою C. Отже, так, навіть низькопровідна машина стає досить складною, щоб вимагати вбудованої ОС.
кругляки

29

Вони використовують мікроконтролери, класичний 8051 . Це 8-бітні або 16-бітні ядра, вони рідко мають операційну систему. Програміст записує код для ініціалізації бортової периферії та реалізації обробників переривань. Мови, що використовуються, складаються, і C. Для жорстких завдань налагодження потрібен вбудований емулятор.

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


5
Це досить невелика горила, але, мабуть, обмеження потужності є досить важливими з вбудованими великими мавпами;)
Пісквор покинув будівлю

Дякую! Ваша відповідь мені була корисна, і я дав вам підсумок.
Джош Лейтцель

ARM-чіпи теж входять в низький рівень ... з <1USD цінами, 2х2 мм слід.
domen

24

Це вбудовані системи , і вони будуть запрограмовані за допомогою мови дуже низького рівня, такого як C або збірка. Загалом така система працюватиме без операційної системи, хоча деякі нові "побутові машини", такі як DVD-програвачі синього проміння та бездротові маршрутизатори, дійсно виконують свій код поверх операційної системи на базі Unix.


Оновлення

Згідно з тим, що сказали інші, багато сучасних вбудованих систем також використовують аромат вікон. Це залежить від програми. Крім того, у багатьох просторах є тенденція працювати на більш потужній платформі з операційною системою, щоб обробляти випадки, такі як програвачі Blue-Ray, які потребують запуску Java, та інші випадки, коли кінцевий користувач бажає більшої функціональності.


Для уточнення Bluray використовує Java.
Ендрю Маршалл

6
Можливо, але фактичні гравці працюють під Linux і написані на C / C ++
Джастін Етьє

На касових апаратах та бензонасосах тощо було запущено дози (деякі марки), на жаль, деякі з них працюють зараз (продуктовий магазин чи інші лінії самовивірки). Бажання мати телевізор кричить на вас, поки ви накачуєте газ, а танцюючи повітряна куля на екрані, коли ні, призвело до збільшення кінських сил. Аналогічно машини коксу та води з двоосьовим захватом.
old_timer

@ Джустін, ну так, звичайно, Java потрібно сидіти на вершині чогось, щоб функціонувати. Моя думка полягала в тому, що він використовує таку мову високого рівня (порівняно), як Java.
Ендрю Маршалл

@Andrew: А на якій операційній системі працює інтерпретатор Java у синьому промені? І якою мовою написана ця операційна система?
Гюнтер П'єз

18

Давайте подумаємо про процесор на робочому столі. Все, що вона робить, це запускати інструкції на машині, і саме по собі насправді не хвилює "операційні системи" або "програми".

Увімкнувши комп'ютер, процесор вказує на першу інструкцію, і він починає виконувати.

На робочому столі він починає виконувати "операційну систему". Але немає причини, щоб у вас не було можливості процесора виконувати будь-який вибраний вами набір інструкцій. (Це може бути не дуже корисно, оскільки ви все одно хочете виводити результати на екран, а функціональність знаходиться в ОС.) У той же час, якщо ваші інструкції на машині складалися з правильних опкодів, щоб процесор видав правильна послідовність сигналів для малювання малюнка на моніторі, тим краще. Жодна ОС не потрібна.

Настільні комп'ютери роблять стільки матеріалів, що ми, як правило, вимагаємо абстрагування ОС. Але по суті, все, що робить процесор, - це виконувати інструкції.

Те саме для процесора в коксових та кавових машинах. Все, що вона робить, - це виконувати інструкції.

Що ж, написання інструкцій на машинах потроху є стомлюючим. Отже, як і на настільних комп'ютерах, ми зазвичай пишемо код на C, який потім компілюється в машинний код. Цей машинний код завантажується на вбудований процесор і він працює.

Вбудовані системи роблять так мало, що їм не потрібні повноцінні ОС. Мікроконтролер може мати 8 чи 16 контактів на мікросхемі - порівняно з десятками контактів у вашій звичайній розетці процесора.

Тож робочий процес - це записати якийсь код (скажімо, на С), скласти його на настільній машині. Цей компілятор генерує машинний код для вбудованого чіпа. Потім цей код завантажується на мікропроцесор (і для цього вам потрібне спеціальне обладнання). Потім ви вмикаєте чіп і він починає виконувати інструкції. Просто!


2
Дуже дякую! Якби я міг обрати іншу найкращу відповідь, це була б ваша. Я вважаю це дуже корисним. +1
Джош Лейтцель

Сучасні процесори дивно сильно стурбовані операційними системами. Вони надають такі функції, як блоки управління пам'яттю , привілейовані інструкції та режими та апаратну віртуалізацію . Сучасні операційні системи залежать від деяких із цих особливостей. Ось чому ви не можете ( легко ) запустити Linux на невеликих мікроконтролерах.
Міра Веллер

12

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

Ось кілька сторінок Вікіпедії, які можуть вас зацікавити:

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 / Комп'ютерне
інженерія http://en.wikipedia.org/wiki/Microcontroller


Це неправильно. Основним фактором вартості недорогих мікросхем є упаковка, що містить кремній. З цієї причини дешевше замінити дискретну логіку мікроконтролером, як тільки ви дістанетесь до декількох десятків воріт або близько того… і десяток воріт не зробить багато. Усюдисутність MCU призвела до збільшення вартості дискретних воріт, змінивши баланс. Крім того, більшість низьких класів MCU не мають операційної системи.
Potatoswatter

7

Це дуже широке запитання, і це дуже залежить від машини. Я можу лише здогадуватися, що більшість цих торгових автоматів управляються мікроконтролерами (8051, PIC, ARM7, щоб назвати деякі найбільш використовувані) і рідко мають ОС, і якщо вона є, це був би якийсь RTOS, наприклад FreeRTOS .

Більш складні машини, такі як плеєри DVD / BluRay або мобільні телефони, працюють на вершині складних платформ, таких як OMAP4 . Зазвичай на них працює ОС Unix.


Спасибі за вашу відповідь! +1
Джош Лейтцель

7

Мікроконтролери низького класу, що зустрічаються в побутовій техніці, зазвичай не працюють в операційній системі. Вони вибираються за низьку вартість, а основними чинниками, які впливають на вартість, є кількість штифтів на мікросхемі (від десятка до пари сотень) і об'єм пам'яті всередині (від пари кілобайт до мегабайтного ROM, від декількох байт до ста кілобайт оперативної пам’яті).

Оскільки функція повзучості працює своєю магією, трапляється, що мікрохвильова піч може знадобитися для багатозадачності. У цьому випадку програміст пригадує курс своїх операційних систем і за необхідності реалізує передачу повідомлень, планування завдань, асинхронний введення / виведення тощо!

Звичайно, для доцільності, простоти, розміру коду тощо, функції, як правило, робляться рудиментарним способом. Часто від цього залежить те, як ви аналізуєте програму, щоб знайти узагальнену функціональність ОС в коді, що відповідає специфічній задачі. Але це довгий шлях від важко зашифрованого планувальника завдань до операційної системи, і коли у вас є лише кілька кілобайт для роботи, нестандартна ОС не є рішенням.

Погляньте на DigiKey, популярний електронний веб-сайт з вибору деталей, щоб дізнатися про низькопродуктивні MCU. Ось їх інформація про дуже дешевий MCU з РК-контролером, який можна знайти в кавовій машині. Досить просто отримати інструкцію з програмування та все.


5

Завдання операційної системи полягає в забезпеченні спільного доступу до ресурсів - часу виконання процесора, оперативної пам’яті, вводу / виводу і т.д. , отже, їм не потрібна операційна система.

Вбудовані системи, як правило, запрограмовані на C, а іноді і в зборі для екстремальних часових налаштувань або оптимізації пам'яті. Деякі вбудовані компілятори дозволяють перебирати збірку на мові вищого рівня.


4

Нещодавно я натрапив на автомат з сигаретами, який керував Ubuntu (машина перезавантажувалася, тому я міг побачити логотип).



1

Якщо ви гуглитеся навколо загальної інформації, шукайте такі речі, як "вбудовані системи", "soc" (система-на-чіпі). Я б сказав, що велика частина таких типів пристроїв працює на мовах низького рівня, таких як C.

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


Дякую, я обов'язково вивчу це далі! +1
Джош Лейтцель

1

Більшість кіосків, реєстрів, екранів з приводом через електронний апарат і навіть кавоварки високого класу та мікрохвильові пічки насправді працюють під керуванням Windows XP або Linux, як-от машини серії "Jura Impressa"; Ви можете в них заварити і заварити каву.

Ось сценарій роботи github роботи з кавовим автоматом: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

Більшість маршрутизаторів, новіші духовки, новіші холодильники, машини, DVD-програвачі, різноманітна електроніка, новіші продукти домашньої автоматизації, включаючи лампочки, мають версію ARM linux або вбудований Linux.

Більшість дешевих пристроїв до 20 доларів, якщо вони новіші, запускаються на ESP8266 або подібному пристрої (можна запустити LUA або скорочений сервер Node за 2 долари оптом - шалено дешево)

http://nodemcu.com/index_en.html

Використання FPGA та вбудованих систем, таких як 8051, Z80 або інших вбудованих пристроїв, таких як PICC, AVR та Arduino, незабаром буде замінено системами all-in-one / SoC (System on Chip) на зразок ESP8266. Їх просто занадто просто програмувати і є повноцінною системою на мікросхемі, на якій працює власний веб-сервер; ви просто включите їх, завантажте свій вихідний код і у вас є мережевий сервер за $ 2.

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


-2

Я почув від інженера, що поїзди для приміських поїздів «Легко-залізничний» Сіменс курсують на 386.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.