Ще раз про Embedded
На ДОУ періодично з’являються пости про embedded розробку, але всі вони врешті зводяться до роботи с конкретною платформою і на мій погляд не дають правильного уявлення про галузь і потрібну для неї експертизу.
Тому я хочу почати з визначення, що воно власне Embedded. А це такий тип програмування, при якому програма є невідʼємною частиною чогось більшого і власної споживчої цінності не має. Більше того — програма, як складова кінцевого рішення може бути замінена електронним або навіть механічним вузлом без зміни основної функціональності.
Як приклад годинник. Він може бути чисто механічним, електромеханічним, електронним або програмою на мікроконтролері — вибір визначиться тільки за критеріями ціни-надійності, час він буде показувати так само.
Але діапазон використання вбудованого софта набагато ширше наведеного прикладу. Тому я спробую поділити його на кілька напрямів які потребують різної кваліфікації та підходів до розробки. Цей поділ є чисто субʼєктивним та не претендує на точність та вичерпність, радше окреслює тенденції.
Отже:
1. Application Specific
Рішення, що заміняє певну мікросхему ASIC (Application Specific IC) або кілька мікросхем загального використання на мікроконтролер, що дозволяє замінити модифікацію паяльником на модифікацію софтом.
Приклади: той самий годинник, зарядні пристрої (читаємо напругу на батареї — міняємо струм заряду), «розумні кнопки» (реакція на різну довжину утримання, подвійне-потрійне натискання і так далі, змінна підсвітка), світлодіодні дисплеї — семисегментні та матричні і тому подібний стаф.
Платформа:
Кваліфікація: електроніка з базовими навичками програмування на С. 90% роботи тут схемотехніка, вимог до софта майже нема.
2. Interactive
Пристрій, що має певний рівень інтерактивності — його можна конфігурувати та перемикати режими. Досить часто підтримує мережу та/або USB- інтерфейс.
Приклади: різноманітні прибори — медичні, вимірювальні, промислові контролери, централі сигналізації та розумного будинку.
Платформа:
Кваліфікація: теоретично сильний інженер може грати з двох рук — схемотехніки та програмування, але у дійсності обсяг роботи настільки великий, що його варто поділити на дві ролі — схемотехніка та програміста. Причому останній має бути «справжнім ембедером» — тобто з одного боку розуміти низькорівневі речі типу аналого-цифрового перетворення і підключення периферійних мікросхем, а з іншого думати про архітектуру, розуміти роботу TCP/IP стека, Bluetooth та хмарних сервісів. Також ці платформи дозволяють використовувати скриптові мови такі як Lua та MicroPython.
3. Embedded Linux. Self explained
Приклади: домашні роутери, модеми, сеттопбокси для радіо та ТБ (загалом через розвинутий TCP/IP стек), частково частина приладів з попередньої категорії, які настільки потребують сервіси Linux, що це варто апгрейду заліза.
Платформа:
Кваліфікація: передбачає три ролі — схемотехнік, kernel engineer та software engineer. Ключовою роллю тут буде kernel engineer, задачею якого буде створити BSP (Board Support Package), який включає крос-компілятори, кастомізовані під конкретну плату бутлоадер та кернел, додаткові драйвери. Це вимагає знання як власне хардвару, так і Linux Internals.
Software engineer працює у майже повноцінному Linux, можливо тільки з певними апаратними обмеженнями, тобто від нього не вимагається щось спеціфічне за межами його стеку.
4. Appliance
Дуже потужний пристрій для обробки даних. Тут багато хто не погодиться, але всі ознаки embedded присутні.Приклади: телеком обладнання — світчі, апаратні файрволи, пакет-брокери. Розподілені мережеві стораджі.
Платформа: стандартна серверна або оригінальний дизайн на базі потужного процесора та ASIC-ів для конкретних функцій.
Кваліфікація: хардваром тут і не пахне, тому в цьому випадку це Linux engineer зі знанням специфічного домена (мережі, файлових систем, what else), вмінням писати драйвери та/або пропатчити кернел.
От і все. Так я бачу стан сучасного embedded-програмування та компетенцій потрібних для нього. І те чому два Embedded-розробника можуть геть не розуміти один-одного.
Доповнюйте, критикуйте, задавайте питання.
96 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів