Начнём с установки предложенной среды разработки в операционной системе 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. У меня это С:\MultiClet\SDK\include\MCp0411100101. Остальные настройки я оставил по умолчанию.
Теперь можно попробовать собрать проект. Для этого нажимаем кнопку 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 на железе, а не только на функциональной модели.
ссылка на оригинал статьи http://habrahabr.ru/post/209346/
Добавить комментарий