Вбудоване програмне забезпечення дуже відрізняється.
У настільному додатку абстракції та бібліотеки заощаджують багато часу на розробку. У вас є розкіш викидати ще пару мегабайт або гігабайт оперативної пам’яті або якихось 64 + бітових 64-бітних процесорних ядер 2 + ГГц, і хтось інший (користувачі) платить за це обладнання. Ви можете не знати, в яких системах працюватиме додаток.
У вбудованому проекті ресурси часто дуже обмежені. В одному з проектів, над якими я працював (процесори серії PIC 17X), апаратне забезпечення мало 2 клів програмної пам'яті, 8 рівнів (вбудованого) стека та 192 байти (<0,2 кБ) оперативної пам'яті. Різні штифти вводу / виводу мали різні можливості, і ви налаштовували обладнання за потребою, записуючи до апаратних регістрів. Налагодження передбачає осцилоскоп і логіку-аналізатор.
Вбудовані абстракції часто заважають і керують (і витрачають) ресурси, яких у вас немає. Наприклад, більшість вбудованих систем не мають файлової системи. Мікрохвильові печі - це вбудовані системи. Автомобільні контролери. Деякі електричні зубні щітки. Деякі шумопоглинаючі навушники.
Одним з важливих факторів для мене в розробці вбудованих систем є знання та контроль того, що перекладається кодом з точки зору інструкцій, ресурсів, пам'яті та часу виконання. Часто точну послідовність інструкцій контролює, наприклад, терміни для апаратних інтерфейсів хвиль.
Абстракції та "чарівна" магія (наприклад, сміттєзбірник) чудово підходить для настільних програм. Сміттєзбірники економлять багато часу, зменшуючи витоки пам’яті, коли пам’ять / можна динамічно розподіляти.
Однак у вбудованому світі в реальному часі нам потрібно знати і контролювати, скільки часу займає річ, іноді аж до наносекунд, і не можна закидати ще пару мег оперативної пам’яті або більш швидкого процесора при проблемі. Один простий приклад: коли ви робите програмне затемнення світлодіодів, керуючи робочим циклом (процесор мав лише керування світлодіодним контролем), НЕ нормально процесор вимикатися і робити, наприклад, збирання сміття на 100 мс, оскільки дисплей буде видимо спалахнути яскраво або вимкнути.
Більш гіпотетичний приклад - контролер двигуна, який безпосередньо спрацьовує свічки запалювання. Якщо цей процесор вимикає і збирає сміття за 50 мс, двигун на хвилину вимкнеться або вистрілить у неправильному положенні колінчастого вала, потенційно затуливши двигун (під час проходження?) Або пошкодивши його механічно. Ви могли когось вбити.