В качестве среды разработки компанией «Мультиклет» был выбран текстовый редактор Geany с основными функциями интегрированной среды разработки. Для поддержки необходимых для отладки инструментов разработчиками компании «Мультиклет» был написан плагин MC-DBG, о тестировании возможностей которого пойдет речь в данной статье.
Начнём с установки предложенной среды разработки в операционной системе Windows, для чего согласно документации необходимо выполнить следующие шаги:
- Скачать geany-1.23.1_nogtk_setup.exe и установить его.
- Скачать GTK+ 2.24 all-in-one bundle и распаковать его в папку с Geany.
- Установить MSYS 1.0.11 и добавить путь к утилите make.exe в переменную Path.
- Скачать плагин с сайта Multiclet и распаковать его в папку с Geany.
- Запустить Geany.
- Во вкладке «Инструменты/Менеджер модулей» активировать модуль MC-DBG.
После активации модуля MC-DBG в боковом окне появится вкладка MC-Files, в окне сообщений вкладка MC-DBG, дополнительные элементы меню во вкладе «Проект» главного меню, как изображено на рисунке ниже.
Перед тем, как приступить к непосредственному тестированию плагина, рассмотрим его основные функции:
- Конфигурация проекта.
- Генерация файла сборки и сборка проекта.
- Навигация по списку возникших ошибок во время сборки проекта.
- Выполнение собранного проекта на функциональной модели.
- Отладка проекта по параграфам.
- Установка точек останова в памяти программ.
- Принудительная установка адреса следующего выполняемого параграфа.
- Чтение из памяти данных и регистров в процессе отладки.
- Запись значений в память данных и регистры в процессе отладки.
Следует отметить, что предлагаемый функционал не очень широк, однако, в нем реализованы все наиболее часто используемые мной инструменты, поэтому я нахожу предоставленный набор вполне достаточным.
Теперь, мы готовы приступить собственно к тестированию. Напишем на ассемблере простейший эхо сервер, работающий через Uart. В качестве клиентской стороны будем использовать tcp_client.exe из стандартного набора разработчика компании Мультиклет.
Для начала создадим новый файл EXO.s стандартными средствами Geany. Запишем в него код эхо сервера, написанный на базе примера uart0_inv.asm, доступного в архиве. Код приведен ниже:
.include "HDL50001_pcf.inc"
.alias Get_byte 2
.text
start:
jmp initUART0
getl 0x00000300
wrl @1, GPIOB_BPS
getl 0x00000104
wrl @1, UART0_BDR
complete
;;;;; Configurate Uart ;;;;;
initUART0:
jmp MainLoop
getl 0x0000000A
wrl @1, UART0_DATA
getl 0x00000003
wrl @1, UART0_CR
complete
;RXD handler
Rxd_int:
jmp buf_TXD
rdl UART0_DATA
setl #Get_byte, @1
complete
;test FIFO on full
buf_TXD:
rdl UART0_ST
getl 0x00000200
and @2
jne @1, buf_TXD
je @2, Send_byte
complete
;Send inverse byte
Send_byte:
jmp MainLoop
getl #Get_byte
wrl @1, UART0_DATA
complete
;;Loop
MainLoop:
rdl UART0_ST
getl 0x00000001
and @2,@1
je @1, MainLoop
jne @2, Rxd_int
complete
Создаем новый проект EXOProject. Данное действие возможно выполнить либо через вызов контекстного меню списка текущих проектов и выбора пункта «New», либо через главное меню «Проект/New MC-Project». Откроется диалоговое окно, в котором требуется указать имя нового файла проекта. После успешного создания проекта его имя отобразятся в окне MC-Files.
Добавляем файл EXO.s в наш проект при помощи кнопки «Add File» контекстного меню проекта в окне MC-Files. В результате получаем:
Затем необходимо настроить проект. Вызываем «Проект/MC-Project Properties» и добавляем к «Files/Include directories» папку с HDL50001_pcf.inc. У меня это С:MultiCletSDKincludeMCp0411100101. Остальные настройки я оставил по умолчанию.
Теперь можно попробовать собрать проект. Для этого нажимаем кнопку Make:
Устранение ошибок в процессе компиляции:
В 34 строке команда and должна иметь 2 аргумента. Заменим «and @2» на «and @1, @2»
Когда все ошибки устранены, заново собираем проект:
Теперь, когда сборка прошла успешно мы можем приступить к отладке. Выполняем программу по параграфам кнопкой Step. Зеленым подсвечивается первая команда следующего параграфа.
Видим, что программа зациклилась на параграфе MainLoop до тех пор, пока на Uart не поступят новые данные. Запускаем tcp_client.exe и отправляем по Uart 0x1.
Возвращаемся в Geany. Ставим точку останова на первую команду параграфа Send_byte и нажимаем Continue. Выполнение программы прекращается перед параграфом Send_byte. Во второй регистр записано полученное по Uart значение. Для того чтобы получить его значение вводим #2 в левое поле Watches (# обозначает регистр, для чтения из DM вводится просто адрес например 2 или 0x2).
Важное замечание.
Механизм работы точек останова имеет важную особенность, обусловленную нюансами мультиклеточной архитектуры. Она заключается в том, что в случае установки точки останова на первую команду в параграфе, выполнение программы будет приостановлено дважды (перед выполнением параграфа и после его выполнения). В случае установки точки останова не на первую команду в параграфе, выполнение программы будет приостановлено один раз после выполнения данного параграфа.
Теперь запишем во второй регистр число 5 средствами отладчика. Для этого заменим число 1 на число 5 в правом поле и нажмем кнопку Set (на ней нарисована стрелка влево).
Вновь нажмем Continue (выполнение программы продолжится). В tcp_client.exe получим закономерный результат.
Остановим отладку кнопкой Stop.
Вместо заключения
Таким образом, несмотря на простоту реализации, предлагаемого функционала вполне достаточно для полноценной отладки даже больших и сложных проектов. Обновленный функционал инструментального пакета позволяет значительно увеличить скорость разработки за счет предоставления интуитивно понятного и удобного интерфейса. Можно много говорить о преимуществах одной IDE над другой, но все они, по большому счету, предоставляют одни и те же возможности. Вопрос их выбора – дело привычки и вкуса. В будущем хотелось бы пожелать компании «Мультиклет» развить возможность отладки программ через JTAG на железе, а не только на функциональной модели.
Автор: GenadyIvanovich