Ще раз про Embedded

На ДОУ періодично з’являються пости про embedded розробку, але всі вони врешті зводяться до роботи с конкретною платформою і на мій погляд не дають правильного уявлення про галузь і потрібну для неї експертизу.

Тому я хочу почати з визначення, що воно власне Embedded. А це такий тип програмування, при якому програма є невідʼємною частиною чогось більшого і власної споживчої цінності не має. Більше того — програма, як складова кінцевого рішення може бути замінена електронним або навіть механічним вузлом без зміни основної функціональності.

Як приклад годинник. Він може бути чисто механічним, електромеханічним, електронним або програмою на мікроконтролері — вибір визначиться тільки за критеріями ціни-надійності, час він буде показувати так само.

Але діапазон використання вбудованого софта набагато ширше наведеного прикладу. Тому я спробую поділити його на кілька напрямів які потребують різної кваліфікації та підходів до розробки. Цей поділ є чисто субʼєктивним та не претендує на точність та вичерпність, радше окреслює тенденції.

Отже:

1. Application Specific

Рішення, що заміняє певну мікросхему ASIC (Application Specific IC) або кілька мікросхем загального використання на мікроконтролер, що дозволяє замінити модифікацію паяльником на модифікацію софтом.

Приклади: той самий годинник, зарядні пристрої (читаємо напругу на батареї — міняємо струм заряду), «розумні кнопки» (реакція на різну довжину утримання, подвійне-потрійне натискання і так далі, змінна підсвітка), світлодіодні дисплеї — семисегментні та матричні і тому подібний стаф.

Платформа: 8-бітні мікроконтролери — 8051, PIC, AVR, STM8. Bare metal (без ОС).
Кваліфікація: електроніка з базовими навичками програмування на С. 90% роботи тут схемотехніка, вимог до софта майже нема.

2. Interactive

Пристрій, що має певний рівень інтерактивності — його можна конфігурувати та перемикати режими. Досить часто підтримує мережу та/або USB- інтерфейс.

Приклади: різноманітні прибори — медичні, вимірювальні, промислові контролери, централі сигналізації та розумного будинку.

Платформа: 32-бітні мікроконтролери без підтримки MMU (апаратної підтримки віртуальної пам’яті) — STM32, ESP32. RTOS (Real Time OS), підтримка бутлоадера і завантаження іміджів через зовнішні інтерфейси, часто віддалено.

Кваліфікація: теоретично сильний інженер може грати з двох рук — схемотехніки та програмування, але у дійсності обсяг роботи настільки великий, що його варто поділити на дві ролі — схемотехніка та програміста. Причому останній має бути «справжнім ембедером» — тобто з одного боку розуміти низькорівневі речі типу аналого-цифрового перетворення і підключення периферійних мікросхем, а з іншого думати про архітектуру, розуміти роботу TCP/IP стека, Bluetooth та хмарних сервісів. Також ці платформи дозволяють використовувати скриптові мови такі як Lua та MicroPython.

3. Embedded Linux. Self explained

Приклади: домашні роутери, модеми, сеттопбокси для радіо та ТБ (загалом через розвинутий TCP/IP стек), частково частина приладів з попередньої категорії, які настільки потребують сервіси Linux, що це варто апгрейду заліза.

Платформа: 32-бітні SoC (System on Chip) з підтримкою MMU. NXP iMX серії, сімейство плат Rapberry Pi, китайські саморобки. Особливістю платформи є те, що справа їде про досить високі частоти, що потребує навичок і досвіду у розробці і виготовленні схеми та плати, тому основою дизайну стає не окремий чип, а готовий модуль — SoM (System on Module), який включає власне SoC, постійну і оперативну памʼять, схеми тактування та живлення, а також досить часто швидкісні інтерфейси, навколо якого будують закінчений виріб.

Кваліфікація: передбачає три ролі — схемотехнік, 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-розробника можуть геть не розуміти один-одного.
Доповнюйте, критикуйте, задавайте питання.

👍ПодобаєтьсяСподобалось20
До обраногоВ обраному5
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

А що по ЗП у Application Specific бо ще коли асіки тільки набирали обертів дивився у ту сторону — знань треба дофіга, зп не дуже

Нічого не змінилося, досі актуальне правило: чим ближче до заліза, тим менша ЗП.

Та із роками мозок працює хріновіше. Зараз у моєму стеку у голові треба тримати овер дофіга абстракцій,перемикати по 10 разів на день контекст між купою гілок у гіті, хоча б приблизно орієнтуватись в хоча б у 4-х ключових репах, ще не забувати оновлювати знання, а ще з однієї сторони давить сапорт якщо вилітає якась бяка на проді та менеджмент із своїми дедлайнами.
Треба шукати якесь спокійне болотце на період життя 40+
Як один з варіантів так вихід з айті, але я бляха нічого не вмію крім по клаві клацати. Ну ще доречі паяльник в руках навчився таки тримати і трохи у схемотехніці розуміюсь бо це мій профіль та працював у сервісному центрі на останніх курсах

це де так?

перемикати по 10 разів на день контекст між купою гілок у гіті, хоча б приблизно орієнтуватись в хоча б у 4-х ключових репах

щоб випадково не заблукати

Це де в NVidea, AMD, Qualcomm, Aplle, Samsung чи Intel менша ЗП ? Я чув — що NVidea по викупляла у співробітників сток бонуси по найвищій ціні, виходило до десяти мільйонів долларів для деяких.
Так оскільки це технології стратегічні , то так запросто на фріланс біржі чи галері підрядну роботу через інтернет ви в Україні не знайдете, тому попит на ринку аутсорсінгу аутстфангу в край низький. Навідміну від, скажімо Frontend/backend JavaScript. Просто у України, фактично нема та втрачені компетенції на ринку як заліза. Системне програмування напевно ще десь є. Як також показує практика : Тайваню, КНР, та Північної Кореї, ця галузь зараз є стратегічним пріоритетом на рівні як в 40-х роках минулого сторіччя ядерна зброя. Щоби взагалі потрапити на цей ринок, потрібна ціла державна программа. BTW Ферерація в неї пішла та має певні результати, разом із білорусами створили власний літограф на 350 нм. з можливістю переналадки на 140 Так рівень 95 року максимум, тим не менше створили і можуть виготовляти власними силами велику номенклатуру чіпів якраз для вбудованих пристроїв, зокрема військових. Ще три роки тому — в них не було виготовлення резисторів та діодів звичайних. В Україні нема нічого вже 30 років і на цей ринок нас не пускають.

Двушку видел недавно. Как по мне за такой стек — норм.

до якої з груп відносять DSP ?

Если простенькие игрушки для управления к приводами, то наверное к первой. Если приборы на их базе, допустистим теже кардиографы — то ко второй.
А вобще обидно, тема богатая, а занимаются ей в Украине единицы.

Вам ФНЧ чи демодуляцію PAL/SECAM?

Давайте вже SDR на 10 каналів на 6 ГГц.

то не АЦП,
нагадало:
— Ви знаєте що таке сарказм?
— Так, відчувала.

то не АЦП

Ну для мене прилада що з ефіру жене рівні сигналу з даним дискретом — то АЦП, навіть якщо за наукою у нього інша назва :)

— Так, відчувала.

Не забути підняти табличку, як у серіалі.

згадав квн -івский жарт «как нізко пал сєкам»

Вибачаюсь за офтоп, але така думка: останнім часом бачу, як зменшується кількість вакансій на ембед. Як варіант часткової та поступової перекваліфікації для ембеддера нмп непогано виглядає Go. Там є все, що дорого серцю ембеддера — сі-подібний сінтаксіс, велосипеди та низькорівневі домени (усілякі типу мережеві пристрої, SNMP ітп) де пересічні CRUD-ентепрайз-девелопери губляться.
На Go можна «прибитися» до ентепрайз -проекту, таким чином, спектр вакансій для ембеддера збільшується.

В моем понимании существуют два Go.
Первый для бывших пхпшников, а второй на котором написаны Docker и k8s.
С удовольствием занялся бы вторым, но вакансий в Украине по нему нет :(

А ось що треба ще додати:

Частина робіт може бути виконана з FPGA, і написання прошивки для тої FPGA це специфічне програмування, яке теж входить в embedded. Це вже не ASIC, тому що ASIC ви не перепрограмуєте за межами тої малости, що він дозволив у регістрах. Вимагає окремих умінь.

Мабуть, у нас його мало, я зі всіх проєктів, де сам брав участь, тільки одного разу бачив щоб в ньому розробляли з FPGA. Може, тому Євген цього не згадав. Але використання готового, про яке я знав, що там FPGA — було більше одного разу.

Вопрос дискуссионный, возможно да, возможно нет.
Как и с тем же торрентом и любым стандартным юзерспейс софтом.
Ведь он может самостоятельную ценность за пределами системы.

Ведь он может самостоятельную ценность за пределами системы.

Кто «он»? Прошивка делается под конкретную задачу в конкретном изделии, перенос её под что-то другое почти всегда невозможен.

Кто «он»?

Стандартный юзерспейс софт.

С FPGA вопрос — а чем текст программы на Verilog (или на чем сейчас принято писать), отличается от файлов .sch и .pcb стандартной EDA?

С FPGA вопрос — а чем текст программы на Verilog (или на чем сейчас принято писать), отличается от файлов .sch и .pcb стандартной EDA?

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

просто векторні картинки з якими не можна взаємодіяти

Нет. Векторная картинка это gerber файл. А файлы схемы и платы это модель со списком цепей.
Эти модели можно верифицировать и скармливать симуляторам.

Ardupilot/PX4/BetaFlight? QMK/ZMK?

Для FPGA також не обов’язково все з нуля велосипедити, куча модулів перевикористовуєтся між девайсами

той же gcc шароварний як на рахунок середовища під FPGA?

gcc — opensource/gpl, а не shareware... для деяких FPGA також є opensource тули, але навіть для пропієртарних тулів результати компиляції завжди мають виключення/або іншу ліцензію яка дозволяє використання в кінцевих девайсах...

Не зовсім зрозуміло в чому питання?

Якщо ви про кости розробки — то там софт це далеко не найбільша частина :)

На той же Xilinx для невеликих чипів є WebPack безкоштовний

для деяких є деякі, гиги
як Keil. ±

Все ще не зрозуміло в чому питання :)

Ви багато разів патчили/читали код gcc, що б мати бенефіти вид того, що він опенсорсний?

А про кости — для малих чипів воно і так безкоштовне, а для великих — це не принципово на фоні інших костів

нарещі дойшло до жирафа про поріг входу

Поріг входу у будь який hardware набагато вищій ніж для софта, ну за винятком варіантів коли ви готові модулі в картонну коробку термоклеем ліпите. Якщо ви робите повноцінній девайс, то вартість stm32 vs xc6slx9-16-25 буде не дуже відрізнятися, а в кількості вільніх ніжок та интерфейсів може бути суттева різниця.

Зрозуміло що воно не завжди надо

часом CPLD з FPGA не перепутали?

spartan це зовсім не CPLD вибачте...

Я з Spartan більше як 15 років тому «бавився», не можу зрозуміти, що ти хоч донести? Що пора іти в хардварщики бо там бабло?

OK. :)

Ті назви що я знаю з першого вашого набору, практично це все один вироб, міняються неважливі речі.
Наприклад, в QMK є тільки один метод перебору матриці — ставити 0 на рядок (чи стовпчик) який зараз вивчається, один метод (не завжди кращий) відлову ghosting, і так далі. А якщо мені треба, навпаки, ставити 1 на активний рядок? Якщо конденсаторна клавіатура і тоді треба давати не рівень, а імпульс визначеної тривалости? На все — дописувати, міняти...
Модулі для FPGA будуть точно так же відзеркалювати тільки якусь базову задачу. І розробник, перш за все, має мати достатньо скиллів розуміти, наскільки існуючий код підходить до його задачі, а наскільки і в чому — ні.

ну бекенд вебсайту також 1-до-1 на інший не перенесеш

кастомізація і в QMK і в ardupilot/px4 дуже далеко від «неважливих речей» насправді, мабуть ви просто не достатньо глибоко копали :)

Про Ardupilot знаю, вважайте, нічого. QMK копав, про нього і кажу. Що б там ні кастомізували, це залишається клавіатурою з достатньо жорсткою логікою бази, всі ці шари і пр. не міняють її. Я саме про це. І то на 99% це файли конфігурації. (Для FPGA це так легко вже не зробиш, у загальному випадку.)

Дякую за статтю та класифікацію різних embedded напрямків, корисно!
А у якому напрямку більший шанс знайти роботу? Тобто кількість вакансій.

Виглядає що «3.Embedded Linux kernel engineer», так як це людина, яка є і embedded розробником, і software engineer якщо треба.
Однак це мабуть і найскладніша роль, за необхідним обʼємом знань.
Не помиляюсь?

В лінуксі багато чого можна зробити в юзерспейсі, але це не далеко від ядра. Все рівно рано чи пізно прийдеться залізти в код ядра.

Мені не довелося

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

Ну соременная инфраструктура хотя бы того же Zephyr очень даже радует зрелым подходом.

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

Это от стека не зависит. Все хотят, чтобы и кластеры разворачивал и картриджи в принтере менял

Зараз воєнка усіх бере, в кого 3-5 років досвіду з купою різного заліза. А в кого нема — не бере.
Зрештою, індустрія відійшла від старої практики skill matrix для команди, і тепер хочуть, щоб кожен працівник знав усе, що використовується на проекті.

тільки з.п. там на оутсорсні

В нас такого нема. І, надіюсь, не буде, поки я живий

Зрештою, індустрія відійшла від старої практики skill matrix для команди, і тепер хочуть, щоб кожен працівник знав усе, що використовується на проекті

Когда-то я ушел в программирование от мелочного жмотства «отечественного производителя», теперь он нас догнал.

Виглядає що «3.Embedded Linux kernel engineer», так як це людина, яка є і embedded розробником, і software engineer якщо треба.

Там же було сказано:

Кваліфікація: передбачає три ролі — схемотехнік, kernel engineer та software engineer.

Візьмемо раутер: у нього, наприклад, є веб-морда. Серверна частина, скоріше за все, буде на чомусь компільованому, але б я і Django не здивувався:) але там треба типового фронтендера що вміє в CSS, React і інші. Я серйозно — ось у мене зараз на виході TP-Link Archer C6, у нього типова single page application, тягне jquery, cryptojs, foldertree, excanvas і ще багато чого, що я з моїм розумінням вебу на рівні html3.2 не знаю, що воно і для чого. Вважати його embedded розробником? Я розумію, що приклад маргінальний, але саме на цьому ми можемо позначати межі неприйнятного.

Дивлюсь на той раутер далі. Модуль DHCP. Йому ніць не треба знати про ядро, крім того, що це Linux — там демон на порту 67 або через pcap. На чому зроблена мережевуха, яка версія ядра, звідки береться мак і все таке — йому до біса. Приходить на готове, виконує свою маленьку частинку.

Firewall, NAT. Тут дещо складніше, треба знати, цьому ядру давати iptables, nftables, чи щось інше.

Оновлення прошивки. Ось тут нарешті щось починається специфічне для конкретного заліза. Куди скласти які частини нової прошивки і як. Зазвичай є якась бібліотека з API. Хоча я бачив і варіант з демоном, який все знає і до якого ходять JSONʼом поверх чогось дивного:)

А тепер — трам-пам-пам — скоріш за все >90% всього зроблено не виробником конкретної моделі. Є референсне залізо і референсний софт від когось — фірма, яку можуть зовсім не вказувати і яка робить «болванки» для 20+ виробників. Вони покупають, доробляють під свої манери і смаки і викатують таку доробку. Той хто її робить — може не знати навіть яка система команд процесора. І таке траплялось. Ви не бачили, як в yocto три шари патчів модифікують якийсь компонент? Я з цим працював, і розплутував такі шари патчів, коли один десь треба було видалити, а всі інші ланцюгом за ним вже не накладались. «Повбивав би» (ц).

Ось таке воне промислове життя. Ну ніде там звідки взятись тому суперпуперфулстек знавцю всього від тонкощів перегріву конденсаторів і до останньої версії CSS. Забудьте.

Серверна частина, скоріше за все, буде на чомусь компільованому, але б я і Django не здивувався:)

Flask :) Сам писал API.

Firewall, NAT. Тут дещо складніше, треба знати, цьому ядру давати iptables, nftables, чи щось інше.

На хорошем железе скорее всего будет хардварный акселератор.

скоріш за все >90% всього зроблено не виробником конкретної моделі. Є референсне залізо і референсний софт від когось — фірма, яку можуть зовсім не вказувати і яка робить «болванки» для 20+ виробників.

Bingo!
Собсно говоря и enterpraise-level техники это тоже касается.

Ви не бачили, як в yocto три шари патчів модифікують якийсь компонент?

Yocto — дистиллированное зло. Отрыжка кровавого Энтерпрайза в эмбеддед отрасли.

На хорошем железе скорее всего будет хардварный акселератор.

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

Flask :) Сам писал API.

Ну да, для Django там нет базы данных. Хотя могут и придумать. Табличка на одну запись «настройка WAN». И sqlite на флэшке.

Yocto — дистиллированное зло. Отрыжка кровавого Энтерпрайза в эмбеддед отрасли.

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

10 лет назад в домашних роутерах были акселераторы. Как раз потому, что проц не успевал обрабатывать трафик.

10 лет — большой срок даже сейчас.
Haswell-based Xeon в моём десктопе гоняет AVX в 3 раза медленнее, чем лаптоп на Core 12gen покупки прошлого года. Пора апгрейдиться...

там нет базы данных. Хотя могут и придумать. Табличка на одну запись
«настройка WAN»

Json на пару килобайт. Для платформы помощнее — Redis.

А у якому напрямку більший шанс знайти роботу? Тобто кількість вакансій.

На мой взгляд везде одинаково с учетом наличия специалистов.
1. Вакансии лучше искать по тэгу электронщик.
4. Пересекается с обычным системным/серверным программистом.
Если вкатываться с Андроида, но наверное на 3, с юзерспейсом вопросов не будет, надо будет прокачать кастомизацию Линукса. Мануалы по Yocto/Buildroot в помощь.

Виглядає що «3.Embedded Linux kernel engineer», так як це людина, яка є і embedded розробником, і software engineer якщо треба.

Тут насколько знаний хватит. А после Линукса RTOSы кажутся детским садом, однако за них тоже платят.

Таки все вірно. (Я подумав спочатку придовбаться по дрібничках, але вони ніць не змінять у основі.)

И ассемблера PIC16. Мне недано предложили с ним поработать — я глянул и охуел.

там не більше 100 команд, простіше С++11

И аппаратный стек на 4 (?) уровня.

Щось не пригадую, щоб заморочувався коли апаратним стеком. Останній раз це для 8048/8051 20+ років тому.

З того часу, знаю що може бути в процесора L1/L2 кеш. Одного одного разу забули включити кешування, тобто проставити галочку в IDE, потім 2 тижні шукали як направити, чому програма не працює як очікувалося 10х швидше (при зміні процесора з тактовою частотою 10х відносно оригінального).

Щось не пригадую, щоб заморочувався коли апаратним стеком. Останній раз це для 8048/8051 20+ років тому.

Не-не, в 8051 стек программный. Там прикол в двух индексных регистрах, один для .data другой для .text
А в укуренном PIC не больше четырех вызовов функий в глубину и никакой рекурсии.

Что-то прямо ущербное из пиков. Даже грустный poc16f877 и прости Господи pic16f690 имеют аппаратный стек на 8 уровней, да ещё и слово 13 или 14 бит, уже не вспомню сходу. Но доставляет хранение констант размером больше 8 бит, в плане из оптимальности

А що там «розкривати»? Всі мови програмування однакові якщо вимкнути ексепшени та RTTI, то С++ це «Сшка з синтаксичним цукром» ))

А то, що люди називають «Arduino scripting language», то ніразу не скріпти а «самий справжній» C++ ))

І що?
Зато темплейти, «і навіть» ламбди «з коробки» ))

Ні, С++ має деструктори. Тому RAII.
І може легко збільшувати рівень абстракції, енкапсулюючи що завгодно.

Так, має, але це також синтаксичний цукор :)
В Сшці можна досягнути «всіх тих самих ефектів» ручками (що робити, втім, як на мою скромну думку, є клінічний мазохізм))

Особливо печально коли ото люди «перевинаходять» VMT й «ручками» заповнюють ті всі таблички, танці з бубном довкола ініціалізації і так далі...

(Іншими словами я свідомо «за синтаксичний цукор» і проти «отого всього шаманізму» на макросах, типу покруча uthash і подібного, коли ними намагаються замінити темплейти)

RAII, наскільки мені відомо, в старих стандартах С не досягався без пропрієтарщини.

Або просто дісципліни. Всюди де воно треба — флаг виконання ініціалізації, вихід з одної точки коду після мітки cleanup, під цею cleanup зачистка всього зробленого в функції. В MISRA десь так и вимагають.

Так, але це сумно та нецікаво (звісно, за бабло клієнта — все що забажаєте))...

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

PS. Фанати Rust мають рацію: примусити кожного явно описувати час життя та правила овнершипа — єдиний спосіб тримати лад на великих проектах...

В «няшній Сшці» його і далі нема...
всі оті __attribute__(( cleanup(( чототам )) )) - то нестандартна самодіяльність авторів компіляторів...

втім С++ також бракує «такого defer як в go» щоб не городити класи...
що, втім, вирішується через макроси (й то може виглядати «майже як go»)

Boost.ScopeExit існує так давно, що можна вважати стандартом... угу, він на макрі, і що з того.

та тих макрів існує вагон й маленький візочок, навіть самописних на проектах, без притягування «монтстра» Boost та без потворного BOOST_SCOPE_EXIT_END, а так, що синтаксично виглядає буквально майже як go... не «маже», а краще ніж в go« у вигляді DEFER{то, що треба задеферити} без якиких лєвих func))

... але, все ж, «нативна» фішка була б веселіше))

темплейт «під капотом»,
а сам «синтаксис» через макро:

#define defer auto TOKENPASTE2(__deferred_lambda_call, __COUNTER__) = deferrer << [&]

тому після того умовне struct Sample{ int defer; }; вже не заканає...

Особливо печально коли ото люди «перевинаходять» VMT й «ручками» заповнюють ті всі таблички, танці з бубном довкола ініціалізації і так далі...

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

От якраз ексепшени варто «забанити»...
Ексепшени, в загальному випадку не можуть перетинати межі модулів,
а для алокаторів та алокацій завжди правило «поверни туди, де взяв».

Тому єдине, що настравді завжди працює, то підхід за лінком.

Навіть якщо вся кодова база на C++ але бінарі компіляться різними тімами (аплікуха з плагінами), різними компіляторами, то воно не працюватиме, й зовнішній інтерфейс повинен бути Сшним з Сшними АПІшками й простими Сшними структурками...

Втім, це не скасовує того, що зручно поюзати «синтаксичний цукор» всередині модуля :)

В одному проєкті 4-го рівня за класифікацією автора статті — вендор заліза і по сумісництву хазяїн BSP навʼязав моніторинг стану заліза через зробленого на nodejs демона, який займав близько ⅓ прошивки. Коли прийшла вимога скоротити обʼєм, думаєте, змогли примусити його переписати на більш легке? Ні, замість цього наказали викинути Python з наших компонент, де на ньому була написана вся ініціалізація. А ще там на C писали (і регулярно крешились) там, де краще за все був би Go.

А в ще одному я бачив бінарник 250MB розміром. Це, типу, головний компонент. Звісно, C++ с зневаджувальною інфою, з мегатонною бібліотек від всіх кого завгодно, вивід ldd не вміщувався в 50 рядків, а ще щось довантажилось дінамічно.

через зробленого на nodejs демона, який займав близько ⅓ прошивки

Це вже було з мініфікацією?

Я слів таких не знаю;\ а зараз не спитаєш.

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

Більше того — програма, як складова кінцевого рішення може бути замінена електронним або навіть механічним вузлом без зміни основної функціональності.

Ну от фіг торрент, вбудований у Wi-Fi роутер, котрий завантажує кіно з мережі тобі на флешку, доки ти вигулюєш дитину чи собаку, заміняється механічним вузлом...

Взагалі — ось вам чатик t.me/embeddedkyiv

Эээ с учётом той сложности процесса, которая там происходит, ASIC будет содержать процессор из каких-то распространённых ISA, память программ, память данных и всё такое :)

Если пойти на принцип — процессор не обязательно, можно формировать запросы-ответы на регистрах.
Хотя по сложности такой ASIC наверное будет как современная видеокарта 😀

Хотя по сложности такой ASIC наверное будет как современная видеокарта 😀

Именно. Потому такой вариант не учитывается.

Ничего, я еще помню АТС собранные на матрицах реле. ИЧСХ — работали.

Я тоже. Но там был настолько простой алгоритм, что аналогом будет не торрент, а что-то типа TFTP.

Так современная видеокарта это и есть полностью программируемый процессор, еще и 100500 раз скопипастенный

Китайцы вполне себе лепят дешёвые контроллеры для сата и нвме дисков. Вся суть в том, что там конечный автомат лупит и почти нет кода.

Только минимум, для считывания vendor-specific конфигурации и минимальной конфигурации (количество линий, режим, количество namespace, submission & completion queues, наличие и размер буфера внешнего sram/dram)

Дёшево и сердито

Йооц, я його намагаюсь читати, але він — типовий показник того, що в формат чата упхати те, для чого треба форум — дає тільки щільний потік інформаційного сміття...

щільний потік інформаційного сміття

Але ж весело?

Ну от фіг торрент, вбудований у Wi-Fi роутер, котрий завантажує кіно з мережі тобі на флешку, доки ти вигулюєш дитину чи собаку, заміняється механічним вузлом...

Міжна, якщо вважати релюху механічним вузлом. Бо на реле можна зробити елементи І, АБО, НІ, а отже — тригери (робив у дитинстві), регістри, далі лічільники (теж робив) тощо. Правда розміри, надійність та енергоспоживання цього комп’ютера нікому не сподобаються.

Див. також uk.wikipedia.org/wiki/Z3_(комп’ютер

Підписатись на коментарі