Изучите C и приобретите дешевую плату для разработки микроконтроллеров, такую как MSP430 или ARM Cortex, и, по крайней мере, напишите и загрузите несколько программ на C.
У меня есть степень по компьютерным наукам и опыт разработки программного обеспечения, в основном программирование на C ++ для игр, а теперь - игры и приложения для iOS, но моей последней работой был полупрофессиональный концерт EE, который начался с кучей программных прошивок для системы ARM Cortex M3. и затем я научился делать базовые схемы и макет платы, а также пару простых плат. Поэтому мне пришлось столкнуться с проблемой использования лучшего языка программирования для соединения дизайна аппаратного и программного обеспечения как человека, который отвечал за оба конца этого.
C это абсолютно тот язык, который вам нужно знать. Людям, которые программируют на C ++, просто не нужно ограничивать себя набором функций C, чтобы сказать «это одно и то же», но это не так. Особенно то, как C ++ развивал и собирал функции, и то, как обычные программисты на C ++ используют эти функции, это действительно совсем другое дело - работать над достаточно большим C-приложением по сравнению с C ++-приложением. Ваш SDK прошивки будет представлять собой набор библиотек C, все остальное, что поместится на MCU, будет библиотекой C, любая ОС, имеющая смысл на MCU, будет написана на C и т. Д. И т. Д.
Тем не менее, поскольку многие из наборов инструментов MCU в конечном итоге используют GCC в качестве своего компилятора, вы почти наверняка получите компилятор C ++, если вы используете приличное семейство MCU. Но вы должны быть очень осторожны с функциями, которые вы используете, особенно со стандартными библиотеками, так как очень легко получить двоичный файл, который слишком велик для вашего устройства. Я думаю, что есть хороший аргумент для использования C ++ на встроенных устройствах, C ++ имеет довольно много приятных функций, которые имеют помет или нет размера или потери скорости, вам просто нужно знать, что вы делаете, и писать код так, как это нужно. дальше в конце спектра в стиле C, чем в конце спектра в стиле STL, с точки зрения разумного использования признаков.
Не обращайте слишком много внимания на людей, которые говорят, что вы можете использовать Lua или Python на MCU с правильным встроенным интерпретатором, бла, бла. Это правда, я сделал это, и это весело, но на данный момент это больше для игрушечных проектов и тому подобного, что появляется на Hack a Day. Я думаю, что мы увидим больше такого рода вещей, поскольку закон Мура неуклонно применяется даже к самым маленьким процессорам, это происходит с играми, в которых раньше было много сборок, а затем они дольше выдерживают C и C ++. чем все остальные, и теперь все так быстро, а производительность разработчика настолько важна, что большая часть разработки выполняется с использованием встроенных языков высокого уровня или напрямую на языке высокого уровня. Несмотря на это, пройдет несколько лет, прежде чем вы увидите, как компании нанимают программистов для прошивки с опытом работы с Python и Lua.
Не тратьте слишком много времени на сборку. Неплохо быть знакомым с концепциями, но вряд ли вы обнаружите, что много делаете, если вообще программируете на ассемблере. Есть такая традиционная мудрость с играми и встроенными, что это «полезно знать» сборку, часто повторяемую людьми, которые на самом деле не работают в этих областях. Но на самом деле очень маловероятно, что вы вообще когда-либо напишете какую-либо сборку, и если вы это сделаете, вероятно, это всего лишь несколько строк для оптимизации или что-то с аппаратным обеспечением, для которого у вас просто нет API (но вы будете после того, как вы напишите одну, которая обернет несколько строк сборки). Я работал над несколькими играми, и этот проект по разработке плат / прошивок, а общее количество сборочных линий, которые я написал для коммерческих проектов, вероятно, невелик. Это'