ARM Assembler Editor: Если гора не идет к Магомеду, Магомед идет к горе…

Если кто не знает мне интересно программирование на ассемблере для микроконтроллеров STM32… И все бы хорошо, да только программировать особо негде…

Те среды которые есть в настоящий момент заточены больше для языка Си и программирование в них на ассемблере не сильно отличается от программирования в блокноте, ну может быть только многооконность удобна, да еще компиляция (если настроить все так как любит среда).
Некоторое время назад (всего 2 года прошло) я сетовал о том что нужен программист для ее написания, но дело с тех пор не сдвинулось…

Поэтому вспомнив знаменитую поговорку: «Если гора не идет к Магомеду, Магомед идет к горе» — решил в итоге начать писать самостоятельно…
Дальше под катом (будут картинки!)

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

1. Многооконность, ее очень не хватает в FAR, Блокноте и так далее, понятно что 2, 3, 4 окна открытые и размещенные на экране решают проблему, но иногда и этого мало, да и функциональность у них должна быть другая…
Поэтому был написан простенький редактор в SDI интерфейсе с вкладками:

hwfncnvcyiwd_8ks3bpafry5cug.png

Далее, можете создать новый файл из меню: Файл: Новый, или открыть существующий…

oxutf1dcigqqd_7w7fbhovtq2ji.png

Я создал для примера новый:

kvkfr0cufmhb0chymoyrrw0boxo.png

2. Для автоматизации некоторых рутиных действий я создал в меню: Мастер некоторые процедуры, которые реализуют их.

uhq5jnohbuhicweyczuxjyedcww.png

3. На этом казалось бы простом шаге я столкнулся с особенностью новых систем Windows —, а именно кодировке текста UTF8… И несмотря на первый порыв забить на это и писать все файлы в кодировке cp1251, подумал что в дальнейшем возможно редактор будет интересен и для Линуксоидов (надеюсь не обидное прозвище?) и кодировки возможно у кого то будут KOI8 или еще какие и реализовал работу с теми кодировками которые позволяет стандартная библиотека Лазаруса.
Ну, а для того чтобы редактор знал в какой кодировке будет файл ввел директиву редактора которая указывает в какой кодировке создан файл. В этой кодировке он будет сохраняться на диск, учитывая ее он будет и загружать файлы

Кодировки задаются в меню: Мастер: Задать кодировку

yidjxusjzw6xmatcmbvjtxplz-m.png

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

t-a9uynnz-w2dux_ugmc_mkh3a0.png

4. Далее идет обычно обязательное указание директив компилятора, тоже легко автоматизируется и снимает головную боль с поиском места откуда их можно скопировать в новый файл.
Меню: Мастер: Задать ядро процессора

wwakjjwc7-np9-vhuwnjnwnpgqi.png

пока у меня частично готовы только файлы для Cortex-M4

5eg9_qy1frfxpk5ymakvmjlwwaw.png

получаем в нашем файле:

aimesnvug63jz9gnsb3hxde6uwo.png

5. Работа с файлами констант (или определений, кому как больше нравится) знать ядро процессора недостаточно, необходимо задать микроконтроллер, это делается в меню: Мастер: Задать микроконтроллер

afeqpc9gl_lyices8qjrydahtyi.png

в нашем файле:

uhv2ojqvwtmygnq5fln0ufiteq8.png

6. Создание заголовка файла. Не то чтобы нужно, но иногда хочется написать какой то комментарий… Меню: Мастер: Добавить описание

afw6j2y8pjgmp-kg_qsaxjvgjqk.png

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

bi1wrkn4uqlphz4pnx-8nulqdqm.png

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

wgqx5txieq5imzdfwbgl77pskko.png

В наш файл добавится:

4vg3dzlbj0ghwf_lni3efulsenq.png

7. Дальше, наверное самое интересное.
Программирование микроконтроллера это постоянный поиск регистров, и их значений… Все таки искать каждый раз, как я это делал в первых публикациях про программирование STM32 на ассемблере, занятие муторное, понятно, что и на другом языке мы скорее всего будем делать тоже самое, только искать придется в каком нить RM0090 Reference Manual, но мы то пишем редактор с нуля, а значит почему бы не попробовать автоматизировать этот процесс.
Меню: Константы — Добавить константу

bagc6orse4hi5dqt4v0cvdqjuva.png

Тут все дерево констант, выбирайте нужную!

pshj_sqmz7xxfptfkedqkkr9pq4.png

Вставить можно как выбранную константу (кнопка «Только константу») так и весь пусть констант как выражение для компилятора (кнопка Полный адрес)

В позицию курсора сразу будет добавлена вся строка… Тут правда скриншот при добавлении другой константы (RCC_AHB1ENR)

enpmykld9cljbpvsmjnwsbt43rw.png

Демо-файл редактора доступен по ссылке yadi.sk/d/EWrZacT3Oi15ZQ

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

p.s. редактор пишется дальше, так что будут и другие плюшки (объединение в проект, работа с модулями и т.д.)

p.p.s. теперь мне не нужно объяснять как я провел новогодние праздники? :-)

© Habrahabr.ru