Редактор ассемблера для ARM микроконтроллеров для компилятора gnu as. Старт

Итак, ассемблер вас все таки заинтересовал, может быть для написания каких то программ для cortex-m0 с целью уместить побольше, а может быть для написания каких то модулей для программ на другом языке, вариантов где это можно сделать у вас будет просто огромное количество — все известные среды поддерживают такую возможность…

Правда спустя какое-то время, вы поймете всю сложность написания кода в таких редакторах, просто потому что ничего более подсветки команд такие редакторы как правило не предлагают, ну еще возможно подсказки текстовые при вводе, причем подсказки именно из набираемого текста, чаще вообще бесполезные, потому как не учитывают контекст совершенно, плюсом идет сложность работы если проект подразумевает еще и несколько файлов — вот тогда и приходит понимание того что редактор для ассемблера должен быть все таки другим…

Если у вас такой опыт был — то вы уже понимаете о чем я пишу и что меня в итоге побудило к написанию редактора более приспособленного к реальным нуждам.

Итак, сразу закрепим:

  • то что я написал является редактором для себя, и реализовывалась та или иная функциональность именно из тех идей которые я для себя выделил

  • я с удовольствием буду писать на ассемблере в любом другом редакторе, как только его найду, если он будет иметь большую чем в реализованном мной редакторе функциональность

  • поскольку редактор написан самостоятельно, то эту самую функциональность я еще дополняю, расширяю, изменяю, и даже удаляю

  • проект не является закрытым, поэтому буду рад если кто то ко мне присоединится, интересны как люди могущие предложить какую то новую функциональность, так и могущих помогать мне дополнять, если у кого есть соображения по дизайну (и кто то знает больше чем просто слова дизайн и юзабилити) и имеет желание изменить что то к лучшему — то тоже буду рад, и так далее… видео например не умею делать красивое:-) и это тоже иногда хочется, но кроме записи с экрана пока ничего нет

    Итак немного о возможностях редактора:

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

056ba2ad75f00b7042757f387002355e.jpg

а вот здесь написана какая то чушь

9ef5c813a7d035cf3720b44237b32047.jpg
  • работа с символами проекта

    редактор обрабатывает проект целиком, таким образом вы всегда можете выбрать (или просто посмотреть) доступные символы объявленные глобально, в текущем или включаемом файле, если использованы библиотечные файлы определений (либо вы придерживаетесь определенных правил) — то символы могут быть сгруппированы в виде дерева

882edda3398ae47c3f808eb0f9c22e93.jpg5bc92b38471eba27afa74da36cb399cf.jpg

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

  • возможность задавать варианты значений для того или иного объявленного символа

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

    например уже сейчас вы можете включать или выключать необходимые GPIO в модуле rcc_ahb1enr_gpio_set

d926187397821d5260c1bfc212cee9f2.jpg

по нажатию кнопки «F4 Изменить», или из контекстного меню

ee879a70f17f5c9374b59cf98dc41e2a.jpg

и видим все возможные варианты значений настройки

ff899db304c03a6e8f37ea8dbcbb1aad.jpg

Да, да, уже слышу из комментов: да поставить 1 или 0 вообще то руками проще, согласен, но возможны ведь не только 1 или ноль, но и более сложные варианты, например настраиваем пин GPIO, и нужно поменять MODER пина, что мы делаем в этом случае — ну хорошо конечно если мы уже знаем все варианты настроек, а если нет ? тогда открываем определение MODER и смотрим все варианты значений… потом копируем нужное, и вернувшись назад вставляем новое значение, так?

a6a5c40c7f3b7799c3745c47d107c84d.jpg

меня это не устроило, так что опять «F4 Изменить» или из контекстного меню

e954f610dc775a478e55aa478d93a70d.jpg

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

  • возможность задания описания для модулей или подпрограмм

опять сделано для того чтобы экономить время,

12d7ce6b402abf7c1af739fd46a5e4ac.jpg
  • простое добавление необходимых файлов и модулей в ваш проект

89397d03d461edba75e1d46eafff3944.jpg

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

  • реализована компиляция проекта прямо из среды

    Особых изысков нет, просто компиляция, сборка, и генерация служебных файлов

ccb1be5e0b31a3649c5797755e843615.jpga53ec7a6651b108cb0d3d59312078138.jpg
  • реализована прошивка вашего устройства при помощи ST-Link или J-Link (у меня китайцы, второй это перепрошитый ST-Link V2)

3e59df5f8ae86f5b75f761d7746ea4de.jpg

J-Link через OpenOCD сервер, к сожалению пока реализовано только с учетом замены нативной dll от segger

6ed28da3fc587fea599f96d191ec7b67.jpg
  • отладка при помощи OpenOCD

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

3989537c97cf21bf9a2bec92ef511d6a.jpg

исполняемый код подсвечивается и в скомпилированном тексте программы

7e7f6d5ea1435654dee872eeedc3cd78.jpg

можно устанавливать точки останова, исполнять по шагам, есть исполнение подпрограмм за один шаг

87dc9030e99308382c7b464ed762b520.jpg

Есть возможность просматривать регистры настройки устройств

db1fa3df02cbc9305e7ad4f71f0a3da8.jpg

Памяти

044c16a3e34cdfeac290572fe420780b.jpg

Работа над wathpoint пока отложена, тоже буду делать

  • реализован импорт шрифта из MCU Font Generator, вернее из файлов которые он генерит для AVR преобразовываю в стандарт gnu as, ну и формат упрощаю

8e2d307242dad4333f6af737348e4042.jpg01f4bdbe1985332b6d2a7d7559278747.jpg
  • ну и заодно сделан импорт бинарных файлов в прошивку, есть много способов добавить, это просто один из…

c4e322e57a64e30d05cf25400e46342d.jpge491f48005c9692713e2416b9f8944e5.jpg

В общем функциональность зачастую добавляется когда в ней возникает необходимость

В редакторе реализован простейший форматер текста

ff671c7caa954701fc8f7142ac7483e5.jpg

Работает не идеально в автоматическом режиме, но готовый текст форматирует приводя более менее к приличному виду

Обсуждать, предлагать, сообщать о глюках, и прочее в группе ВКонтакте: https://vk.com/club200545792 или в Телеграмм: https://t.me/ArmAsmEditor

там же можно скачать архив с редактором, он находится в закрепленном сообщении

пока в редакторе активно описывается STM32F4, но планируется описание и других микроконтроллеров (как только найдутся те кто их использует и готов помочь с описанием периферии)

ну и на ютуб канале (https://www.youtube.com/channel/UCLYm7b8Z5TiFcxD47BzaHPg плейлист GNU ARM ASM EDITOR) можно посмотреть видео о той или иной функциональности редактора, правда там пока обучающих видео нет, хотя планируется.

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

© Habrahabr.ru