«Встроенный» - это немного загруженный термин.
В некоторых отношениях любая система, предназначенная для запуска одного приложения, может называться встроенной системой, если имеется некоторое оборудование, которым нужно управлять. Можно с уверенностью назвать 400 МГц PPC604 с 2 ГБ ОЗУ, на котором запущено Java-приложение поверх linux, встроенной системой, если она управляет процессом через локальные модули ввода / вывода. С другой стороны, Arduino, просто запускающий какое-то минимальное сетевое приложение, не будет в значительной степени встроенной системой. Но, вероятно, «встроенный» заставляет большинство людей думать о контроллерах на базе флэш-памяти, имеющих всего несколько сотен байтов оперативной памяти, об отсутствующей операционной системе и множестве встроенных периферийных устройств.
При этом, вероятно, две большие проблемы, с которыми не встроенные программисты обычно сталкиваются при изучении встроенных систем, - это регистры ввода-вывода и прерывания.
Прерывания могут быть на самом деле более простой из двух концепций для не встроенных программистов, поскольку основные проблемы с ними, параллелизм и программирование на основе событий, часто встречаются в основных приложениях. Боль в прерываниях связана с чрезвычайной чувствительностью системы к качеству обработки прерываний и сложностями работы с аппаратными средствами для устранения состояния прерывания и его настройки для следующего. С графическим интерфейсом тупик убивает только приложение. С обработчиком прерываний, тупик вызывает блокировку всей вашей системы.
Устройства ввода / вывода кажутся той областью, которая вызывает наибольшую сложность. Для непосвященных, это может быть весьма удивительно обнаружить , что чтение этого регистра здесь оказывает влияние на этот регистр там . Написание 1, чтобы очистить биты. Биты состояния, которые очищаются, когда вы читаете регистр данных и т. Д. С аппаратным обеспечением ввода-вывода существует так много возможностей, что нет общего правила обращения с ним, кроме как научиться находить и интерпретировать листы данных устройства. Написание драйвера устройства для последовательного порта многому научит вас при программировании ввода / вывода низкого уровня.
На самом деле ничто не заменит изучение этих вещей, чем закатать рукава и запрограммировать какой-нибудь прямой язык C и / или ассемблер на голом металле. Даже вышеупомянутой встроенной системе на основе Java в конечном итоге требуется драйвер устройства для ввода / вывода, и это означает, что в конечном итоге нужно иметь дело с C. Опыт - лучший учитель. Выберите микроконтроллер, будь то MSP430, TMS320, AVR, ARM, PIC, 68HC11, что угодно, найдите набор eval и соберите несколько систем.