цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Актуален ли ассемблер при программировании встраиваемых систем




Актуален ли ассемблер при программировании встраиваемых систем

Автор: Mike(admin) от 10-11-2022, 15:35

Нужно ли знать ассемблер для программирования встраиваемых систем


Поскольку встраиваемые системы продолжают развиваться, вы можете задаться вопросом: следует ли мне изучать язык ассемблера для разработки встроенного программного обеспечения? В данной статье давайте попытаемся разобраться в этом.


Актуален ли ассемблер при программировании встраиваемых систем

Здесь мы попытаемся объективно поддержать или опровергнуть типичные ответы на вопросы о необходимости ассемблера, которые можно найти на форумах по разработке программного обеспечения и других интернет-ресурсах. В конечном счете, наша цель – помочь вам решить, требует ли ваша конкретная ситуация изучения или обучения программированию на языке ассемблера.


Упрощает ли язык ассемблера отладку программного обеспечения


Это теоретически верно, однако преимущество отладки, обеспечиваемое знанием языка ассемблера, редко реализуется на практике. Многие платы для разработки микроконтроллеров (как на изображении, приведенном далее) оснащены встроенными отладчиками, позволяющими разработчику устанавливать точки останова, приостанавливать выполнение и запускать свой код построчно в интегрированной среде разработки (IDE).


Актуален ли ассемблер при программировании встраиваемых систем

Когда выполнение приостановлено, отладчик также позволяет пользователю просматривать содержимое центрального процессора (ЦП) и периферийных регистров микроконтроллера. Построчное выполнение кода почти всегда сопоставляется со строками пользовательского кода C. Хотя технически это прокси для построчного выполнения машинного кода, это позволяет разработчику просеивать свое программное обеспечение в поисках ошибок во время выполнения, даже не просматривая и не интерпретируя ассемблерный код, сгенерированный компилятором (на след. изобр-ии).


Актуален ли ассемблер при программировании встраиваемых систем

Несмотря на это, безусловно, бывают случаи, когда ошибка во время выполнения заставляет разработчика смотреть дизассемблеруемое представление своего кода (где IDE сопоставляет мнемонику ассемблера с машинным кодом), однако такие случаи крайне редки. Можно сказать, что сила знания ассемблера в отладке программного обеспечения встраиваемых систем значительно снижается из-за эффективности построчной внутрисхемной отладки в коде на языке C (следующий рисунок).


Актуален ли ассемблер при программировании встраиваемых систем

Нужен ли ассемблер для устройства на работу разработчиком встраиваемых систем


Ежегодно IEEE Spectrum публикует результаты опроса, показывающие самые популярные языки программирования в этом году. В этом, 2022 году, согласно объявлениям о вакансиях, язык ассемблера занял 30-е место в списке (уступив даже Коболу), а C и C++ заняли 6-е и 7-е места соответственно. Эти рейтинги относятся ко всем отраслям, поэтому неудивительно, что C/C++ занимает такое высокое место, а ассемблер – такое низкое. Тем не менее, просмотр объявлений о вакансиях в области встроенного программного обеспечения и разработки устройств Интернета вещей (IoT) подтверждает, что опыт программирования на языке C чаще указывается в качестве обязательного навыка, чем язык ассемблера.


Несмотря на более низкий рейтинг в последних объявлениях о вакансиях, использование ассемблера часто может зависеть от конкретного карьерного пути, который вы выбираете. Например, для инженеров наступательных и оборонительных кибервенных устройств язык ассемблера или код могут помочь улучшить ваше резюме. В сопроводительной статье к этим результатам опроса IEEE Spectrum упоминается, что многие списки вакансий в области кибербезопасности и кибервойны требуют опыта работы с языком ассемблера.


Это означает, что есть профессии, в которых программирование на ассемблере является важным навыком, хотя эти рабочие места могут не относиться к разработке встроенных систем. Однако другой поиск в Интернете вакансий в области разработки и проектирования компиляторов показывает отрасль, в которой знание языка ассемблера является обязательным. Каждый год разрабатываются новые архитектуры для специализированных целей, таких как рендеринг видео, запуск нейронных сетей и периферийные вычисления. Разработчиков нанимают для написания эффективных компиляторов, ориентированных на эти архитектуры и приложения.


Кроме того, существует несколько сообществ разработчиков, работающих над инструментами компиляции с открытым исходным кодом (например, коллекция компиляторов Gnu или проект LLVM). Опыт программирования на ассемблере также необходим, чтобы внести значимый вклад в эти проекты. Итак, если вы заинтересованы в такой работе, то изучение программирования на ассемблере – это не только хорошая идея, но и обязательный пункт. Однако, если вы хотите получить работу в области разработки встраиваемого программного обеспечения, преимущество изучения ассемблера более тонкое. Возможно, вам лучше отточить свои навыки в области языка C.


Программы, написанные на ассемблере, быстрее и меньше, чем программы на языке C


Чтобы этот ответ имел вес, мы должны проектировать систему с ограничениями по скорости или пространству, которые настолько велики, что мы пожертвовали бы временем разработки и переносимостью кода, чтобы удовлетворить их. Такое бывает редко. Производители продают устройства с обильной памятью для программ, а процессоры настолько быстры, что могут запускать интерпретатор Python прямо «на борту». Некоторые из этих проблем могут быть решены с помощью ассемблера при разработке встраиваемых систем, и их проще всего решить на этапе выбора устройства при разработке аппаратного обеспечения. Другими словами, если ваш скомпилированный код C не вмещается по объему или не работает достаточно быстро, используйте более крупное или быстрое устройство.


Более того, верно лишь отчасти, что программы на ассемблере работают быстрее, чем программы, скомпилированные на C. Компиляторы уже не так неэффективны по своей сути, как раньше, потому что в интересах компаний, создающих компиляторы (часто самих производителей микросхем) распространять наиболее возможен эффективный инструмент. Если ваш скомпилированный код работает медленно, страдает результат. В то время как программист может знать маленькие хитрости, чтобы сократить тактовые циклы на ассемблере, компилятор знает много своих собственных хитростей и никогда не забывает их использовать. Таким образом, даже несмотря на то, что в некоторых случаях запись непосредственно на языке ассемблера создает более быстрые программы, чем скомпилированный C, размер и скорость доступного оборудования в сочетании с инструментами разработки могут свести на нет эти преимущества написания встраиваемого программного обеспечения на ассемблере.


Ассемблер расскажет вам о прошлом программировании микропроцессоров


Часто, чтобы узнать, куда движется будущее разработки электроники, необходимо понять прошлое. В этом случае понимание того, как программировались микропроцессоры в прошлом, может оказаться очень важным. Изучать историю вычислительной техники и электроники с использованием ассемблера является более информативным подходом. Однако, если целью является практический урок истории, написание ассемблерного кода для Atmega328P или ядра ARM в Raspberry Pi не будет таким удовлетворительным или аутентичным, как обучение написанию кода, скажем, для MOS 6502. Примером устройства, использующего MOS 6502, является Commodore 64, показанный на следующем изображении.


Актуален ли ассемблер при программировании встраиваемых систем

Конечно, если вы действительно хотите использовать ассемблер для Raspberry Pi, для этого тоже есть книги и соответствующие ресурсы. Научиться программировать на ассемблере ради удовольствия – отличная причина, но программирование на ассемблере не является обычной практикой в современной разработке встраиваемого программного обеспечения. И это не является веской причиной для преподавателя включать программирование на ассемблере в свою учебную программу.


Ассемблер помогает программистам понять процессоры


Наконец, наиболее убедительная причина изучения ассемблера заключается в том, что он позволяет программисту лучше понять, что на самом деле делает процессор на самом низком уровне. Если вы хотите знать, что на самом деле происходит на каждом этапе выполнения, изучение ассемблера – лучший способ достичь этой цели. Знание ассемблера также позволяет вам изучить, что делает ваш компилятор для преобразования высокоуровневых условных операторов и циклов в C в машинный код.


Вывод: универсального ответа не существует


В данной статье дается довольно полный обзор причин изучения ассемблера, каждая из которых имеет свои достоинства. Однако при принятии решения о том, изучать или преподавать язык ассемблера, имеет значение конкретный контекст и цели каждого человека. Кому-то, кто хочет добавить рыночные навыки в свое резюме, может быть лучше попрактиковаться в разработке C для другого микроконтроллера, чем они привыкли. Другой человек может быть искренне заинтересован в теме и, следовательно, мотивирован узнать что-то новое. В этом нет ничего плохого.


В любом случае, если вы спрашиваете, следует ли вам изучать язык ассемблера, ваши собственные цели и мотивы должны направлять вас в данном вопросе.




© digitrode.ru


Теги: ассемблер




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий