Встроенное программное обеспечение очень отличается.
В настольном приложении абстракции и библиотеки экономят ваше время на разработку. Вы можете позволить себе выбросить еще пару мегабайт или гигабайт оперативной памяти или несколько 64-разрядных процессорных ядер 2 + ГГц, и кто-то другой (пользователи) платит за это оборудование. Вы можете не знать, на каких системах будет работать приложение.
Во встроенном проекте ресурсы часто очень ограничены. В одном проекте, над которым я работал (процессоры серии PIC 17X), аппаратное обеспечение имело 2Kwords программной памяти, 8 уровней (аппаратного) стека и 192 байта (<0,2 КБ) оперативной памяти. Разные выводы ввода / вывода имели разные возможности, и вы настраивали оборудование по мере необходимости, записывая данные в регистры оборудования. Отладка включает в себя осциллограф и логический анализатор.
Встраиваемые абстракции часто мешают и будут управлять (и стоить) ресурсами, которых у вас нет. Например, большинство встроенных систем не имеют файловой системы. Микроволновые печи являются встроенными системами. Контроллеры автомобильных двигателей. Некоторые электрические зубные щетки. Некоторые наушники с шумоподавлением.
Для меня очень важным фактором при разработке встроенных систем является знание и контроль того, что код переводит с точки зрения инструкций, ресурсов, памяти и времени выполнения. Часто точная последовательность команд управляет, например, синхронизацией сигналов аппаратного интерфейса.
Абстракции и закулисное «волшебство» (например, сборщик мусора) отлично подходит для настольных приложений. Сборщики мусора сэкономят вам МНОГО времени, чтобы избежать утечек памяти, когда память может / может быть выделена динамически.
Однако в мире встраиваемых систем реального времени нам необходимо знать и контролировать, сколько времени занимает процесс, иногда до наносекунд, и мы не можем выбросить еще пару мегабайт ОЗУ или более быстрый ЦП. Один простой пример: при программном затемнении светодиодов с помощью управления рабочим циклом (центральный процессор контролировал только светодиоды вкл / выкл), процессор не может выключиться и выполнить, например, сборку мусора в течение 100 мс, потому что дисплей будет визуально мигать ярким или погаснуть.
Более гипотетический пример - контроллер двигателя, который напрямую зажигает свечи зажигания. Если этот процессор отключается и выполняет сборку мусора в течение 50 мс, двигатель на мгновение отключится или сработает в неправильном положении коленчатого вала, что может привести к остановке двигателя (при прохождении?) Или механическому повреждению. Вы можете убить кого-то.