Как стать автором
Обновить

Вы в Самом Деле Хотите Стать Программистом Микроконтроллеров?

Уровень сложностиПростой
Время на прочтение52 мин
Количество просмотров67K

В этом опусе я написал о буднях программиста микроконтроллеров в России.

Что вообще пишут программисты МК и на чем?

Основной язык программирования это С. Языку С уже более 50 лет. Язык С потихоньку сдает свои позиции. Кроме микроконтроллеров С уже практически никому не нужен. Навыки программирования на С очень слабо конвертируются. В свое время, видимо, на С написали компилятор для С++ и нужда в С для desktop как таковая отпала. Есть конечно DeskTop проекты написанные на С: Git, JVM, MySQL, Nginx, PostgreSQL, TaranTool, WallArm, однако вероятность, что в этих проектах можно работать из РФ да еще и с опытом из электроники мала. A сам язык С остался для сборки артефактов для микроконтроллеров с экстремально малыми ресурсами (для automotive ECU, SIM карт, IoT). Хотя и сейчас большинство компаний в Евросоюзе уже давно как и микроконтроллерные сборки собирают на С++ 17 и выше. Вероятно, что язык программирования С для МК вскоре и вовсе войдет в историю.

Еще программистам MК приходится обсчитывать аналоговые цепи и вычислять какие-то сложные 8-этажные формулы для настройки PLL таймеров и строить графики. Обсчитывать сигналы post-procсessing(а) в трактах цифровой обработки сигналов (ЦОС/DSP). Для этого практикуют бесплатный интерпретатор Python и модули matplotlib, math, numpy, scipy и т. п.

Главным образом программисты микроконтроллеров составляют MCAL, HAL, Board Support Package (BSP), пишут драйверы для новых умных периферийных ASIC чипов c управлением по интерфейсам I2C/SPI/MDIO/1Wire/UART/SMBus/PMBus, пишут загрузчики, портируют RTOS(ы) на разные процессорные ядра, пишут код-генераторы, скрипты сборки, составляют модульные тесты, изредка производят рефакторинг, часто чинят ошибки в Legacy коде, изредка что-то изменяют в коде Assembler(а), который запускается до вызова функции main().

Иногда программист МК даже ничего и не пишет сам вообще! Важно уже не сколько уметь программировать, сколько уметь составлять модульные тесты, собирать, улучшать из готового кода из интернета. Какие-то исходники можно взять из github или ядра Linux. Можно раздербанить Zephyr Project. Там есть код на многие темы. Драйверы для множества чипов. Важно уметь верифицировать найденные сорцы и аккуратно подключить их к нужной сборке.

Программирование на Си в Linux

Справедливости ради стоит упомянуть, что С используют для создания модулей ядра Linux. Как вариант можно пойти работать туда. Но надо быть готовым, что образ дистрибутива будет собираться по часу. В Linux проектах ещё больше бюрократии и секретности, чем в проектах на МК. И С кода в Linux пишут существенно меньше. Разработка в Linux похожа на прикладывание костылей. Вся эта методология device tree overlay - это по сути узаконивание костыллинга и быстрых заплаток в разработке.

Часто Linux программисты даже никогда не видели схемотехнику своего target устройства SBC и datasheet(а) на SoC (так как это секрет компании). Программисты Linux работают в абстрактных условиях. Редактируют дерево устройств DTS, путешествуют по файловой системе, пишут скрипты на Bash и Python, исправляют баги в JavaScript(е) Web GUI и выносят ведрами баги из кода User Space процессов для отладки, перекраивают дерево устройств *.dts, добавляют драйверы чипов в загрузчик U-Boot и пишут очень много документации и инструкций (Doc Food(а)) на LaTeX.

Они в принципе не работают в Windows. Собирают ядро для Linux из-под Ubuntu или CentOS или на удаленных серверах целыми месяцами напролет глядя в черный экран терминала vim по ssh. Тоска зелёная!

Как проходят собеседования на роль программист микроконтроллеров?

Собеседования на роль программист микроконтроллеров это вообще тема для анекдотов. Первый вопрос, который обычно задают программистам микроконтроллеров грубым голосом звучит так:

Ты будешь печатные платы разводить?

Это, напомню, на роль "программист". Второй вопрос как-то ближе к теме. Звучит так:

Ты будешь на ассемблере программировать?

Еще есть такие варианты

Согласен заниматься реверс инжинирингом?

Если ответы нет/нет/нет то работу не получишь.

В Российском рынке электроники есть одна любопытная закономерность. Чем более ответственный проект и разработка тем, как не странно, проще туда устроиться на работу программистом микроконтроллеров. Мой самый простой job offer, ( где я, к слову, накосячил во всём, опоздал на 45 минут, пришел в шортах и гавайской рубашке, ничего не решил на тестовом задании), я получил в компанию, которая разрабатывает авионику для российского пассажирского авиалайнера MC-21. А самое-самое трудное собеседование в моей жизни, где меня гоняли по всему MIT(шному) курсу Computer Science было в компанию, которая разрабатывает электронную папироску для вэйперов.

Также было очень легко получить предложение работы в компанию, которая разрабатывает активные фазированные решетки АФАР для российских ударных дронов. И одновременно неимоверно сложно получить job offer в российскую компанию, которая делает офисную поилку с газировкой (там на устройстве поилки одна кнопка всего).

Кто-нибудь может объяснить мне, что, собственно, происходит в российской электронике?!

Программирование микроконтроллеров это даже не профессия

Программирование микроконтроллеров это зачастую даже не отдельная профессия. В вакансиях часто пишут что нужен программист DeskTop, там куча требований типа С++, QT, Linux Kernel, и в самом конце в обязанностях приписка программирование микроконтроллеров.

Или вакансия инженер-схемотехник. В требованиях трассировка печатных плат в Altium Designer, черчение корпусов блоков, а конце приписка программирование микроконтроллеров.

Также программирование микроконтроллеров можно встретить в требованиях к FPGA разработчика: Verilog, Vivado, Qvartus и в конце программирование микроконтроллеров.

Современный российские НИИ ну никак не хотят признавать программирование микроконтроллеров в отдельную специальность.

Если вы устроитесь только программировать микроконтроллеры, то Вас оформят максимум на треть или четверть ставки.

Где работать программистом-микроконтроллеров? (Black Mesa по-русский)

В России программисты МК в основном работают в компаниях, которые делают госзаказ на военную технику, так называемые "аналогов нет"(ы).

Обычно чтобы попасть на рабочее место надо подойти к промзоне размером с аэропорт. Пройти вдоль советского вафельного бетонного забора метров 300.

Пройти сквозь вонючее КПП со злым как собака охранником. Пройти 300 метров по внутреннему дворику промзоны мимо полноростовых памятников красных директоров этой организации. Зайди в ангаро-образное здание (Лямбда-комплекс сектора F), пройти ещё 3 турникеты, потом пройти еще 400 метров по коридорам и вот вы у своего верстака.

У каждой турникеты есть будка в которой сидит злой пожилой сторож, который может нажатием на кнопку заблокировать турникету, если ты ему не понравился. Курящие люди ленятся выходить на улицу через всё зоны доступа (турникеты) и предпочитают курить свои папироски прямо в уборных, которые уже к 13:00 превращаются в газовые камеры.

по пути на работу программиста-микроконтроллеров приходится каждый день ходить примерно по таким коридорам
по пути на работу программиста-микроконтроллеров приходится каждый день ходить примерно по таким коридорам

В самих помещениях как правило навалена всякая арматура и надо двигаться аккуратно чтобы не порвать себе штаны.

Здания старые настолько что даже ступеньки раскрошенные. Даже не знаешь куда ногу поставить. Подняться на 6й этаж - это как взобраться на угольный террикон. Лифты есть, но их включают только когда приезжает какой-то важный гость.

Вы не поверите, но вот так выглядит один из центров микроэлектроники в России. А-ля 19 век.
Вы не поверите, но вот так выглядит один из центров микроэлектроники в России. А-ля 19 век.

Плюс всяческие ритуалы. 10% вероятность, что на работе перед входом вас будут принуждать наклеивать на обувь антистатические наклейки, а иногда и облачаться в защитный костюм (душный комбинезон).

Типичное будничное рабочее место программиста-микроконтроллеров. Романтика...
Типичное будничное рабочее место программиста-микроконтроллеров. Романтика...

В России работа программиста MK происходит как правило в гаражных или около гаражных условиях. Или на чердаках-бардаках как тут

Типичная среда обитания программистов-микроконтроллеров
Типичная среда обитания программистов-микроконтроллеров: чердак-бардак

Провода. Высокое напряжение. Много какого-то металлолома возле компьютеров. Хлам на столах с горочкой. У вас под мониторами всегда будет валяться всякое барахло (отладочные модули, провода, чехлы, разъёмы, болты).

Вот так примерно выглядит минималистический верстак программиста микроконтроллеров
Вот так примерно выглядит минималистический верстак программиста микроконтроллеров

Вероятно, будешь работать по соседству с шумным охладительным оборудованием, так как электронные платы надо подвергать климатическим испытаниям. Там же рядом электронные платы будут сушиться после покрытия лаком.

Что разрабатывать?

Основной источник работы - госзаказы и ОКРЫ. Конечный программист МК как правило даже не знает, что за комплекс разрабатывается в организации. Все платы называются "вычислительный модуль #N". ТЗ для программиста МК под запретом. На рабочем компьютере нет доступа в сеть интернет. Монитор становится черным при запуске браузера. Утилиты можно устанавливать только через пароль руководителя отдела. Пароль для открытия диспетчера устройств, пароль, чтобы прописать путь в переменную Path, пароль на установку драйверов, пароль на удаление папок.

Любое электронное устройство, которое вы будете делать скорее всего можно будет назвать одним словом: переходник! Типичное IoT устройство это с одной стороны, например, датчик температуры на шине I2C, a c другой стороны WiFi модуль. Телематика - это тоже переходник: с CAN на LTE и т д. Всё, что я делал в российской электронике 10 лет подряд это переходники с одного интерфейса на другой интерфейс. Маршрутизаторы, модемы, телематика, СКУД(ы), аудиосистемы, IoT. Переходники. Переходники. Переходники.

Задач по программировать микроконтроллеры в России очень мало. На район с населением 300k человек будет всего 3-5 вакансий. Работу программиста микроконтроллера найти сложно. Даже если Вы найдёте работу, то Вы сделаете всё за год, даже если будете писать всего лишь по 150 строчек кода в день. У вас буквально Flash память закончится за год. Прошивки пишутся быстро, особенно когда есть заготовки программных компонентов: MCAL, драйверы ASIC чипов, connectivity, sensitivity, computing, storage и control.

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

Если Вы будете отказываться, говоря, что хотите и дальше программировать микроконтроллеры дальше, то Вас станут изживать как проблемного сотрудника, перестанут давать новые задачи, назначат какую-н скучную рутину, придумают какую-нибудь провокацию (часто с участием женщин), спровоцируют на конфликт. Поэтому в среднем программисты МК в России за 10 лет меняют работу от 7 до 15 раз!

Ещё программисты микроконтроллеров часто работают в развёртывании так называемых АСУ ТП. Это разработка оборудования для управления котельными, электроподстанциями, оборудование для электро щитков, оборудование для очистных канализационных сооружений. По сути оборудование для ЖКХ. Про это можно почитать тут
https://habr.com/ru/articles/680144/
Работать приходится в соответствующих не очень приятных местах на объектах. Как Карлсон лазить по крышам. Это крайне специфическая область, где сделки заключаются в основном через откаты. До зарплат разработчиков доходят сущие крохи.

Какие командировки у программистов микроконтроллеров?
Программистов микроконтроллеров обычно посылают в командировки в самые некомфортные места, которые себе только можно представить: настраивать СКУД в медные подземные шахты 300 метров под землей за полярным кругом (это где ночь длится полгода), настаивать оборудование в атомных электростанциях (ходить в свинцовых трусах), проверять телематику в открытых карьерах размером 4 на 8 км для добычи какого-то "недоступния" (глотать там пыль), перепрошивать электронные платы на подводных лодках (были случаи когда с инженером ушли в море и забыли его предупредить об этом), тестировать эхолоты на Белое море (с промежуточной остановкой на Соловецком ГУЛАГЕ), тестировать АФАР радары в зоне СВО.

Кстати, в профессии программист микроконтроллеров часто приходится отлаживать радио электронную аппаратуру (РЭА) прямо на улице, ибо GPS и дальнобойную радио связь в офисе ну ника не проверишь не отладишь. И, как правило, по закону подлости такая out-door отладка выпадает на декабрь-январь-февраль...Чтобы Вы понимали, за окном минус -29... -35 градусов по шкале Цельсия, сильный холодный леденящий ветер. Солнце слепит глаза. Даже на смартфоне не видно, что написано, шум от пролетающих фур на трассе. Приходится облачаться в ватники, двойные штаны, балаклаву, варежки, шапку-ушанку. На щеки и губы намазывать толстый слой крема от обледенения лица.

Поэтому такие работы у нас шутливо называется "выходы в открытый космос".

Да это просто романтика, господа! Только ответьте самому себе честно, Оно Вам надо?

Тестирование электронных плат кастрюлей

Особенность этой работы в том, что Вам постоянно будут нужны всяческие примочки, переходники, шлейфы, дефицитные импортные товары. Такие вещи можно купить только в спец магазинах через интернет по предзаказу и предоплате или на Aliexpress. Заказав примочку вам потом ждать два три месяца доставки. Потом ехать забирать эту посылку. Естественно работа в этот период ожидания примочки простаивает. При этом каждые два дня схемотехник с Вас спрашивает результат, которого Вы не можете дать без тех самых примочек, которые застряли где-то на таможне.

В одном российском НПЦ я был свидетелем одного очень оригинального способа тестировать электронные платы (PCB). Вот так это выглядит... Собирают электронную плату (размером с книжку), накрывают плату большой металлической кастрюлей вверх дном, подают питание на электронную плату под кастрюлей. В случае, когда изделие нормальное - ничего не происходит. В случае же, когда изделие бракованное внутри кастрюли раздается глухой хлопок и стук компонентов о стенки кастрюли. Иногда даже кастрюля подпрыгивает! А по ее периметру вспыхивает желтое кольцо. После снятия кастрюли выходит облачко дыма. Вот так в России порой тестируют Hi-Tech электронику.

Doсker по-русски

В российских военных НИИ\ППК\ФГУП, когда заканчивают разработку программы для электронной платы прибора, то чтобы была возможность потом вернуться к исправлению багов просто берут DeskTop на котором компилировались прошивки, монитор, клавиатуру и даже мышку, обманывают всё это в комок изолентой (установкой как в аэропортах для обмотки багажа) и относят комок на неотапливаемый склад. А программисту просто выдают другой шумный как пылесос DeskTop-компьютер. И у начальства там ещё язык поворачивается называть это хорошими практикам разработки!

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

планёрка у программистов-микроконтроллеров
планёрка у программистов-микроконтроллеров

Они привыкли неделями напролёт на работе ничего не делать, как какой-то трудовой резерв. Каждый день они отчитываться не могут. Не привыкли... Либо просто будут не приходить на планерку так как нечего сказать. А нечего сказать, так как ничего вчера не делал.

Потом если взять ортодоксального российского программиста-микроконтроллеров и поместить его в западную модель программистского делопроизводства: ежедневные планерки, трэкер задач, сборка из скриптов, сервер сборки, статический анализ кода, инспекция программ, модульные тесты, снятие покрытие кода, спринты, Kanban. То выясниться, что российский программист-микроконтроллеров вообще не может решить ни одной задачи! По сути типичный российский программист микроконтроллеров не умеет вообще ничего делать, так как он просто не умеет программировать в том смысле, как это принято во всём цивилизованном просвещенном мире.

Для российского программиста микроконтроллеров единственный вариант по жизни, это сидеть промзоне своего военного НИИ, работать в кактус-соло режиме в какой-нибудь рафинированной GUI-IDE (типа IAR) со встроенными подсказками от Mickey-Mouse(а) и не высовываться!

Там же в промзоне чтобы компенсировать маленькую зарплату Вам будут говорить:

Да, боец, зарплата у тебя маленькая, зато твою работу покажут Президенту!

или

Этот прибор, который ты тоже делаешь, промчится на параде по Красной Площади!

Или вот чем нас воодушевляли:

Прибор который ты программируешь полетит прямиком на Луну!

а закончилось это вот этим

Кратер Луна-25
Кратер Луна-25

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

Расскажи о своих программистских трудностях шахтерам на Донбасе...

К стати про шахтёров... На промзоне каждый день будет обеденный перерыв. Однако то место, где это будет происходить ну никак нельзя назвать такими словами как "кафе" или "столовая". Судя по запахам шуму и освещению более подходящие для этого заведения словами являются "едальня" или "пищеблок".

В культовом сериале КиберДеревня отлично передали антураж пищеблоков российских промзон
В культовом сериале КиберДеревня отлично передали антураж пищеблоков российских промзон

В российских военных НИИ/НПО/ППК/ФГУП часто среди сотрудников также набирают массовки на всякого рода государственные мероприятия: премьеру какого-нибудь наитупейшего фильма, снятого на деньги из гос. бюджета, концерт певчивого артиста, чей рейтинг держится на государственном аппарате искусственного поддержания жизни или государственные митинги в Лужниках или Олимпийском за пару сосисок и гречневую кашу. Инженеров просто ловят прямо на работе, вызывают из отпуска, набивают в автобусы и везут пополнять массовку. Если ты Боже упаси откажешься участвовать в этой показухе, то тебе там, как говорят, "создадут условия", то есть назначат грязную скучную и тупую работу на полгода вперед пока ты окончательно не потеряешь рассудок.

При этом в профессии программист-микроконтроллеров очень трудно убедить организацию купить инструменты для эффективной работы. Что-нибудь совершенно по мелочи, что-то ну совершенно копеечное: блок питания, переходник USB-UART, штангенциркуль, шлейф, Android приложение для отладки uBlox чипа c GNSS. Надо заполнить кучу формуляров. Написать простыню для обоснования и 80% получить отказ. Или в 20% получить разрешение, а потом ждать два-три месяца пока согласуют и купят. А если и купят, то как правило оказывается, что купили не совсем то, что надо. В результате ты все примочки, как правило, покупаешь за деньги из своего семейного бюджета.

Про профессиональные традиции

Никаких традиций в профессии программист-микроконтроллеров в РФ исторически за 50 лет так и не сложилось. Не получилось... Тут речь идет не о тех традициях, чтобы дать новичку выпить стакан морской забортной воды и поцеловать качающийся молоток. Вовсе нет! Нет традиций в смысле того, что нет хороших практик разработки прошивок для микроконтроллеров! Например, нет доверенной покрытой тестами кодовой базы на всю страну (аналога европейскому AUTOSAR или Zephyr Project). То есть нет тех самых кирпичей из которых можно было бы гарантированно собирать работающее "программное здание". Нет никакой общей культуры разработки системного ПО. Нет системного подхода. Нет преемственности в делах. 

Разработка всюду похоже на анархию, Броуновское движение. Зачастую тебе придется работать даже без технического задания! Задачи могут поставить так:

--Оживить плату!

--Подружить микроконтроллер и айфон!

--Подружить платы!

--УУ ВайФай!

Понимай эту ахинею как хочешь... Нет общей терминологии. Везде свой внутренний нецензурный фольклор.

Кстати про матерщину.
В российских инженерных коллективах очень рьяно циркулирует просто отборнейшая матерщина. Я по началу никак не мог понять:

Как же так? Ведь все прошли через институты. Профессоры, доценты и аспиранты не сквернословили, а тут на работе какой-то криминальный фольклор. Что происходит?

Потом стал познавать историю и понял откуда все пошло... Дело в том, что вся российская инженерная школа сформировалась в 193х годах. Тогда всех инженеров, чтобы не платить им зарплату, Иосиф Джугашвили загнал в лагерные шарашки и ГУЛАГИ. Через этот кошмар прошли Поликарпов Николай Николаевич, Туполев Андрей Николаевич, Сергей Павлович Королев, Глушко Валентин Петрович и миллионы других более мелких инженеров. В этих местах "не столь отдаленных" советские инженеры много лет жили бок о обок с матёрыми зэкам, уголовниками и, естественно, инженеры набрались от них жаргона. Спустя 15-20 лет в 195x инженеров выпустили из тюрем, каторг и колоний "За отсутствие состава преступления" и они пошли работать во всяческие НИИ, КБ и НПО. A тюремные привычки и нравы то никуда ведь не исчезли и просто плавно перешли в здания без решёток. Так и продолжается до сих пор.

В современной российской инженерной молве чрезмерно много жаргона и сквернословия. Это одна из бед. Сотрудники забыли настоящий красивый инженерный язык времён инженера Владимира Шухова.

По факту сейчас у вас только два варианта. Вам придётся в повседневном общении на работе либо самим регулярно применять грязную матерщину, как и все, либо лояльно и толерантно относиться к матерщине вокруг Вас. Тут другого просто не дано.

Более того, в российских инженерных кругах, чем более жёсткую и суровую человек употребляет матерщину, тем выше авторитет этого человека! Техническая же экспертиза на этом фоне уходит куда-то на второй план. Просьба относиться к этому с пониманием...

Патроны называет коллег не то "бойцами", не то "боевиками". Понимаете, насколько это криминальная область деятельности - программирование-микроконтроллеров в РФ.

Сильная зависимость от внешних факторов

Есть некоторая нездоровая специфика программирования МК в РФ. Свою оригинальную электронику в России делать отказались еще в конце 196х. Был принят гос. план тотального копирования западных IBM(ов), Intel и Z80 процессоров. В результате Россия стала полным акцептором IT технологий. Сегодня у России нет своего дешевого процессорного RISC/MIPS/PowerPC ядра, нет своего компилятора для известных ядер ARM, PowerPC, RISC-V. У РФ нет даже своего текстового редактора! Благо есть открытый софт (Linux и GCC), которым и пользуются российские компании. Страна полностью зависит от импорта микропроцессоров и ToolChain(а) для микропроцессоров. Микроконтроллеры активно покупают в Норвегии(nRF5x) Италии(STM8), Франции(STM32), США(TI, PIC), Китае(esp32, Artery, GigaDevice), Нидерландах (LPCXXXX), Канаде(BCXXX), Швейцарии(STM32). Toolchain покупают у Швеции (IAR), Германии(Keil) и США(GHS).

Будучи программистом микроконтроллеров вы будете максимально сильно зависеть от внешних факторов и флуктуаций. Вы будете работать в условиях отсутствия суверенитета.

1—Микроконтроллер, который Вы программируете могут включить в санкционный список.

2—Datasheet на новый чип вам могут отказаться прислать из-за NDA

3—Вам могут аннулировать лицензию на компилятор GHS.

Всё это на западе называется выражением "закрыть маршрут разработки" для неугодных стран и компаний.

В США ситуация диаметрально наоборот. Там не то, что есть полный цикл IT продуктов. Дак там ещё есть каждый IT продукт в нескольких экземплярах, т.е. от нескольких вендоров. Микропроцессоры AMD, Intel, TI, Microchip. Софт операционных систем от MAC, Windows, BSD. Компиляторы TI, GHS. И всеми любимый текстовый редактор VS Code от Microsoft!

Про Санкции и Эмбагро

При этом Россия - страна санкционная. В российской организации могут запросто опрометчиво решиться начать разработку какого-нибудь электронского поделия, которое можно реализовать только на одном единственном импортном чипе из просвещенного ЕвроСоюза или США. Что-типа AD9208. А Vendor этого чипа например Analog Devices или TI наложит эмбарго либо сразу, либо потом и не будет присылать вам полный datasheet как и сами чипы, техподдержку, так как РФ, по их мнению, является санкционной территорией. И в результате Вы, как программист микроконтроллеров тут вообще ничего не сможете с этим сделать!... Такая история у меня лично была уже дважды (чип PM6766 для питание серваков) и модуль ZED_F9P (высокоточная GNSS-RTK навигация).

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

В РФ по-настоящему передовые электронные разработки часто попросту не доживают до серийного производства банально из-за очередного эмбарго. Я был свидетелем как один мой коллега в российской организации переписывал прошивку с 32-битного микроконтроллера на 8-битный микроконтроллер. Вот такой, товарищи, "прогресс"! Потом видимо будут переносить функционал c 8-битников на электро-релейные командо-аппараты. Потом на шестеренчато-кулачковые механизмы. Так что можете смело вместо новых языков программирования типа Rust(а) начинать учиться чертить детали машин. Причем лучше сразу на бумаге! Нас тут, по ходу, снова ждёт паровой век! Аж дух захватывает...

Российские компании не хотят ничего выдумывать. Боятся. Предпочитают копировать то, что уже есть на Западе, без какого бы то ни было оригинального "видения" продукта и товарной политики. Едва ли в РФ получится участвовать в какой-либо уникальной прорывной разработке на микроконтроллерах. Даже если вы виртуоз в программировании микроконтроллеров, то по настоящему грандиозные проекты в РФ скорее всего всё равно просто не удастся сделать из-за очередного эмбарго и санкций. А между тем проекты реальных гаджетов американских школьников с Kickstarter(а) или CrowdSupply вызывают куда больше восхищения и трепета чем то, что пытаются делать электронные компании в РФ со своим громадным опытом. 

Издёвка судьбы ещё и в том, что существование российского ВПК не вписывается в карту реальности Западной политики.

Дядюшке Сэму это не нужно!

США и ЕС спят в видят Россию бедной раздробленной сырьевой территорией с мизерным необразованным суеверным населением без письменности под внешним управлением колониальной администрации.

Поэтому все западные поставщики микросхем будут постоянно чинить препятствия и козни Вашей российской электронной организации. Они накладывают эмбарго на продажу литографов ASML. Запрещают продавать в РФ лицензию на компиляторы (например GHS). Навязывают vendor locking программы для разработки: (IAR, Keil, CCS), которые не позволяют делать чтобы то ни было без мышки. Продают мелочёвку по завышенным ценам. Перекрывают цепочки поставок. Запрещают скачивать документацию и утилиты для работы с их сайтов и прочее. Перекрывают доступ к их сайтам.

Отказывают Вам в посещении профильных мастер-классов. И даже умудряются протолкнуть на высокие руководящие должности госкорпораций своих людей для саботажа сверху, в тылу неприятеля!

В одной российской организации, я был свидетелем как к нам в офис регулярно приходил американский поручик от Texas Instruments и буквально диктовал нашему начальнику отдела, какие микросхемы следует закладывать в проект российского прибора. Потом эти микросхемы в самом деле оказывались в финальном приборе. А спустя несколько месяцев эта же Texas Instruments объявила Эмбарго на те микросхемы, что сама же приказала поставить. Вот так, просто кинули...

И Вы тут как рядовой программист-микроконтроллеров ну вообще ничего не сможете с этим сделать...

Поэтому многие настоящие разработки военной электроники в России происходят как бы нелегально, глубоко под землёй. В минус первых, минус вторых этажах промзон и университетов. Или вовсе в бункерах. Естественно, десятки работников там фактически никогда не видят дневного света. Также внутри банально трудно дышать. Оно Вам надо?

Восемьдесят процентов того, что бы сделаете на работе программист-микроконтроллеров пойдет прахом. Проект задвинут в тумбочку как какое-нибудь крамольное советское кино. Основные причины это Санкции, Эмборго на элементную базу. Потом отмена выставки. Ошибки в схемотехнике. Дизайн PCB платы не прошел электромагнитную совместимость (EMC). Брак производства. Трагедия на испытаниях. Отсутствие потребителей продукта. Уход инвесторов. Потом, смена руководства отдела. Новый начальник зарубит все проекты прошлого руководителя. В общем 80-99% вероятность, что вся разработка не дойдет до серийного производства и всё накроется медным тазом.

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

У программистов микроконтроллеров начальник-схемотехник.

Обычно программист микроконтроллеров работает в отделах, которые по советских называются: "отдел разработки радио электронной аппаратуры" (РЭА). Поэтому, как следует из названия, начальник там - бывший схемотехник. Всё начальство программистов микроконтроллеров в российских организациях в пяти случаях из шести - это в прошлом схемотехники, чертежники или вовсе конструкторы механики. О программировании они знать ничего не хотят из принципа, они из тех кто просто ненавидит программировать еще с института. Начальник-схемотехник даже программирование называет "программизмом", а самих программистов-микроконтроллеров "софтописцами".

--Схемотехник тебе как начинающему программисту-микроконтроллеров никогда не подскажет, что собирать из Makefile(лов) эффективнее, чем сборка из-под GUI-IDE.

--Схемотехник тебе не посоветует настроить GIT.

--Схемотехник не скажет, что отладка из UART-CLI эффективнее чем отладка через SWD/JTAG.

--Схемотехник не порекомендует делать модульные тесты кода.

--Схемотехник тебе не посоветует запустить сервер сборки Jenkins для контроля сборок.

--Схемотехник не научит тебя делать code coverage.

--Начальник схемотехник никогда не порекомендует тебе воспользоваться утилитой grep.

От себя могу добавить, что после универа за первые три года своей карьеры работая с начальником-схемотехником, я не научился у него ровным счетом абсолютно ничему IT(шному). Учиться у схемотехника программированию невозможно по определению. Если ты попал в отдел РЭА, то это конец твоей карьере как программиста. Своего рода, конечная остановка в профессиональном развитии.

Справедливости ради, стоит всё-таки упомянуть, что начальник-схемотехник в лучшем случае может научить тебя разве-что некоторым трюкам ручной пайки. Например с применением термо-фена и оранжевой каптоновой ленты, о существовании которой, кстати, в среднем 7 из 8 схемотехников даже не догадываются. Вот, пожалуй и всё...

Причем будь готов к всяческим странностям в таких отделах РЭА. Вот буквально несколько примеров из жизни:

1--однажды в отделе РЭА ко мне подошел начальник-схемотехник и попросил, чтобы я составил

Документ-требования к транспортировке программного обеспечения (ПО) железнодорожными видами транспорта.

2--Или уже в другой организации ко мне приблизился мой непосредственный начальник (в прошлом чертёжник прямоугольных корпусов) и устно сказал:

Напиши требования и методику проверки работы твоего программного обеспечения (ПО) по температурным диапазонам ПО.

3--Начальник схемотехник попросил меня распечатать *.hex файл с прошивкой для микроконтроллера, чтобы оформить архив на разработку электронного прибора.

Интересно Back-End программистов Web сайтов или GameDev разработчиков мобильных приложений под Android/iOS менеджеры тоже о таком просят???

4--Однажды я был свидетелем, как начальник-схемотехник для разработки прошивки по ошибке нанял python программиста!

Типичная российская разработка выглядит так. Начальник отдела открывает Aliexpress и покупает там не глядя какой-то случайный дикий ПЛК, вручает программисту микроконтроллеров этот ПЛК и говорит: "оживи устройство". При этом на ПЛК нет абсолютно никакой документации, продавец на Aliexpress не отвечает на сообщения c вопросами прислать pdf(ку). И всё, что остаётся это взлом хакинг и реверс инжиниринг этого азиатского прибора.

В таких военных НИИ начальники как правило возрастом 60+. В одном НИИ я был свидетели как каждый день двое инженеров водили под руки начальника НИИ, чтобы тот просто мог дойти и поесть. Руководство там не умеют пользоваться персональным компьютером и всю информацию получают исключительно только в картонных красных папочках. Исходные коды тоже иногда просят распечатать для них. Причем удивляет то, что просят чтобы исходный код был напечатан на миллиметровой бумаге! Вот так...

Сотрудники треть дня занимаются сплетнями, хвастаются отпусками. Особенно женщины.

А вот это коллекция золотых перлов начальников-схемотехников:

1--Тестировщик ПО не нужен. Вы о чём вообще? Если программист хороший, то и код он пишет без ошибок!

2--Оживить плату!

3--Подружить платы!

4--Программистам-микроконтроллеров не нужна схемотехника. Пусть код пишут.

5--SVN/GIT не нужен так как у нас только один программист-микроконтроллеров.

6--Зачем ты сделал для разных микроконтроллеров две отдельные *.hex прошивки? Сделай один универсальный *.hex файл сразу для всех электронных плат!

7--Сделайте Мне хорошо!

Вот так и живём, господа... Твоя задача - телепатировать, угадать, что хочет начальник-схемотехник и угодить ему, как женщине, ибо мысли излагать на бумаге (ТЗ) он все равно не хочет и будет.

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

Поэтому в разработке приборов на микроконтроллерах постоянная конфронтация между программистами и схемотехниками. В провалах схемотехники обвиняют программистов, a программисты - схемотехников.

Какую бы хорошую прошивку бы ты не написал, схемотехники непременно назовут её "галимой прошивкой". И как бы ни старался схемотехник, его электронную плату программисты назовут "мертворожденная PCB".

Это просто уже классика жанра и норма жизни, к которой все давно привыкли.

Код прошивки абсолютно никого не интересует.

В программировании микроконтроллеров большинство русских фирм даже не заботятся об исходном коде как таковом вообще. Для их процессов внутри организации кода как будто бы и не существует вовсе! О коде не говорят. Код не изучают, код не анализируют, исходный код не тестируют, не улучшают, не упрощают. А таких слов как "архитектура ПО", MiddleWare и DevOps стены российских электронных организаций никогда в помине и не слышали!

Интерес представляет только физический прибор. Поэтому в большом почёте схемотехники и конструкторы (чертёжники). Дело в том, что микросхемы обычно маленькие габаритами 4x4 мм, а начальство сидит ^высоко^ и не замечает каких-то там микросхем-лилипутов. Это ниже их достоинства. Начальники лишь электронные платы видели пару раз в году. Поэтому конструкторов и схемотехников на промзонах ценят существенно выше, чем каких-то там программистов-микроконтроллеров.

Также в промзонах высоко ценят FPGA разработчиков. Это по сути схемотехники цифровых электрических цепей внутри SoC(ов). Это проявляется в высоких ЗП и ПЛИС схемотехников и позволения им гибкого графика прихода на работу. Видел даже как FPGA разработчику оплатили хирургическую операцию!

А программистов микроконтроллеров считают бездельниками. Если нужно разработка ПО, то нанимают только одного единственного программиста-микроконтроллеров. Никому там и в голову не приходит, что работы по написанию кода прошивки там на самом деле на 7 программистов! При этом Си-исходники можно вообще хранить в открытом доступе и это никого в общем-то тоже не волнует. По факту исходники микроконтроллера никого кроме 1-го единственного разработчика не интересуют. В одной российской организации я видел как программист микроконтроллеров называл Си-функции именами литературных персонажей и это никого абсолютно не волновало, так как кроме него с этим исходным текстом программы никто не работает. А он так просто хотел стать незаменимым сотрудником. И, как правило, один человек делает прошивку для одной электронной платы.

Мракобесие и Обскурантизм

С другой стороны в некоторых российских электронных организациях таки есть внимание в коду. Это проявляется в наборе подозрительных требований категории блажь. Вот буквально несколько примеров из жизни.

1—Строгие правила расставления отступов к коде и вообще искусственно выдуманное форматирование кода, которое даже опциями clang-format или GNU-indent выставить нельзя. Только ручное расставление отступов.

2—Строгие правила оформления шапки текста перед каждой функцией.

3—Строгие правила оформления текста в GIT комментариях к комитам

4--Писать текстовые комментарии к каждой строчке Си-кода.

5— Запрет на стандартные типы данных из файла <stdint.h> <stdbool.h>

6—Собирать код только мышкой из-под GUI-IDE (IAR KEIL) и никаких там скриптов сборки!

7—Запрет установки программ, запрет открытия диспетчера устройств, запрет прописывания переменной PATH на локальных PC

Всё это просто требования ради требований. Думаю не надо пояснять, что такая мартышкина бюрократия лишь только тормозит достижение реального функционального результата по разработке ПО. При этом, напомню что, в таких организациях, как правило, не принято покрывать код модульными тестами, нет NVRAM, нет UART-CLI, нет сервера сборки, загрузчика и многого того, что, по здравому смыслу должно, быть сделано в первую очередь.

Порой всё это выглядит, как соблюдать правила хирургической стерильности в конюшне.

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

В России Две Школы Программирования Микроконтроллеров

В России из-за больших расстояний и слабой коммуникации исторически сформировалось две абсолютно различные, независимые и непримиримые школы программирования-микроконтроллеров.

Можно условно их назвать Питерская школа и Московская школа. Что, к слову, вполне соответствует географии.

--Питерская школа это сборка из самописных скриптов Make/CMake, отладка через UART-CLI, модульные тесты внутри прошивки, текстовые протоколы, DevOps (в Jenkins), командная работа (парное программирование).

--Московская школа это сборка из-под GUI-IDE, отладка только через JTAG, внешние тесты на PC, бинарные протоколы, solo-разработка.

Я прошел через обе эти школы и могу сказать, что возникают серьезные конфликты, когда в одном коллективе оказываются представители двух разных школ, и тут надо искать компромиссы, вариантов нет. Это как извечные споры между приверженцами Windows или Linux.

Боже упаси Вас на собеседовании в Москве хоть что-то упомянуть из практик Питерской школы. Работу точно не получишь. И наоборот в Питере не любят прогеров придерживающихся московской школы.

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

Невозможность Профессиональной Эмиграции

В профессии программист микроконтроллеров насколько бы упорно и усердно Вы не работали, то Вам всё равно не светит профессиональная миграция в развитые страны: США, Австралию, Англию, Новую-Зеландию и т.п.

Дело в том что российская, с позволения сказать, школа программирования микроконтроллеров настолько, мягко говоря, самобытная, что западные коллеги (начиная с восточной Европы и Балкан) Вас просто не поймут и не признают как Embedded/Firmware программиста. Там другие стандарты, другие методы работы. По-другому устроено делопроизводство. Там всё по-другому. Они не видели российских микроконтроллеров, российских электронных товаров и считают, что в России никто ничего в этой теме не умеет. Сколько бы российского опыта у Вас ни было 5, 10, 15 лет. Всё одно. Лучше с этим сидеть дома.

Даже гипотетически оказавшись в западной компании, с российским образованием и российским микроконтроллерным опытом Вы не сможете решить там ни одной задачи. Западу как цивилизации проще, привычнее, удобнее и понятнее нанять программиста-индуса или программиста-иранца, чем российского Кулибина или Ползунова.

Программисты микроконтроллеров - странные люди.

быт программиста-микроконтроллеров
быт программиста-микроконтроллеров

Как правило на один проект сажают одного человека. Командной работы нет в принципе. Поэтому программистами микроконтроллеров работают, как правило, только ортодоксальные интроверты, мизантропы и социопаты. В связи с этим программисты микроконтроллеров как правило нелюдимые, нервные, дикие, агрессивные и вспыльчивые. Общаться с ними некомфортно, сложно, а порой и вовсе опасно. У программистов МК напрочь отсутствуют такие понятие как Soft Skills и эмоциональный интеллект. И с годами ситуация только ухудшается. Программисты MK начинают отращивать себе длинные волосы как у женщин, плести косички, завивать кудри, делать себе наколки, пирсинги и тоннели в ушах. Потом программисты-микроконтроллеров превращаются в нечто, что окружающим приходится пристально вслушиваться говорит человек глаголы на xxx(ла) или xxx(л), чтобы понять перед тобой мужчина или женщина.

Или наоборот программисты микроконтроллеров бреются налысо аж череп блестит как шар для боулинга. Один знакомый программист МК в РФ ходит круглый год под огромным разноцветным зонтиком (даже летом в отличную погоду), другой знакомый программист МК утром на работе, когда заваривает себе кофе кладет в стакан сверху три ледяных кубика! Третий программист MCU работает перед монитором в офисе в зимней куртке! Я даже видел в России одного программиста-микроконтроллеров гея! Он ходил на работу в женской шелковой одежде. При всех красной помадой красил себе губы перед зеркалом и накладывал на щеки пудру. Вот так...

И это только то, что можно увидеть на работе. Полагаю, что в обычной жизни они ещё место на парковке во дворе ищут в шлеме дополненной реальности, а в лифте поднимаются с надетой кислородной маской.

Все в ХакСпейсы! (или ячейка друзей электроники)

Ещё иногда по субботам программисты микроконтроллеров собираются в так называемые "хакспейсы". Когда я туда впервые пришёл и спросил как называется это сообщество мне ответили, что это "ячейка друзей электроники". Это, как правило, арендованное непонятно кем офисное помещение на окраине города без особых удобств и с "бабушкиным ремонтом". Часто подвальное. Там внутри хакспейса они называют друг друга странными кликухами: Кот, Крот, Крей, Енот и т.п..

Там появляются такие напомаженные "хакеры". Например у одного типа там ко всем USB-Flash(кам) синей изолентой примотана пороховая петарда (Корсар-4). Это, видимо, чтобы всегда можно было оперативно отформатировать данные. Для антуража там есть стол на котором лежит включенный паяльник, которым никто не пользуется.

В HackSpace(ах) они в основном занимаются, внимание, пьянством! Еще смотрят артхаус фильмы. Потом поздно ночью выходят на коллективную уличную прогулку. Причем удивляет не то, что они выходят на прогулку именно ночью, а то, что они при этом ходят строем по 4-6 человек как какая-то ЧВК и при этом ещё курят вейпинг. Эх... Всё это очень похоже на нездоровую секту...

В общем, программисты-микроконтроллеров - это очень странные люди.

Соло работа. Мало общения на работе.

Обыкновенна ситуация, когда программист микроконтроллеров в принципе ни с кем не разговаривает по проекту на работе по полгода и более так как это чисто соло работа. На расстоянии вытянутой руки сидит другой такой же соло-программист микроконтроллеров. Он пишет прошивку для другой электронное платы, которая на 70% совпадает по аппаратной начинке.

Каждый пишет на Си свою бажную версию FIFO, циклического буфера, функцию swap, CRC8, CRC16, CRC24, CRC32, SHA256, парcеры базовых типов данных из строчек, NVRAM, allocator, цифрового фильтра, DFT, FFT, загрузчика, reverse_bytes, Reed Solomon/AES26/Base64/RLE encode/decode, шрифты для графических экранчиков, парсеры бинарных протоколов UBX, CSV, NMEA, RTCM, генераторы QR кодов и прочее, и прочее зачастую даже без юнит тестов.

Понимаете, они так часто пере изобретают велосипеды, что им и модульные тесты писать просто некогда!

Программисты MCU в России не умеют работать в команде. Да это факт... Три раза был свидетелем, как программисту МК предлагали напарника, помощника, а тот говорил:

Ой не надо. Он мне в спину дышать будет. Он мне тут всю экосистему в программе поменяет....

А по факту проблема в том, что без TDD (Test Driven Development) совместная разработка реально не работает. Вот и получается, что есть только два выхода - делать все по одиночке или делать вместе по TDD. Только до осознания пользы TDD в embedded России пилить и пилить ещё лет 40-50. Вот и остается всё делать по одиночке в кактус-solo режиме.

Промышленная разработка firmware (прошивок) в России похожа на советские кружки судо моделирования или радиолюбителей. Каждый делает что-то как будто для себя и радуется, если получается. Никакой командной работы нет в помине! Нет общей информации. Прошлый опыт быстро обнуляется. Экспертиза не накапливается. Каждый раз из проекта в проект они героически решают одни и те же ошибки. Ещё у программистов МК нет отдельных тестировщиков как класса.

Поймите у программистов микроконтроллеров нет даже менеджера пакетов, как это повсеместно, например, в разработке на Python. В программировании MCU даже нет аналога игровых движков как в GameDev(е). Поэтому каждый раз, в каждом новом микроконтроллерном проекте прошивка проходит путь эволюции от одноклеточной амёбы до циклопического динозавра.

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

В добавок к этому каждый собирает артефакты по-своему. Первый никогда ничего не знал кроме IDE IAR, второй точно такой же только в IDE Keil, третий ничего не знает кроме AtilocTrueStudio, 4тый собирает через GCC+Eclipse ARM plugins, 5тый работает в GCC + Make + OpenOCD, 6ой в GCC+СMake+ST-LINK_gdbserver, седьмой GCC+Ninjia+VSCode, 8й программирует в STMCubeIDE, 9тый в Code Comрoser Studio, 10тый зачем-то собирает прошивки для STM32 из-под снобского Zephyr Project (Yaml / West /DevTree /KConfig / CMake /Ninja /GCC/VScode/VisualGDB). Другие собирают Ubuntu, С++20, Meson, GDB. В общем полная анархия.

Программисты микроконтроллеров - они как сантехники, каждый ходит со своей корзиной с инструментами.

Повторяемость кода достигает количества программистов в организации умноженная на 100%. Обычно это 550%...750%. Всё максимально неэффективно. Их сорцы никто не контролирует, их код не инспектируют, не тестируют, не пере используют. Большинство разработчиков даже юнит тестов не делают. Они даже слов таких как "юнит-тест" в свои 43 года ни разу не слышали! В результате во всех микроконтроллерных программах как правило дичайший хаос (функции по 5k строк, магические циферки на каждой строчке, в каждом файле доступ в регистры) жесткая привязка к FreeRTOS, и этого даже никто не заметит и не остановит! Это особенность российско-татарско-сибирской программистской культуры ведения R&D.

Вот с этим можно сравнить прошивки российских программистов. Одним словом Монстры.
Вот с этим можно сравнить прошивки российских программистов. Одним словом Монстры.

При этом среди российских программистов МК очень большой разброс по способностям. Знания Умения Навыки (ЗУН) 3х разработчиков с 10ю годами опыта могут отличатся в 10, 100 и даже 1000 раз! Когда все работают по одиночке в своих норах этого не заметно. Но как только появляется работа над общей кодовой базой, то вскоре выясняется кто тянет всю команду на дно.

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

https://habr.com/ru/post/709932/
Поэтому твоими основными коллегами для общения будут слесаря, токари и фрезеровщики.

В Программировании Микроконтроллеров Нет Людей-Легенд

В программировании микроконтроллеров нет людей легенд, как это присутствует в GameDev (Джон Кармак), Mobile (Ян Борисович Кум), Compilers (Джеймс Гослинг), DeskTop ( Ричардом Броди) или Web (Марк Цукерберг).

В Embedded отсутствуют глобально признанные авторитеты разработки внутреннего программного обеспечения и, как следствие, нет знаменитости в этой, с позволения сказать, "индустрии".

В результате, нет примеров и ориентиров того как надо делать. Нет историй успеха в программировании микроконтроллеров.

Никто и никогда Вас не будет чествовать в этой чудо профессии программист- микроконтроллеров. Зато упрекать за то, что вы не телепатировали в пожеланиях к прошивке вас будут регулярно. Тщеславным людям в Embedded разработке делать абсолютно нечего!

Никто в детстве не мечтает стать программистом микроконтроллеров. Да это факт. Я и сам узнал, что есть такая работа только на 4м курсе института в свои 23 года. Как правило, каждый программист микроконтроллеров попал в эту профессию случайно. Учился на инженера-электроника на приборостроительном факультете в своем региональном Политехе. На 3м-4м курсе пошёл работать по специальности в местечковое военное НИИ, а его на работе программировать микроконтроллер посадили.

После защиты диплома, через 6 месяцев подписал форму допуска и стал абсолютно серым телом без рта.

Потом вся оставшаяся жизнь протекает по схеме: сделал проект, получил премию 20kRUR, съездил в Анапу.

На большее рассчитывать и не приходится!

Религиозные аспекты в программировании микроконтроллеров

Ещё в программировании микроконтроллеров как нигде неимоверно много религиозных аспектов и вкусовщины на почве которой происходит много бессмысленных и беспощадных споров.

Например в выборе MCAL кода от вендора, одни ратуют за использование SPL, другие убеждают, что надо использовать HAL. Третьи продвигают LibOpenCm3. Вот реестр всех спорных моментов.

https://docs.google.com/spreadsheets/d/1SUSJK6F6SBazSU7hZ97SZnPrJ0myj836T34-Hs13BG4/edit#gid=0

А согласование общего текстового редактора это вообще война всех против всех.

Все эти моменты портят отношения и являются зерном серьезного конфликта. Это крайне неприятно перетирать. Компромисс в таких вопросах достигнуть неимоверно трудно. Найти работу, которая будет по всем пунктам соответствовать вашей техно-религии просто нереально. Конфликты и компромисс неизбежен...

В профессии программист микроконтроллеров нет женщин

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

Как-то она на планерке спрашивала что-то типа

Как найти место на плате, чтобы подключить цепляшу электрода осциллографа к той микросхеме

Ей коллеги сказали что-то типа  

Найди эту микросхему на плате по количеству пинов, она там такая одна.

После этого девушка сочла, что её жестоко оскорбили и расплакалась. Спустя несколько месяцев сбежала от этой пресловутой электроники сайты программировать на Python(не) и теперь счастлива!

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

Второстепенная работа

Работа программирования МК тесно связана с электронными платами. Если вы программист МК, то скорее всего вы будете по уши в электронных платах. Вам придется не сколько программировать, сколько исправлять разнородные аппаратные баги, собирать прототипы. Железо часто подводит. Вот буквально несколько примеров. 

№1

Типичная ситуация в программировании микроконтроллеров. Отвалившаяся вилка застряла в гнезде. В электронике это называется "извлечь клеща".

в электронике это называется "извлечь клеща"
в электронике это называется "извлечь клеща"

В программировании микроконтроллеров "клещи" происходят на разных платах достаточно часто

Вилка застряла в гнезде.
Вилка застряла в гнезде.

И тут вам никакие знания алгоритмов и абстрактных структур данных не помогут, чтобы починить изделие и продолжить работу. Можно задавать в качестве вопроса для собеседования при приеме на работу на должность "программист микроконтроллеров". Как извлечь клеща (отломанную вилку)?

№2

Программатор не видит target по SWD. Собрали стенд, положили SWD длиной 90 см и нет Link(а) с MCU. Когда кабель 12 см, то link есть. Или нет Link(а) c SD картой по SDIO или SPI. Оказывается стерлись контактные площадки. Вообще проблемы отсутствия всяческого Link(а) в программировании микроконтроллеров будут красной нитью проходить через всю вашу карьеру. Особенно в случае беспроводных интерфейсов.

№3

Еще вторая тупая проблема это когда разъём на электронной плате не соответствует реальному разъёму на программаторе или на каком-н другом шлейфе.

И тут начинается конкурс "чей колхоз самый образцовый колхоз".

Или вот ручной зажим Tag-Connect не защелкнуть так как пальцы не пролезают между стабилизатором напряжения TracoPower и разъёмом Tag-Connect. Всё не предвидишь. Особенно когда плату разрабатывают полгода.


эту плату разрабатывали полгода и после сборки выяснилось, что не влезает самый главный разъём - для программирования
эту плату разрабатывали полгода и после сборки выяснилось, что не влезает самый главный разъём - для программирования

Пример №5. Плата работает под отладчиком, а при пересбросе питания не стартует прошивка. На другой плате это не проявляется. И эта ситуация потребует неделю на выяснение причины и устранение. И так для каждого нового чипа и каждого ToolChain(а).


Пример №6 (USB).

Также проблема в электронике это USB. Почти в каждой 2й плате есть USB. Проблема в том, что во всех платах разный разъём для USB: USB mini, USB micro, Type-C. Ты постоянно будешь искать нужный для этой конкретной платы нужный кабель.

У тебя будет целый гардероб из разных USB кабелей на каждый день.

Плюс бывают ситуации, когда кабель USB у тебя есть, а вставить его ты не можешь так как упирается и мешает декоративная пластмасса.

Или на полевых испытаниях прибора в мороз -30 в темноте ты не видишь какой ориентацией вставлять разъём USB mini, а руки от холода и так не слушаются. А USB micro гнездо имеет свойство откалываться от платы при малейшем поперечном изгибе и плату не запитать.

Пример №7 (платы без монтажных отверстий)

Схемотехники забыли/забили добавить по периметру платы монтажные отверстия 3мм. В результате программист 3 недели занимается вот таким современным искусством. Зураб Церетели отдыхает в сторонке

Современное искусство. Пизанская башня.
Современное искусство. Пизанская башня.

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

подробнее про это можно почитать тут https://habr.com/ru/articles/709932/

Пример №8

Схемотехник по глупости поставил в плату переходник USB-UART (CP2102). Получается, что сначала MK начинает исполнять код и писать в UART, затем спустя несколько секунд Windows определяет последовательный порт. В результате не получить power-on log загрузчика.

Пример №9

В профессии программист микроконтроллеров часто бывает так, что Вам приносят электронную плату с производства, а эта плата не работает да еще и с целым букетом аппаратных багов. Даже если правильная схемотехника то может оказаться неправильная сборка.

монтажники перепутали ориентацию разъёма XP1
монтажники перепутали ориентацию разъёма XP1

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

Пример №10 (тугие разъёмы)

В программировании микроконтроллеров есть такая специфическая проблема как тугие разъёмы. Можно полдня потратить на то, чтобы просто отцепить шлейф от тугого прикипевшего разъёма на электронной плате. В силовой электроники ситуация еще хуже. Там железные разъёмы-клеммники и вовсе от высокой силы тока просто привариваются к плате инвертора. И чтобы продолжить работу вы вместо клавиатуры работаете с болгаркой.

Суммируя аппаратные баги можно подвести черту, что это либо ошибка в схемотехнике (забыли подать тактирование на чип), или ошибка в топологии. Обычно это короткое замыкание, квадратную микросхему припаяли повернув под углом 90 градусов, кварц установили не на ту частоту, либо заложили чип с инверсными логическими уровнями или вовсе там бракованные микросхемы.

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

Свежие электронные платы с производства не любят работать. Предпочитают сразу сгорать. Разные разъёмы будут не контачить и прочее. Аппаратные проблемы будут еще до запуска кода. На программирование после починки плат остается очень мало времени. И вы тут как программист-микроконтроллеров ничего не сможете сделать, чтобы дописать и отладить свою программу. Программу банально не на чем отлаживать.

У меня был случай когда три схемотехника спроектировали электрическую цепь электронной платы (схемотехнику), развели топологию, отправили производство и на выгоде выяснилось, что они забыли вообще даже подать на микроконтроллер питание! Как говорят

У семи нянек дитя без глаза

На сам процесс программирования уходит максимум 10...20% времени. В основном приходится что-то ремонтить, разбираться с проводами, искать и закупать примочки. Вы будете постоянно искать этот 20пиновый шлейф для программатора. Каждый день вам придется тратить 30..45 минут просто на то, чтобы распутать и распетлять провода. Потом 4 часа искать второй щуп от мультиметра (это который красного цвета), затем ехать в в ближайшее метро, чтобы купить 9V батарейку типа КРОНА для этого мультиметра. Вернуться в промзону. Выяснять, что куда подключено, собирать прототип, проверять электродами осциллографа наличие электрических сигналов, прозванивать провода, проходить по чек-листу. Не успеешь разобраться с одной платой, как тебе принесут еще две электронные платы и надо будет вкуривать очередную схемоту на 30-60 страниц. А схемотехники даже блок-схему не нарисуют, сразу дают в лучшем случае электрическую принципиальную схему (Э3) в виде, внимание..., фотографии *.JPG! А в обычном случае и вовсе принесут плату без доков и скажут, что её тоже надо "оживить"!

Можно запросто неосторожно сжечь оборудование из-за неправильно подключенного заземления. Вы обязательно узнаете как пахнут искры. Можно потратить весь день на подключение лампочки или чтения состояния зашумленной кнопки. Копаться в разъёмах. Выяснять почему цифровой сигнал не проходит через каскад мультиплексоров.

В профессии программист микроконтроллеров ты почувствуешь физику по полной: лампочки тебя будут ослеплять, аудиокодеки-оглушать, радиаторы-обжигать, моторы-задевать, напряжение-ударять, бетта-лучи - облучать.

Трудность отладки и поиска ошибок в прошивках

Невозможно найти ошибку в программе только пялясь на код. Чтобы найти ошибку в программе программу надо запускать на исполнение! Анализировать run-time, логи, делать выводы и только потом редактировать код.

В программировании MCU с Вас будут спрашивать за функционал прошивки. Однако для разработки и отладки функционала прошивки нужен надежный прототип. Схемотехники будут отказываться делать для Вас прототип под предлогом, что они не хотят покупать примочки для прототипа. В фэнтези-мире схемотехников клей, гвозди и синяя изолента - это лучшее решение всех задач.

Поэтому вам как программисту МК также скорее всего придется заниматься конструированием прототипов самому. Это черчение конструктива прототипа, договоры с производством конструктива, покупка крепежа. Кто хоть раз делал прототипы, тот знает, что тут много нюансов. И на это будет уходить много времени. Как следствие на разработку функционала и поиск багов будет оставаться мало времени.

Чтобы отлаживать код, его надо исполнять. Если в коде баг и нет возможности исполнить код, то баг не исправить. Это как писал философ Э.В. Ильенков, если найти в лесу отдельно лежащую человеческую ногу, то не ясно что это и зачем. Понятно только, когда эта нога видна в действии. Аналогично в понимании причины программных багов. Надо запускать код!

А накладные расходы на запуск и исполнения микроконтроллерного кода при разработке на MCU в составе комплекса порой огромные! Знакомые, которые разрабатывали firmware для военных авиационных ECU писали, что одна минута испытаний реактивного двигателя на стенде стоит 300k RUR. Естественно, затраты на испытания вычитают из зарплатного фонда для программистов-микроконтроллеров.

Команда из компании Третий Пин потратили один год (2017) на выявления 2х Шрёдинбагов в их Пастильде. Оказалось что в конфиге был указан не тот Flash Latency и в схемотехнике не тот номинал емкости в цепи питания. И в программировании микроконтроллеров это нормально.

Мало ресурсов

Программисты МК в принципе не пишут больших программ. Размер проектов ограничен несколькими сотнями килобайт памяти Nor Flash(а). Обычно 320KByte на всё. Вас будет преследовать постоянная нехватка on-chip Nor Flash памяти.
Особенно при разработке первичного загрузчика (16kByte) и вторичного загрузчика(64...128kByte). В принципе невозможность сделать полноценный загрузчик по всем интерфейсам.
С RAM ситуация еще хуже. Вам повезет, если размер RAM будет в 4 раза меньше чем Flash(а). Вы регулярно будете ловить исключение HardFault_Handler из-за переполнения стека. А частоты микроконтроллеров не превышают 200MHz, так как весь смысл МК это низкое энергопотребление. 

Если микропроцессор x86 это миксер для чисел, то микроконтроллер это ступка для чисел. В MCU ты знаешь начало и конец RAM памяти и её мало.

После программирования микроконтроллеров, с его вечной нехваткой ROM/RAM памяти, запретом динамического выделения памяти, составление программ в User-Space под DeskTop покажется тебе Манной Небесной!

Даже не мечтайте про удалёнку из Тайланда.

Чтобы в принципе делать embedded software нужен физический доступ к многочисленному и разнообразному калейдоскопу всяческого промышленного оборудования. Нужен программируемый блок питания, чтобы выставить 1.8 или 24.0 Вольт. Нужна проверка сигналов осциллографом, подключение логического анализатора к I2S, измерение DMM(ом) с функцией TrueRMS, работа с микроскопом для проверки, что микросхемы правильно припаяны. Нужен анализ перегрева электронное платы тепловизором. После пайки нужно отмывать электронные платы в ультразвуковой ванночке. Антенны надо прозванивать векторным антенным анализатором VNA. Нужен лазерный резка по плексигласу для изготовления подложек прототипов, нужен 3D принтер для прототипирования корпусов, нужны всяческие отвёрточки (шлиц двоеточием, шлиц треугольником и пр.).

Это главное и основное отличие программирования-микроконтроллеров от, например, того же Web программирования. Едва ли вообще можно эффективно работать в роли embedded удаленно. Это как удаленно от плиты готовить еду, удаленно красить стены, строить дом или удаленно работать воспитателем в детском саду. Программист МК - это профессия производственная и тут нужно физические первостепенное воздействие на прототип или изделие.
В довесок к этому твой ежедневный будничный рюкзак будет наполнен до отказа всяким барахлом, которое тебе придется таскать с собой в метро или Bus(е), если ты вдруг захочешь что-то поделать из дома с пиратским софтом вечером или на выходных.

Если Вам предлагают работать программистом-микроконтроллеров удаленно, то просто посылайте таких рекрутеров лесом!

Образовательный BackGround

Самым полезным background-ом для профессии программист микроконтроллеров я бы назвал профессию разнорабочий/чернорабочий. Программирование микроконтроллеров это на 80-70% электротехника и только на 20-30% программирование. Надо будет делать прототипы и ремонтировать сгоревшие платы. Вытравливать электронные платы методом ЛУТ (лазерно-утюжная технология).

Что такое ЛУТ можно посмотреть тут https://habr.com/ru/articles/713970/ Если коротко - это жесть. Когда я делаю плату ЛУТ(ом) у меня в среднем остается 3 пореза на руках.

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

Потом выяснять, почему электронные платы с производства не включаются. Предстоит делать закупки примочек, работать курьером, прокладывать проводку, чертить 2D и 3D детали, трассировать печатные платы, паять под микроскопом, измерять электрические сигналы, выпиливать, клеить, шкурить, затачивать сверла, сверлить, фрезеровать, крутить разные отвертки, покрывать электронные платы лаком, настраивать 3D принтер, пылесосить, ездить на автомобиле с ноутбуком на коленях, снимать на камеру ролики для выставок. Монтажировать видео. Делать реверс инжиниринг более успешных западных товаров. Настраивать tool-сhain(ы) и многое-многое чего ещё.

Вам повезет, если вы вообще за неделю будете хоть что-то программировать в этой чудо-юдо профессии программист-микроконтроллеров. Если же Вы будучи программистом МК не станете исполнять все эти функции чернорабочего и будете, упаси Бог, проявлять принципиальность и вставать в позу, якобы

Да я тут только код пишу!

то Вы попросту будете тормозить ход всей работы и Вас публично обвинят в саботаже. Далее вас будут всячески изживать из коллектива и из компании.

Прошивки это всегда простые и тривиальные программы

Да и программы для МК на самом-то деле очень простые. Вся работа прошивки - это перекладывание байтов. Из интерфейса в память. Из памяти в интерфейс. Прочитать по ADC напряжение и выполнить функцию.

В программировании микроконтроллеров самая большая радость - это когда просто мигает лампочка на электронной плате.

Все что вам понадобится из теории computer science (CS) это теория конечных автоматов, очень редко PID регуляторы, самые базовые и простецкие структуры данных как массив, FIFO(шка), циклический массив).

Очень маловероятно, но может пригодится бинарное дерево поиска для реализации простого NVRAM во внешней памяти. https://habr.com/ru/articles/732442/

Пару раз вероятно пригодится динамическое программирование, чтобы просканировать шину RS485. https://habr.com/ru/articles/752292/

Может пригодятся численные методы. Плюс цифровые фильтры, преобразование Фурье, триггер Шмитта и AES шифрование для загрузчиков. Вот, пожалуй, и всё...

Остальная громадная классическая теория Computer Science (CS) будет Вам скорее мешать, чем наносить пользу. Я вот ни разу не видел LIFO, AVL деревьев, красно-черных деревьев, косых деревьев в исходниках каких бы то ни было прошивок, хотя onen-sourc(а) насмотрелся порядком. Ни разу не видел хеш-таблиц, фильтров Блума, графов. Все это добро в большинстве своем даже с доплатой не нужно в программировании микроконтроллеров.

В программировании микроконтроллеров 95% случаев нет никакой академической математики или классических алгоритмов из CS. А если на горизонте и вырисовываются такие логические задачи, то это становится праздником, подарком судьбы для программиста МК. Сотрудник с удовольствием делает эту часть работы, а потом ещё и пишет про это пост на habr и рассказывает всем как он здорово справился с этой ситуацией.

Тема

URL

1

DFT в прошивке

https://habr.com/ru/articles/765896/

2

FSM для определения обрыва в цепи*

https://habr.com/ru/articles/762142/

3

FSM для кнопки

https://habr.com/ru/articles/760088/

4

DSA для парсинга float числа*

https://habr.com/ru/articles/757122/

5

Динамическое программирование для сканирования RS485**

https://habr.com/ru/articles/752292/

6

BST для SPI-Flash NVRAM***

https://habr.com/ru/articles/732442/

7

DS-TWR для UWB*

https://habr.com/ru/articles/723822/

8

Вывод формулы для DS-TWR

https://habr.com/ru/articles/723594/

9

Теория управления шаговым двигателем***

https://habr.com/ru/articles/709500/

10

NVRAM для on-chip flash**

https://habr.com/ru/articles/706972/

Но за 12 лет у меня было только 7-10 таких случаев. В сумме 3-4 месяца по-настоящему интересной творческой инженерной работы. А остальные годы это просто рутина и тягомотина по перекладыванию байтов и починке чужих багов.

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

Даже если Вы будучи программистом MCU и научитесь чему-то особенному и необычному, то это скорее всего нигде тут не пригодится. В России традиционно электронику делают очень-очень топорными способами: без сборки из скриптов, без модульных тестов, без серверов сборки, без кодо генерации, без HIL стендов. Просто тупо пишут функционал и точка. Если Вы будете учиться, то уже через 2 года Вы будите overqualified. Вот Вам яркий пример... Выучили Вы например CMake (отличный инструмент, без шуток), приходите работать в военное НИИ AФАР-радары программировать, а там до Вас дедушка прошивки собирал из-под IDE-IAR 15 лет подряд. И что? Вы будете CMake скрипты писать для 150 файлов из распакованного *.zip архива? Нет конечно же. Более того. Да Вас за такое уволят еще на испытательном сроке!

Понимаете, в России лояльность и конформизм важнее мастерства!

Российские организации у программистов микроконтроллеров больше ценят умение вручную трассировать печатные платы в P-CAD и умение руками паять SMD компоненты (без микроскопа), чем все эти Ваши моднявые IT(шные) технологии как DevOps, сборка из скриптов, модульные тесты, кодо-генераторы. Да.. Вот так.. Понимаете?

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

1—Экономия на зарплате. Вчерашнего студента легко унизить на собеседовании и склонить работать за зарплату вплоть до 25к-42к RUR в мес.

2—Научить юнца под себя, то есть научить малыша своим плохим практикам. Зачастую вчерашние ВУЗ(овцы) ещё не знают о таком понятии как технологии промышленной разработки ПО, поэтому в их голову можно легко вложить любое убеждение, даже самое абсурдное, например, что передавать код проекта в *.zip архиве по почте, и сборка из-под GUI-IDE это вообще норма жизни, и тому подобное.

Однако, вернемся к тезису о простоте программ для микроконтроллеров... Даже если программа для MK Вам кажется сложной, то это значит только то, что программа неправильно написана. Вот примеры пере усложнения кода (обфускация) из жизни (War Story)

1-Плохая архитектура всего проекта.

2-магические циферки на каждой строчке

3-доступ к регистрам в каждом файле проекта

4-повторяемость кода

5-Написание тривиальных проектов на С++ вместо Си

6-очевидные комментарии

7-"заборы" из комментариев ///////////////////////////////////

8-отсутствие сортировки #include(ов)

9-отсутствие сортировки прототипов функций

10-*.с файлы оснащены не одноименными *.h файлами.

11-макросы маленькими буквами

12-вся прошивка в одном main.c файлике 75000 строк аж подвисает текстовый редактор.

13-код без модульных тестов или код перемешанный с тестами

14-функции от 1000 до 5000 строк и более

15-Использование RTOS там, где это не надо

16-Вставка препроцессором #include *.c файлов.

17-Функции с именами литературных персонажей

Всё это провоцирует мысли, что якобы программировать МК это сложно. Однако при соблюдении элементарных хороших практик программирования, программы для МК получаются простыми и прозрачными. Не надо путать сложность и пере усложненность. Зачастую намеренную (см обфускация кода) с целью быть незаменимым сотрудником в организации.

В добавок к этому, так как частота микроконтроллера маленькая, то прошивки крутят довольно простые программы. В прошивках, как правило, нет никакого процессинга над данными и нет никакого computing(а). Быстрее бывает отправить данные на Web сервер, чтобы рассчитать что-то там и принять ответ, чем считать что-то на MCU. А если и есть процессинг, то вендоры прячут ЦОС в статические библиотеки (LС3, CIC). Поэтому Вы не сможете оценить красоту алгоритмов и структур данных.

Прошивки - это прочитать значения из датчика и показать циферку на экранчике. Всё сводится к тому, что надо GPIO мигнуть, кнопку прочитать, испустить PWM сигнал и прерывания по перепадам напряжений отловить. В микроконтроллерах нет нужды даже в алгоритмах сортировки. В сущности прошивки только прописывают константы в регистры и считывают регистры SoC(а). А это, в свою очередь, приводит к активации электрических цепочек внутри SoC(а). Со стороны вся цифровая электроника только и делает всего-навсего 4 простых действия:

1--установить на проводе 0V

2--установить на проводе 3.3V

3--считать с провода 0V

4--считать с провода 3.3V

Машина Тьюринга. Вот и всё. Easy!

Программы для МК в основном нужны там, где надо быстро сигналы обрабатывать. Для управления любыми двигателями (прошивки-спиннеры), для считывания датчиков физических величин. В таких вещах не должно быть никакой осечки и неожиданного поведения. Во встраиваемых системах не будет всех передовых технологий как MMU, Cache, динамического выделения памяти. Так как они не дают гарантии на время отклика. Есть правила MISRA, которые вообще запрещают много интересного, например, динамическую память. Нет динамической памяти, а значит нет и абстрактных структур данных. Нет сортировки слиянием, быстрой сортировки. Разработчик MCU обычно за год делают проект и переключаются на другой. В микроконтроллерном программировании всё очень топорно устроено. 

В программировании МК как такового программирования-то мало. В программировании МК не происходит ничего особенного. Как правило такие программы принимают пакеты из интерфейсов и что-то прописывают в интерфейсы или читают датчики и передают показания в интерфейсы. Принимают прошивку и прописывают её во Flash память. В основном задачи вида прочитать SPI датчик и переслать значение в провода. Получить из проводов команду и включить лампочку. Получить из проводов массив и прописать его в энергонезависимую память и т.п.

Много работы с перекладыванием бумажек

Для программирования микроконтроллеров надо очень хорошо ориентироваться в множестве официальных документов.

Вникать в спецификацию компилятора (~1k страниц), стандарт языка С (~700-1k страниц), спецификацию процессорного ядра (~300 страниц), спека RTOS(а) (~250 страниц), обязательно ознакомиться с перечнем ошибок проектирования кристалла (~20 страниц), вникать в спеки каждой микросхемы (~50...5k страниц) на печатной плате. Искать куда идут провода(~1-100 страниц). Читать логи сборки (300 страниц) Стандарт функциональной безопасности ISO-26262 (450 страниц). Вникать в спецификации BlueTooth LE (1 профиль-500 страниц). Вникать в спецификации других беспроводных интерфейсов (320 стр)*60. Вникать в спеки бинарных и текстовых протоколов: TCP/IP, J1939, CANOpen, DLMS, ModeBUS, MQTT, LoRaWAN, UBX, NMEA, xModem, Pelco-D, ASN.1, RTCM 3.x. Читать RFC. Всё на английском. Некоторые спецификации надо покупать. Плюс каждая российская организация, колхозит еще свой собственный никому больше не нужный бинарный протокол и выпускает про него спеку (60 страниц). В общем читать, читать, читать.

Вам придется как юристу очень много пылиться в чтении официальных документов. Вы однозначно будете читать больше чем программировать. В профессии программист-микроконтроллеров 20% времени - программирование и 80% времени - перекладывание бумажек.

программист-микроконтроллеров = курьер

В российских военных компаниях полностью бумажный документооборот. Там нет Jira или яНДЕКС Трекера. Поэтому Вас как программиста микроконтроллеров будут частенько использовать как пневмопочту по городу и области -+70км в другие НИИ и ФГУП(ы). Иногда будут давать водителя на убитом Renault, а иногда нет. Бывает идёшь на работу и думаешь, что сегодня будешь программировать в прошивке абстрактную структуру данных из учебника Axo, а в реальности полдня сидишь в Renault Logan в зимней пробке внутри вейпингового облака и вдыхаешь "дым отечества" курева водителя.

Невозможность монетизации

В разработке прошивок в принципе не может быть никакой монетизации как в Web сайтах. Никто не будет вам платить 10$ в месяц за аккаунт в прошивке. Это было бы просто смешно. Цена прошивки без физического устройства 0 рублей 0 копеек. Продажи прошивок жестко ограничены продажами электронных устройств, которые крутят эти прошивки. А количество электронных устройств жестко ограничены производственными возможностями конкретной организации. При этом в России нет массового производства никакой электроники. Просто былая промышленность СССР утрачена, продана. В российских электронных организациях как правило мелкая серия электроники 100..500 штучек чего-либо за весь жизненный цикл продукта. Причем сами электронные платы обычно паяют в подвалах вручную 2...3 тётушки бальзаковского возраста. Выглядит всё это очень удручающе. В yield(де) как правило 60% брака. Сами понимаете, что много народных гаджетов так не наклепаешь. При этом стоимость конечного российского изделия на MCU (какой-нибудь пресловутый СКУД) редко превышает 30kRUB.

Ну сами представьте сколько может стоить работа по написанию I2C драйвера для микросхемы AT24C02M5 стоимость которой 11 рублей (0,12 USD)? И какое отношение у людей к такой работе.

Поэтому программисты микроконтроллеров самые низкооплачиваемые программисты в России, работающие в массе своей за идею. Просьба отнестись к этому с пониманием.

Вам оно надо?

Низкий престиж профессии программист микроконтроллеров в российском обществе

Приведу только два примера.

Когда я поздно вечером после 23:00 прихожу домой с работы программистом-микроконтроллеров я обнаруживаю дома как мой брат играет в видеоигры на DeskTop PC. Что-то типа GTA-5, Crisis или Half-Live 2 и поговаривает:

Вот этих программистов я уважаю! Отличную компьютерную программу написали парни! Какая физика! Какое динамическое освещение! Сразу видно, знатно поработали ребята!

Он пристреливает очередного Combiner(а). Потом он поворачивает голову в мою сторону и говорит:

А то, что ты там программируешь в своей северной промзоне 10й год по 3й форме допуска, я до сих пор не знаю...

Вот! Посмотри сам. GameDev программисты игр и являются True-Программистами, а ты, embedder, вообще не пойми кто!

Большинство моих знакомых (соседи, попутчики в электричке, дальние родственники) даже не подозревают, что в РФ вообще занимаются какой-то электроникой. При словосочетании "российская электроника" у них перекашивает лицо.

В регионах нашей необъятной Родины жители и вовсе испытывают средневековый суеверный страх перед электроникой. Буквально в 440 км от Москвы я лично слышал от местных фразы типа:

Накой нам Ваша электроника? От неё люди болеют!

Вот так, господа....

Программист-микроконтроллеров это устаревшая профессия

Прошли те времена когда у программистов MK было много интересной и разнообразной работы.

Прошли времена отдельно стоящих магнитофонов, CD player(oв), iPod(ов), лазерных считывателей штрих кодов, игровых приставок Dendi и Тамагочей. Прошли времена пейджеров и кнопочный мобилок от Siemens\Nokia\Motorola, прошли времена отдельных диктофонов, отдельных mp3 плейеров. Прошли времена отдельных устройств навигаторов (Garmin(ок)).

Все эти устройства работали под управлением микроконтроллера внутри. Сейчас всё эти микроконтроллерные устройства - даже не музейные экспонаты, а товары блошиных рынков в гетто районах вашего города.

Нынче же вся телефония и всё мультимедиа (телефоны, маршрутизаторы, HMI), кассовые терминалы в магазинах, игровые ретро приставки Sega (SG800)- это всё Еmbedded Linux. Нынче всю электронику выгоднее делать на дешевых модулях c Embedded Linux (типа skw92) с OS Android или Arch Linux. Сейчас всё в смартфоне! Люди не хотят носить с собой ничего электронного, кроме смартфона. Понимаете?

Реалии таковы, что умение программировать user-space приложения под Android на Kotlin или iOS на порядок ценнее, чем умение программировать System Software для микроконтроллера на Си!

Ну сами подумайте, ну где Вы собираетесь программировать эти пресловутые микроконтроллеры, кроме как не в кружке робототехники "за идею" в качестве благотворительности?

Вы конечно можете разработать и сделать крутой офисный степлер со счетчиком оставшихся скоб, с OLED дисплеем, логером событий скрепления бумажек на SD карту. Но кому будет нужен такой навороченный степлер?

По факту MCU теперь нужны только в automotive и military. Automotive - классный вариант, без шуток, однако сильно подвержен кризисам и сокращениям штатов, а в military не зарплаты, а "зачисление корма" (я 3 года работал в military).

Чего вообще хорошего в профессии программист микроконтроллеров?

Однако не всё так плохо. Если сильно-сильно постараться и пофантазировать под вэйпингом, то можно найти причину и даже внутренний огонёк (свечку), чтобы продолжать заниматься программированием микроконтроллеров.

1--Первый плюс (Всё упирается в физику)

Первое достоинство этой работы в том, что тут всё конкретно и завязано на физические величины. Всё можно измерить. Есть полный контроль за устройством. Никакой OS, которая вдруг начнет обновлять антивирус на МК нет. На MCU нет виртуальной машины, нет гипервизора. Нет никакого недоверенного кода.

Всё можно оцифровать, любую физическую величину перевести в цифру. Всё упирается на физику и законы физики. Софт произрастает от схемотехники. Схемотехника произрастает из электротехники.

Как говорил наш университетский профессор

Электроника - это наука о контактах! Либо контакт есть, либо его нет...

Электротехника произрастает из физики. Никто не будет спорить с законами физики. Закон Ома не отменишь! Достаточно по диагонали просмотреть электрическую принципиальную схему устройства (Э3) и уже в общем-то становится понятно, что это такое и какое для неё должно быть firmware.

2--Второй плюс (созерцание материальных ценностей)

Товар сразу видно, его можно потрогать, показать, покрутить. В этой профессии создают настоящие материальные ценности. Именно программисты микроконтроллеров создали Tomahawk(и) и Javelin(ны), которые поменяли так много событий в стольких многих местах. Hi-Tech оружие с микропроцессорным управлением, оно способно поворачивать мировую историю вспять.

Именно программисты микроконтроллеров создали ABS, ESP. Именно программисты MK написали прошивку для кардиостимулятора. Именно программисты микроконтроллеров написали прошивки для марсоходов Sojourner, Curiosity, Opportunity, Spirit, Perseverance.

Благодаря разработке firmware программисты микроконтроллеров расширяют границы возможного! Создают продукты, которые любят во всем мире (например USB-Flash(ки)).

3--Третий плюс. (Простота и топорность).

Язык Си по сравнению с другими языками программирования самый простой язык программирования. Простой как ножик! Одни только функции и переменные. Ну что может быть проще? Красота! В программировании на Си не будет никаких программных делегатов как в C#, шаблонов, наследования, виртуальных деструкторов, контейнеров, перегрузки функций, нет сборщиков мусора, исключений и виртуальных машин, нет байт-кода. В программировании микроконтроллеров Вы никогда не услышите таких страшных слов как "FrameWork".

Более того в программировании микроконтроллеров строго осуждается, порицается и возбраняется так называемое "FrameWork(остроительство)"! Вплоть до увольнения с работы! Главный принцип в разработке это KISS и YAGNI. Никаких бантиков, пасхалок и стразиков в прошивках быть не должно в принципе! В программировании микроконтроллеров только один паттерн: конечный автомат и только одна абстрактная структура данных - это массив.

4--Четвертый плюс (Консерватизм).

Ещё в профессии программист МК, как в деревне ничего не меняется десятилетиями буквально сквозь века (XX-XXI). Си - самый древний язык из тех, что всё еще используются. Си(шнику) более 50 лет. Постоянный консерватизм в наборе технологий. Что в 2011 в военном НИИ мы программировали Cortex-M3 в IAR на C с классами, так и c 2021(го) в яНДЕКС.драйв всё так же программируют Cortex-M3 в IAR на С c классами. Поэтому эта работа подойдет для тех кто не очень-то хочет непрерывно доучиваться чему-либо. Обычно в этой профессии кристаллизируются вчерашние ВУЗ(овцы), которые еще не поняли, что вовремя перейти в Java разработку - это лучшее, что может с ними случится в жизни, и много пенсионеров, которые уже просто не могут освоить что-то ещё другое. Ибо с возрастом утрачивается способность мыслить последовательно.

5--Пятый плюс (никто не говорит тебе под руку).

Работа инженером в России хороша тем, что начальство, как правило, тебе не мешает. Как я уже упоминал, Начальство это в прошлом схемотехники, конструкторы, чертёжники, кто угодно но только не программисты и оно понимает, что ничего в Си-программировании не понимает и просто предпочитает не мешать программистам-микроконтроллеров работать. Или зачастую начальство программистов микроконтроллеров просто считает, что погружаться в подробности технической реализации программы продукта компании - это ну просто ниже их достоинства... Поэтому в 5ти случаев из 7ми никто не будет говорить тебе что-то под руку и стоять над душой. Никто не будет шипеть над ухом. Никто не будет критиковать твой микроконтроллерный системный код. Никто его даже смотреть не станет. Вот так и живем...

Давно прошли времена Сергея Королёва и Олега Антонова. Сейчас начальство безучастное. В детали продукта предпочитает не вникать. Присутствует только номинально и не воодушевляет коллектив инженеров на великие дела.

Вывод.
В целом профессия программиста микроконтроллеров такая как я тут написал. Мало программирования и много проводов. Если у вас есть выбор и вы хотите программировать на разных языках и быть в теме классической программной теории, если вам 20..25 и вы решаете как орешки олимпиадные задачи с LeetCode и хотите использовать в работе современные и классические алгоритмы и структуры данных, если вы хотите быть в авангарде IT индустрии, то программирование MK вам точно не подойдет. Тут просто не нужно ничего кроме FIFO и конечных автоматов. Займитесь лучше Back-End(ом), Front-End(ом), Web(ом), нейросетями, GPU, мобильными приложениями, Data Science, Zero Coding, базами данных, GameDev(ом). Слава и деньги именно там!

А еmbedded-мир сильно отстает от "большого IT" (прежде всего Web(а)). Как правило в embedded нет систем контроля версий сорцов, нет сборки из скриптов, нет менеджера пакетов, нет командной работы, нет планёрок, нет автосборок, нет авто тестов, нет инспекции программ, нет KanBan(а), нет DevOps(а). Зарплаты программистов микроконтроллеров 2-3 раза ниже чем в WEB(е).

Программист микроконтроллеров в окружении Web программистов обычно выглядит как дровосек в сообществе учёных.

Вам не кажется странным почему культовый сериал "Кремниевая Долина" сняли не про программистов микроконтроллеров, которые пишут прошивку для нового SSD, а про Web программистов, которые пишут компрессию данных? Почему главные герои не ходят там в комбинезонах по чистым комнатам гигафаба? Где в сериале, собственно, кремний-то?

Тот же С++ и то более живо развивается и конвертация навыков выше. В С++ появились стандарты 11, 14, 17, 20, а plain С это 89, 99, 2011 и, кажется, всё. 

Если сравнивать программирование микроконтроллеров с web программированием, то это как водитель вертолета и водитель пассажирского авиалайнера. У WEB программистов существенно более мощная вычислительная техника (сервера, DeskTop(ы)), их продукт обслуживает миллионы людей. Их как пилотов Boeing 737 окружает слава и внимание.

У программистов - MCU наоборот слабенькие процессоры. Программа для микроконтроллера служит, как правило, только одному единственному человеку (например прошивка для кардиостимулятора). Зато программисты MCU ближе к контролю real-time процессов. Подобно тому как вертолетчики могут приземляться и взлетать вертикально.

По моим наблюдениям за 10 лет в среднем трое из пяти, кто начинал с программирования MK спустя 3 года переметнулись в другие виды программирования или совсем в другое. Программирование МК(ашек) это для тех кто готов закатать рукава, замарать руки и регулярно выходить из зоны комфорта.

Если же вы всё же по каким-то фантазийным причинам вдруг хотите программировать MCU(шки), то старайтесь тогда угодить в компанию, где делают модульное тестирование сорцов, собирают из Make файлов, есть командная работа (3+ вкладчика), практикуется пере использование кодовой базы, где фигурирует такое слова как AUTOSAR, CI/CD, есть планерки, инспекция программ, автосборки. И крайне важно, чтобы в компании отсутствовала секретность на схемотехнику, datasheet(ы) и техническое задание. Там хотя бы будет выше вероятность сделать хоть что-то по-настоящему ценное.

В общем, делайте правильный выбор!

Акроним

Расшифровка

MK / MCU

Микроконтроллер

CI

Continuous Integration

ОКРы

опытно-конструкторские работы

EMC

Электромагнитная совместимость

Links/URLs
Разработчики встраиваемых систем не умеют программировать https://habr.com/ru/post/555498/

Градация Навыков в Embedded Программировании https://habr.com/ru/articles/725156/

Изготовление Макета для Прототипа https://habr.com/ru/articles/709932/

Вы точно хотите пойти программистом в gamedev? https://habr.com/ru/articles/774972/

Кто такой embedded-программист (разработчик) и как им стать https://dzen.ru/a/YuijxdVJz03-ohId

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали МК?
74.7% да1110
25.3% нет376
Проголосовали 1486 пользователей. Воздержались 86 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программируете микроконтроллеры на С?
63.54% да821
36.46% нет471
Проголосовали 1292 пользователя. Воздержались 149 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программируете микроконтроллеры на С++?
34.55% да435
65.45% нет824
Проголосовали 1259 пользователей. Воздержались 174 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какой компилятор вы используете для сборки артефактов для МК?
9.37% IAR89
13.37% Keil127
59.37% GCC564
0.42% GHS4
4.95% Clang47
1.79% TI17
10.74% другой102
Проголосовали 950 пользователей. Воздержались 349 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какое процессорное ядро вы программировали?
56.99% ARM579
0.39% PowerPC4
1.97% MIPS20
3.05% RISC-V31
2.85% x8629
24.11% AVR245
3.25% Xtensa33
1.87% 805119
4.43% PIC45
1.08% командоаппараты11
Проголосовали 1016 пользователей. Воздержались 329 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы собираете артефакты из-под IDE?
60% да555
40% нет370
Проголосовали 925 пользователей. Воздержались 303 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы собираете артефакты из Make/CMake файлов?
46.59% да417
53.41% нет478
Проголосовали 895 пользователей. Воздержались 288 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы собираете артефакты из Make файлов?
38.5% да226
61.5% нет361
Проголосовали 587 пользователей. Воздержались 202 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы собираете артефакты из СMake файлов?
28.78% да158
71.22% нет391
Проголосовали 549 пользователей. Воздержались 202 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы собираете артефакты для МК из Ninja файлов?
7.52% да41
92.48% нет504
Проголосовали 545 пользователей. Воздержался 191 пользователь.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какой текстовый редактор вы используете?
23.5% Eclipse165
34.62% Notepad++243
13.82% Vim97
3.7% Kate26
13.53% Sublime95
2.56% Geany18
41.74% MS VS Code293
27.49% Другой193
8.12% CLion57
1.57% Еmacs11
3.56% CodeBlocks25
0.28% Atom2
Проголосовали 702 пользователя. Воздержались 149 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какой вы используете терминал COM порта?
3.74% HTerm21
10.85% TeraTerm61
48.22% Putty271
25.09% Terminal141
0.18% Serial Kingdom1
43.95% другой247
Проголосовали 562 пользователя. Воздержались 172 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программируете на С для DeskTop?
25.77% да151
74.23% нет435
Проголосовали 586 пользователей. Воздержались 117 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программируете микроконтроллеры по AUTOSAR?
2.46% да12
97.54% нет476
Проголосовали 488 пользователей. Воздержались 120 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
В какой OS вы собираете код?
70.19% Windows259
50.41% Linux186
7.59% Mac28
1.9% другое7
Проголосовали 369 пользователей. Воздержались 52 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы собираете артефакты прошивок при помощи AutoTools?
8.88% да19
91.12% нет195
Проголосовали 214 пользователей. Воздержались 59 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы в общем согласны с текстом?
61.54% да24
38.46% нет15
Проголосовали 39 пользователей. Воздержались 6 пользователей.
Теги:
Хабы:
Всего голосов 172: ↑147 и ↓25+122
Комментарии395

Публикации