Че должен уметь мидл ембеддед прогер:
1) облечь протокол передачи данных в другой протокол, в том числе самостоятельно разработанный
2) иметь воспроизводимый опыт работы с большинством популярных интерфейсов передачи данных
3) иметь воспроизводимый опыт решения некоторого количества типовых задач при написании встроенного ПО
(например элементы управления, датчики, индикация и дисплеи с gui, обработка сигналов и логирование и тд)
4) знать как сделать ПИД регулятор и уметь его применить так чтобы это можно было зарелизить
5) знать тот апи который использует, и знать как при необходимости зафигачить на регистрах
6) работа с ртос, примитивы синхронизации, распределение задач по таскам, обмен данными между ними
7) знать язык (С и С++, оба) на среднем уровне
8) иметь представление о том как устроена периферия своего МК на низком уровне, иметь опыт работы с 50% всего что есть в своём МК
9) уметь создавать свои секции в линкере и читать/писать туда данные
10) уметь оценить сложность алгоритма, измерить время его выполнения
11) понимать как выделить и освободить динамическую память
12) уметь разработать отдельные модули кода, из которых впоследствии можно будет составить прошивку
13) понимать, что непонятно в поставленной задаче и говорить об этом