Зачем учить ассемблер для AVR

👁 59 просмотров

Ассемблер или другие языки? Xто выбрать? Почему я должен выучить еще один язык, если уже выучил другие языки? Лучший ответ — это следующий аргумент: когда вы знаете английский и живете во Франции и общаетесь там на английском, то чувство неудобства общения никогда вас не покинет. Это потому что во Франции первоочередным и приоритетным будет является французский язык, на котором вас поймут где угодно в пределах страны.

Замечание! Данный курс по программированию микроконтроллеров не распространяется на процессоры ПК с операционными системами Linux/ Windows/Mac, не распространяется на обучение программирование сложных систем на подобие Ethernet, а отвечает только требованиям, которые необходимы для начинающих программировать на языке ассемблер без каких-либо языков высокого уровня.

Много разработчиков, имеющих большой опыт программирования для AVR и которые используют высокоуровневые языки(C/C++. Basic, Pascal…) в повседневной их работе рекомендует начинающим учить AVR на основе языка ассемблер. Причинами этого, чаще всего, являются следующие случаи:

  • если требуется легко анализировать возникающие ошибки;
  • если программа выполняется по другому, чем заранее проектировалась и ожидалась;
  • если высокоуровневый язык не поддерживает управление или команды для какой-то аппаратной части микроконтроллера;
  • если в программе есть критические ко времени выполнения места, где требуется быстрота выполнения.

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

Краткий и легкий

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

Быстрый и скоростной

Потому что выполняется только необходимый код шаг за шагом, за счет чего программа выполняется очень быстро. Продолжительность каждого шага известна и, обычно, он равен одному такту тактового резонатора. Критические ко времени программы, такие как измерители сигналов времен без аппаратного таймера, которые должны выполняться превосходно, должны быть написаны на ассемблера. Если у вас программа не прихотлива при выполнении ко времени и чип остается в 99% времени в режиме ожидания, то код можно написать на любом языке, на котором вы хотите.

Легок ли ассемблер в изучении?

Ассемблер очень сложен и не так легок в понимании, как другие, высокоуровневые языки. Изучение языка ассемблер для какой-либо типа процессора начинается с понимания базовых принципов архитектуры чипа и языковых диалектов. Одним словом – принцип и грамматика ассемблера одинаковы везде для любого процессора, но язык может отличаться грамматикой написания и диалектикой команд, отсутствием или присутствием команд той или иной операции. Высокоуровневые языки часто не позволяют использовать специальные функции микроконтроллера, так как они могут быть не реализованы для микроконтроллера и выходом из этой ситуации может быть использование вставка в код в высокоуровневый код ассемблерных вставок, чтобы использовать эту функцию.
Ассемблер очень хорош, если вы создаете программу в пределах 100 линий кода. Некоторые программы требуют до нескольких тысяч линий кода и для его оптимизации требуется много работы. То, что можно сделать нескольким линиями кода на языке высокого уровня на ассемблере идентичный код может быть написан десятками линий, но в то же время высокоуровневый язык более прожорлив к памяти, так как после компиляции программы инструкции языка высокого уровня транслируются в несколько инструкций языка ассемблера и дальше переводиться в машинный код, состоящий из единиц и нулей. Первый шаг в освоении для любого языка сложен, но после нескольких недель упорного самообучения можно уже осознанно программировать. Некоторые инструкции кода ассемблера можно понять через месяцы обучения программированию – это нормально.