4.7. Какой язык программирования мне следует выучить для работы с крупными встраиваемыми системами?

Если ограничить фразу «крупные встраиваемые системы» определением, предложенным мной для этой главы, то во всех крупных встраиваемых системах используется та или иная ОС. Пакет собственного ПО, загружаемого в такую систему, обычно не монолитен. Вероятно, там будет присутствовать слой прикладных программ, которые довольно отчётливо абстрагированы от аппаратной части, и слой драйверов устройств, входящих в состав аппаратных средств. Возможно, там будут какие-то программы, находящиеся между этими слоями и которые нельзя отнести в чистом виде ни к прикладным программам, ни к драйверам. Если вы читали мою предыдущую книгу «Open-Source Robotics and Process Control Cookbook», то можете представить, что я говорю о чём-то наподобие lircd — программы-демона, которая в системах под Linux декодирует поступающие из драйвера ИК-приёмника сигналы с ИК-пульта дистанционного управления и переводит коды в определённые пользователем строки. Lircd — пример такого рода «находящегося посерединке» ПО, о котором я здесь говорю. Если вы незнакомы с работой этой программы, то получить всю информацию о ней и загрузить её можно с www.lirc.org.

Из-за такого послойного разделения, вероятно, окажется, что любая подобная система будет состоять из большого числа программ, написанных на нескольких разных языках. С другой стороны, суммарный объём подобного проекта таков, что часто предполагает работу большой команды разработчиков ПО, не обязательно пересекающегося функционально. Следовательно, необходимый набор умений зависит от того, на каком уровне в иерархии абстракций вы хотите работать. Если вы хотите работать на самом нижнем уровне — уровне драйверов устройств и загрузчиков, — вам понадобятся хорошие знания ассемблера и языка С, а также умение работать с аппаратным отладочным инструментарием: адаптерами JTAG и т. д.

Если вы собираетесь работать на средних уровнях, то четко определить потенциальный набор умений весьма сложно. Некоторые из приложений этого уровня пишутся на довольно экзотических языках, таких, как Perl и Тс1, многие приложения — просто Си-программы. На этом уровне иерархии самым важным для вас будет очень хорошее понимание того, как сконструирован остов ОС и какие сервисы требуются для выполнения ваших приложений. Возможно, вам также понадобится уметь управляться с осциллографом и/или инструментами анализа протоколов, чтобы разобраться с тем, что происходит с вашим кодом, если вдруг возникнут проблемы во взаимодействии с драйверами устройств или понадобится понять какие-нибудь запутанные аспекты состояния ОС.

На верхнем уровне иерархии требуемые навыки определяются природой конечного продукта. Возможно, вы будете работать с Adobe Flash, Java или C++. Это полностью зависит от конечного продукта. Здесь будут очень полезны умения, которые вы обрели, программируя на уровне прикладных приложений в потребительских ОС. Вероятно, вы не будете отлаживать ваши программы, используя аппаратные инструменты как таковые, но будете запускать отладчик-заглушку на целевом устройстве и обмениваться с ним информацией через последовательное или Ethernet-соединение, чтобы посмотреть, как работает данное устройство. Но то, что вам понадобится умение проводить аппаратную отладку, крайне маловероятно.

Кстати, вам не следует принимать весь этот разговор о больших командах и программистах, работающих внутри изолированных коконов, как нечто данное свыше и неизменное ни при каких обстоятельствах. Я могу сказать по собственному опыту, что бывают случаи, когда многофункциональные 32-битные системы полностью разрабатываются одним-единственным инженером. Я уделяю особое внимание работе в большой команде по той причине, что материал данной главы в целом предназначен для читателей, которые в основном имеют опыт программирования на прикладном уровне. Я пытаюсь показать, каким образом человеку, обладающему опытом программирования на Java, но не очень разбирающемуся в системах реального времени, можно войти в мир этих чрезвычайно сложных систем. Если у вас есть опыт работы (или вы хотите его получить) на более НИЗКОМ уровне программной иерархии, то вы вполне можете создать свою собственную 32-битную систему, и некоторые из упомянутых мной ресурсов могут оказать вам помощь в достижении этой цели. Однако, в дополнение ко всем обсуждаемым в этой главе вопросам высокоуровневого программирования, вам понадобится и хорошее понимание низкоуровневых деталей, а также тех критериев выбора, которые были упомянуты в предыдущей главе, где я рассказывал о гораздо более «близких к железу» системах.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >