Как стать автором
Обновить

Библиотека генератора ассемблерного кода для микроконтроллеров AVR. Часть 1

Время на прочтение11 мин
Количество просмотров13K
Всего голосов 41: ↑38 и ↓3+35
Комментарии24

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

НЛО прилетело и опубликовало эту надпись здесь
Я планировал выложить библиотеку в следующей статье с описанием ее использования. К сожалению без этого ее использование может вызвать затруднения и создать неверное впечатление о ее работе.
| Можно было бы потратить много текста для объяснения зачем это понадобилось,
| но вместо этого просто посмотрим на примерах чем он отличается от других решений

Стоило потратить, так как в приведённом коде есть некоторые отсылки к синтаксису Си языка. Чем Си тогда перестал устраивать для решения задач AVR микроконтроллера?
Кроме своего псевдосинтаксиса ассемблера, не проще ли было взять синтаксис, например, TCL языка? Могло бы быть и сравнение с другими ассемблерами доступными для AVR.
Как пример c АБ (Algoritm Builder) Здесь его активно применяют пользователи

P.S. Определение вручную ещё и меток в данном «ассемблере», это где то, немного за гранью разумного программирования.
Вот ещё вариант дизайна ассемблера.
При написании статьи я много раз переписывал начало со сравнением различных систем и подходов к программированию AVR. Тема эта настолько объемная, что требует даже не одной полноценной публикации, а целого цикла. Если бы я начал с полноценного сравнения, то до описания библиотеки дело даже бы не дошло. Если кратко — я в курсе существования всех перечисленных продуктов и еще многих других, Вами не перечисленных. Более подробный сравнительный анализ предполагался в последующих статьях, посвященных описанию работы с библиотекой. Вероятно мне не удалось донести основную мысль данного проекта: Это библиотека на языке C# (к языку C этот проект не имеет никакого отношения), предназначенная для автоматизации написания программы на ассемблере (не «ассемблер», а стандартный и единственный описанный в документации производителя AVR assembler) без использования проприетарных библиотек. То, что это с точки зрения программы С# просто библиотека, позволяет использовать при программировании все возможности уже имеющейся продвинутой IDE, в отличии от проектов с полноценной реализацией языка. Это и ответ на замечание по — поводу меток. У программиста, который хочет написать программу на ассемблере должны быть все возможности использовать ассемблер напрямую, если высокоуровневая реализация его чем-то не устраивает. В том числе метки. Что касается графических языков программирования — у них свои сторонники и круг задач. Это же относится и к моему проекту. Если и рассматривать тех, кого он может заинтересовать, то это скорее те, кому нравится Arduino, но не устраивает его быстродействие.
Насколько данный проект масштабируем для использования с контроллерами другой архитектуры (ARM, MSP430, PIC, STM32, 8051)
(в каком месте проекта это масштабируется?)

P.S. И что из возможностей Visual Studio помогает в отладке кода на AVR контроллере?
(есть ли в этом варианте бесшовная интеграция?)
Давайте рассматривать эту библиотеку как сильно выросшие ассемблерные макросы. С этой точки зрения неважно о какой архитектуре идет речь. Масштабирование, если я правильно понял вопрос, это описание отличающихся объектов для каждой из архитектур и уникальный код ассемблерной реализации. С точки зрения написания универсального кода для всех архитектур этот продукт не очень подходит. В балансе оптимальность/универсальность здесь существенный перекос в сторону оптимальность.
Что касается отладки — библиотека заканчивается текстом ассемблера (не кодом, а именно исходным текстом, без всяких изменений приведенным в примерах в статье). Помощь в отладке заключается в возможности в исходном тексте указывать именованные метки, имена регистров, комментарии для размещения в выходном ассемблере.
Ok,
Но, можете просвятить, чем полезна Visual Studio IDE по сравнению с доступными другими IDE при использовании Вами для решения озвученного решения?
И что именно в IDE для Вас имеет первостепенное значение?

P.S. Сильно ли данное решение выиграет у Notepad++?
Советую ознакомится с visualstudio.microsoft.com/ru/vs/community/?rr=https%3A%2F%2Fwww.microsoft.com%2Fru-ru%2Fsearch%3Fq%3Dvisual%2Bstudio%2B2013. Заодно еще раз обратите внимание на то, что версия Community абсолютно бесплатна. Все возможности, которые там описаны, справедливы и для этого решения, так как это просто программа на C#. Для того, чтобы пользоваться библиотекой, желательно знать, что такое C# и как на нем программировать. В этом случае все Ваши знания об удобстве и предпочтительности различных IDE для C# будут справедливы и для данного проекта

Заголовок своей первой публикации стоило бы вычитать более внимательно

Уточните пожалуйста, что Вам кажется неправильным в заголовке.
Лично мне из названия было ничего не понятно до тех пор, пока я не открыл статью и не дочитал до примера кода на C#. В заголовке и тегах об этом ни слова.
Ну в целом впечатления смешанные. Но безусловно стоит продолжать. Пока еще не совсем ясно, что и зачем. Да, интересно. Да, на вид круто. Но что и куда — не ясно. К тому же не ясно, как даже попробовать это все (тут многие используют Linux...).
Спасибо за оценку. Что касается Linux — то здесь все просто. Библиотека собирается и под Core (спасибо Microsoft за то, что не обходит вниманием и другие ОС). Что касается остального — дождитесь пожалуйста следующей публикации.
И в слове «ассеблерного» пропущена буква — м
Спасибо. Исправил.
Когда-то программист должен был сделать три вещи: свой компилятор, свою ОС, свою файловую систему. По моему это первый пункт.
И, ещё свой редактор текста (IDE в современных реалиях) :)
Да, только это не совсем компилятор, а скорее интерпретатор. На выходе ассемблер, а не машинный код. Хотя, википедия говорит, что ассемблер (иногда) тоже является результатом работы компилятора, но в нашем случае автор предлагает скопировать ассемлерный код в другую среду и уже там скомпилировать.
Интерпретатор (в чистом виде) ничего не компилирует — он читает и сразу исполняет команды.

В вашем случае это компилятор — транслирует программу с одного языка на другой.

Точно, транслятор!

Транслятор более общее понятие. Интерпретатор тоже транслятор.

Я всё-таки прочитал статью и посмотрел примеры, тут вообще нет никакого «транслятора» кроме самого сишарпа. Тут просто генератор кода (да и название статьи намекает ;). Код генерируется вызовами методов из этой либы. Вот если писать компилятор, то эта либа может пригодиться для бэкэнда.

Забавная цепочка: C# компилируется в дотнетовский байткод, затем этот байткод JIT'ится в нативный и исполняется, им генерируется ассемблерный листинг, который сперва препроцессируется и только после транслируется в код для AVR.

P.S. Почему-то принял вас за автора, видимо из-за похожего строения ника :)

То же самое можно сделать на браузерном javascript, и даже не в ассемблер компилировать, а в бинарь. Тогда инструментом можно будет пользоваться на любой платформе

Фи, ваш жаваскрипт не на всякой платформе работает.
Лучше на форте, где его только не реализовали, его тут недавно даже на МК-161 портировали.
Вот где кроссплатформенность! ;)

Тогда и разрабатывать придётся на forth. Здесь смысл в том чтобы на высокоуровневом языке генерировать целевой код со всеми удобствами языка(IDE, например)

Кстати, да, делал такое на Форт и в варианте с IDE в далёком 2003 году.

P.S. Сейчас в Win32Forth гораздо продвинутую сделали IDE — Win32ForthIDE :)
Под Форт можно добавить любой произвольный язык в интересующем варианте, как в виде Форт-расширения, так и интегрировавшись с ним или вызова через DLL или другими вариантами.
Отдельные оригинальные Гуи библиотеки есть и в русской Форт системе SPF4.
Думаете Форт не достаточно высокоуровнев(?) и в связке со своими «низкоуровневыми» возможностями очень удобно решает задачи.
Пример: Brad Rodriguez: Как написать свой (кросс-)ассемблер

В плане разработки, интерактивные языки, без первоначального задействования Гуи достаточно эффективны (вспоминая историю и дизайн Питон языка)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории