Че должен уметь синьор ембеддед прогер (по PCB потом напишу) :
1) облечь протокол передачи данных в другой протокол, в том числе самостоятельно разработанный
2) иметь воспроизводимый опыт работы с большинством популярных интерфейсов передачи данных
3) иметь воспроизводимый опыт решения большинства типовых задач при написании встроенного ПО
(Элементы управления, датчики, индикация и дисплеи с gui, обработка сигналов и логирование
4) разбираться в лицензиях на исходники
5) знать основы управления, ПИД и тд и уметь их применять так чтобы это можно было зарелизить, уметь бороться с некоторыми распространенными нелинейностями, если это технически реализуемо.
6) знать тот апи который использует, и уметь исправлять баги этого апи, знать как при необходимости зафигачить на регистрах, и знать когда возникает такая необходимость
7) работа с ртос, примитивами синхронизации и прочими фичами. Уметь раскидать функции устройства по таскам ртос
8) знать язык (С и С++, оба) на хорошем уровне
9) иметь представление о том как устроено ядро своего МК и его периферия на низком уровне, иметь опыт работы с 99% всего что есть в своём МК, понимать для чего оно, в каких случаях применять
10) немного знать асм своего мк
11) знать какие есть и как включить защиты от слива прошивки и иметь представление о реверсе, понимать по каким адресам что лежит, уметь модифицировать линкерскрипт и создавать свои секции в нем
12) уметь оценить сложность алгоритма, измерить быстроту его выполнения на выбранном МК, иметь опыт использования оптимизации О2/О3 и контрмер против "выкидывания нужного"
13) понимать как работает и зачем нужен стек и хип
14) уметь разработать архитектуру прошивки и логично скомпоновать по файлам исходный код, уметь вообразить работу устройства или узла целиком чтоб написать прошивку
15) проводить тестирование кода (не важно с помощью фреймворка или как то вручную, главное чтоб достигалось требуемое поведение прошивки)
16) иметь опыт работы с отладчиками, конвертерами интерфейсов, лог анализаторами, осциллом
17) уметь декомпозировать комплексные и плохо сформулированные задачи на простые и понятные
18) пользоваться разными видами дебага (uart, брекпоинты и тд)
19) уметь вести в гит проекты (не важно через гуй или консоль)
20) знать о том какие распространенные ошибки случаются не по вине софта а по вине платы, чтоб не гадать полдня почему не работает
21) иметь опыт написания бутлоадера, обновления прошивки
22) уметь самостоятельно формировать вопросы по уточнению ТЗ при нахождении неточности от которой зависит как будет написана прошивка
23) прикинуть приблизительные сроки на написание прошивки, закладывать резерв