Простые устройства
Просто об устройствах

Eclipse+AVR+ARM: первые шаги. Часть шестая

Шаг 7: Подготовка к отладке AVR.

DBGПредвижу, что кое у кого уже просто чешутся руки приступить отлаживать свои AVR-ные проекты в среде Eclipse IDE. Что ж, это возможно вполне, но вот удовольствие от такой отладки будет пониже среднего. Однако, начнем по порядку.

Итак, самое главное, что потребуется для отладки, это симулятор ядра и периферии микроконтроллера AVR, причем не абы какой симулятор, а способный работать в качестве сервера команд для отладчика GDB. GDB – это основное средство GNU-отладки программ, и в составе WinAVR уже имеется версия специально для AVR: AVR-GDB. А в качестве GDB-сервера на сегодняшний день выступает по-моему единственный симулятор под названием simulavr. Все желающие могут скачать его с официального сайта проекта, наверняка там будет самая свежая версия. А если хотите, то можете взять подготовленный архив без всего лишнего, который приаттачен к статье.

{ads2} В моем архиве находится версия simulavr 1.0.0, которая поддерживает симуляцию следующих микроконтроллеров семейства AVR: at90can128, at90can32, at90can64, at90s4433, at90s8515, atmega128, atmega1284a, atmega16, atmega164a, atmega168, atmega32, atmega324a, atmega328, atmega48, atmega644a, atmega8, atmega88, attiny2313. При всем при том поддерживается далеко не вся встроенная периферия микроконтроллеров. Архив следует распаковать в любую папку, и на этом инсталляция завершается.

e_6Теперь запускаем Eclipse и открываем свой проект. Крайне желательно, чтобы проект был для одного из поддерживаемых simulavr микроконтроллеров, хотя бы на этапе осваивания процесса отладки. Допустим, проект готов.

Прежде чем приступить к его отладке, надо сделать кое-какие настройки Eclipse. Прежде всего, автоматизировать запуск simulavr — вам ведь не захочется всякий раз запускать его средствами Windows, тем более что иной раз эта утилитка подвисает и надо ее «убивать» принудительно.

Для запуска внешних программ в Eclipse имеется специальная система, доступ к которой возможен через меню Run или при помощи кнопки Запуск сторонней утилиты. Всякий раз, когда вы захотите добавить или модифицировать список запускаемых из-под Eclipse программ, вы должны нажать на стрелочку этой кнопки, что откроет вот такое меню, как на следущем скриншоте.

e_6Меню настроек запускаПри первом запуске будет видно только 3 нижние строчки, верхняя часть — это уже настроенные команды запуска. Вам нужно выбрать пункт External Tools Configurations, и вы попадаете в окно настроек запускаемых программ.

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

КнопочкиПервая кнопка позволит создать новую конфигурацию (именно это вы и будете делать для первоначальной настройки simulavr), вторая — копирует свойства выбранной конфигурации в новую конфигурацию (это вам потребуется. Если будет нужно запускать одну программу с разными опциями командной строки — один раз все настроите, а затем скопируете уже готовое при помощи этой кнопки и откорректируете). Красный крестик, разумеется, удаляет выбранную конфигурацию. Две оставшиеся кнопки служат для управления древовидным списком, но вряд ли у вас будет необходимость ими пользоваться — не будет же у вас сотня конфигураций?!

Просто сделайте двойной щелчок на пока единственном пункте в списке Program, и окно преобразится.

e_6Внимательно посмотрите на скриншот: вы видите, что задано имя конфигурации, а на закладке Main введены пути для запуска утилиты и рабочая папка. Для ввода этих путей можно пользоваться кнопками Browse Workspace (для удобной навигации по папкам рабочего пространства Eclipse) и Browse File System (для удобной навигации по папкам компьютера). Кнопка Variables позволит использовать макросы для специальных папок.

Обратите внимание на окно Arguments – там нужно ввести параметры командной строки. Для нашей утилиты порядок аргументов важен — обязательно после параметра -d должен быть указан один из поддерживаемых микроконтроллеров. Если вдруг вам будет надо ввести параметр с пробелами, его следует заключать в кавычки.

e_6e_6Переходим на закладку Refresh.

Здесь можно активировать опцию Refresh resources upon completion, чтобы Eclipse автоматически обновляла нижеперечисленные объекы. Вы можете смело игнорировать эту закладку, т. к. Eclipse все важное и без этого обновляет своевременно.

Закладка Build служит для задания режима автоматической компиляции проекта или другого выбранного элемента перед тем, как запустить утилиту. Конкретно для simulavr это не нужно.

e_6Закладка Environment позволяет настроить переменные среды индивидуально для каждой запускаемой утилиты.

Это может быть иной раз полезно, например, если утилита ищет какие-то ресурсы по переменной PATH, а у вас в системной переменной PATH не прописан нужный путь — вот тут-то вы и зададите уникальный PATH только для этой утилиты, не трогая всю систему в целом. Сконфигурировать среду вы можете при помощи кнопок New (новая переменная) и Select (выбрать уже имеющиеся). Когда в списке переменных среды не пусто — активируются кнопки Edit (изменить) и Remove (удалить). Но для simulavr ничего особенного настраивать не нужно.

e_6Наконец, закладка Common содержит кое-что важное и полезное.

Из всех опций реально важной будут две: выбор кодировки для утилиты Encoding и Launch in background (запускать в фоне). Если ваша утилита что-то выводит в консоль не в той кодировке, что у вас (обычно для кириллической Windows Cp-1251), вы можете выбрать правильную кодировку, чтобы видеть осмысленный текст в консоли Eclipse. Запуск утилиты в фоне просто проходит менее заметно — никаких окон не открывается, вот и все. Если же вдруг вашей утилите будет надо что-то из консоли вводить, придется активировать опцию Allocate Console. Можно заставить вводить информацию из заранее подготовленного файла, для чего активируется опция File и задается имя файла.

Все, что необходимо для simulavr, было показано на скриншотах — это необходимо и достаточно.

{ads1}

Введя все нужное, нажимаете кнопку Apply, чтобы принять сделанные изменения или кнопку Run – чтобы немедля запустить утилиту. Сейчас нам запускать рановато, поэтому после Apply нажимаем Close для закрытия окна.

Шаг 8: Настройка отладчика.

Теперь приступаем к настройке системы отладки Eclipse.

Для запуска этого процесса служит кнопка Кнопка отладки

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

И так же, как и в прошлый раз, начинать придется с конфигурирования отладчика.

e_6Как видите по скриншоту, окно конфигурирования очень похоже на ранее рассмотренное, однако в древовидном списке слева уже имеется ряд различных вариантов типовых конфигураций для отладки различных приложений. Если все плагины Eclipse установлены вами, как было сказано в самой первой статье, вы увидите в этом списке GDB Hardware Debug – конфигурация именно такого типа нам и нужна, смело кликаем на ней двойным щелчком и получаем заготовку конфигурации отладки. Доводим ее до показанного на скриншоте состояния.

Как правило, путь приложения С/С++ Application и наименование проекта Project заполнятся Eclipse автоматически — будут использованы параметры открытого активного проекта.

e_6На закладке Debugger следует указать явно путь к файлу avr-gdb.exe – он будет чем-то похож на показанный на скриншоте, т. е. этот файл лежит в недрах WinAVR. Обязательно поставьте галочку Use remote target и в списке JTAG Device укажите Generic TCP/IP. В поле Host name or IP address введите localhost, а в поле Port number введите 1212. Имейте ввиду, что этот номер порта по умолчанию действителен только для версии simulavr 1.0.0, а для других может быть иным. В крайнем случае вам придется прочесть документацию к simulavr и вычитать, какой порт там по умолчанию используется либо задать значение порта принудительно.

e_6На вкладке Startup находится рад важнейших настроек.

Initialization Commands – это группа команд GDB, выполняемых при старте. Рекомендую поставить так. Как на скриншоте, т. е. все опции неактивны.

Load Image and Symbols управляет процессом загрузки скомпилированного ELF-файла в отлаживаемое устройство — в нашем случае в качестве такого устройства будет наш GDB-сервер simulavr. Symbols – это информация для символьной отладки, т. е. Для отладки по исходному тексту программы. Рекомендую оставить все, как на скриншоте, хотя принципиально есть возможность указать другие файлы (и тем самым реализовать отладку «чужого» проекта).

Следующая группа Runtime Options содержит всего три опции: Set program counter at (hex) – установить значение программного счетчика в указанное шестнадцатиричное значение, Set breakpoint at – установить точку остановки на указанное имя функции и Resume – продолжить выполнение кода немедленно. Рекомендую указать имя функции main для автоматической остановки при запуске отладки.

Первая опция пригодится для отладки программ, которые стартуют не с нулевого адреса, например, загрузчиков, а обычно ее не надо активировать. Контрольная точка на функции main хороша, чтобы начать отладку именно с начала программы, в противном случае вам придется прогуляться по ассемблерным командам startup-кода, генерируемого компилятором. Кстати, можно и на другой функции поставить точку останова, если захочется.

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

{ads1}

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

e_6Закладка Source служит для управления путями поиска исходных файлов для отлаживаемой программы. Обычно ничего там менять не надо, но если при отладке вы будете получать сообщения о том. Что файл с исходником не найден, можно тут поколдовать и добавить требуемый файл.

Последняя закладка полностью аналогична ранее рассмотренной для конфигурации запуска утилит, и назначение всех параметров там такое же точно.

Все, сохраняем конфигурацию. Теперь мы готовы приступить к собственно отладке.

Шаг 9: Запуск отладки.

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

После старта simulavr аналогично запускаем только что созданную конфигурацию отладки (все последующие разы можно нажимать сразу на жучка — будет запущена предыдущая конфигурация). И вот после этого мы наблюдаем, как внешний вид Eclipse преображается.

e_6Внешний вид рабочего пространства называется Перспективой (Perspective). Для этапа написания исходного текста используется перспектива С/С++, а для отладки — перспектива Debug. Переключиться между активными перспективами вы можете при помощи кнопок в правой верхней части рабочего пространства.Кнопки переключения перспектив
Кроме этих двух есть и другие стандартные перспективы. Собственно, перспектива — это запомненное состояние размеров, расположения и количества всех окон Eclipse, поэтому вы можете «разложить» все окна так, как вам нравится, и в текущей перспективе все будет сохранено и автоматически использовано впредь. На скриншоте показано состояние моей перспективы отладки, причем, значительно уменьшенной по размеру, чтобы просто сделать скриншот обозреваемым на разных дисплеях, так что если у вас все выглядит чуть-чуть иначе — не пугайтесь, а присмотритесь и найдите, где укрыто то, что видно на скриншоте.

Debug
Debug – область отлаживаемых процессов. Вы видите в виде древовидного списка состояние всех активных в настоящий момент отлаживаемых процессов. Запущенный simulavr показан самым первым процессом, а вторым — отлаживаемый нами проект. По ветвям дерева можно отследить место текущей остановки. В этом окне главное — это кнопки управления процессами, их хорошо видно на скриншоте. Два сереньких крестика служат для удаления их этого окна всех завершенных процессов. Рядом кнопочка с зигзагом для подключения к процессу в памяти (нам не надо будет никогда), далее кнопочка запуска исполнения процесса, паузы (приостановки) исполнения и красный квадратик для завершения процесса, после которого снова кнопочка с зигзагом для отсоединения от процесса (снова нам не потребуется). Желтенькие стрелочки служат для пошагового исполнения программы — первая с заходом внутрь функций, а вторая — в обход них. Ну и остальные кнопочки, тардиционные для отладчиков — при наведении на них курсора всплывают подсказки, по которым элементарно понять, что к чему.

ИсходникЭто окно не вызывает сомнений по своему поводу — это исходник нашей программы в текущем месте остановки (помните, при настройках конфигурации отладки мы указывали контрольную точку остановки на функции main?). Как видите, подсвечена строка, которая еще не исполнялась. Нажимая кнопки пошагового исполнения, либо их клавиатурные аналоги F5 и F6, вы сможете построчно пройтись по своей программе. Для ускорения можно воспользоваться комбинацией Ctrl-R, чтобы быстро «дошагать» до строки, в которой находится текстовый курсор (эта строка подсвечена голубым). Так же можно поставить точку останова в нужном месте программы и запустить ее на выполнение. Точка останова ставится двойным щелчком на серой области окна левее номеров строк. В общем, я уверен: 15 минут метода научного тыка, и вы освоите возможности отладчика лучше меня, тем более что всплывающее меню содержит массу полезных команд.

Важное
В этой группе закладок (да, кстати: вы в курсе, что любую закладку можно сделать независимым окном, равно как и любое окно сделать закладкой в другом окне? Попробуйте потащить за заголовок закладки...) собраны различные полезняшки, без которых любая отладка не в радость. Breakponts – это список всех контрольных точек (не забывайте, что каждая точка может содержать условие срабатывания, а не просто по факту достижения этого места в программе). На скриншоте выше список точек останова пуст, далее вы узнаете, как добавлять точки, тогда окно и обновится. Variable – это список всех доступных в текущем контексте переменных, Expressions – это окошко, где можно ввести целое выражение и отслеживать его текущее значение, как это, например, показано на следующем скриншоте.

Просмотр выражений
Закладка Registers – ну, это святое — список всех регистров AVR с возможностью просматривать и менять их значение. И так далее — закладок может быть больше или меньше, как вы уже поняли, описать все-все-все варианты и возможности я никак не смогу — рамки статьи не позволят. Разве что когда-нибудь потом...

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

Нет исходника
Нажатие кнопки View Disassembly и сделает область дизассемблера видимой (да так и останется потом — перспектива запомнит). Как видите, есть еще кнопка Locate File для задания принудительно исходника и кнопка Edit Source Lookup Pathпомните в конфигурации мы бегло упоминали о том, что можно добавить места поиска исходников для отладки?

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

Шаг 10: Завершение отладки.

Когда мы завершим отладку, т. е. нам либо надоест, либо мы найдем какую-то ошибку, мы должны будем завершить процесс нажатием на красный квадратик в окне процессов Debug. Тут надо учесть, что завершается процесс, являющийся корневым по отношению к текущему выделению в этом окне, т. е. в том состоянии, как показано на скриншоте, будет завершен процесс debug-test.elf, т. е. наша отлаживаемая программа для микроконтроллера. Чтобы завершить simulavr, надо выделить его мышкой, и только затем останавливать красной кнопкой. Если вы завершите simulavr до остановки основного процесса, выскочит сообщение об ошибке — потеряна связь с сервером. А если вы не завершите simulavr после завершения отладки, то в следующий раз может произойти сбой подключения к серверу — это, по-моему, какой-то баг то ли Eclipse, то ли simulavr, то ли avr-gdb. В общем, завершайте все процессы снизу вверх прежде чем покинуть перспективу Debug – вот мой совет.

{ads1}

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

И в заключение ложка дегтя. Simulavr - это вам не AVR Studio и тем более не Proteus VSM, многие вещи этот симулятор вообще не поддерживает, а для того, чтобы воспользоваться другими, надо предпринимать титанические усилия - это я об имитации периферии типа индикаторов и дисплеев. Поэтому отладку с его помощью можно более-менее успешно вести только для программ, где сложный алгоритм работы, например, много математики и логики, сложный анализ данных и т.п. - то есть таких проектов, которые на слабосильных AVR-ках почти и не встретишь.

Зато есть одно несомненное преимущество данного вида отладки: ни студия, ни протеус не позволяют вести отладку C++-проектов, а для GDB и Eclipse - это раз плюнуть. Такие вот итоги этой огромной статьи.

Вложения:
ФайлОписаниеРазмер файла:
Скачать этот файл (simulavr.zip)simulavr.zipSimulAVR версии 1.0.0 с сопутствующей библиотекой DLL3621 Кб

Комментарии   

#1 druidcat 14.10.2012 16:16
Хочу внести небольшой вклад в статью. Чтоб появилась строчка GDB Hardware Debug в Debug Configuration можно скачать файлы последней версии вот тут
Лично у меня отладка заработала без ошибок. Спасибо большое многоуважаемый ARV за то, что помогаете начинающим любителям С в приобщении к Eclipse.
PS: В главе Шаг 8: Настройка отладчика. вторая и третья картинки одинаковые. Я так понял что третья картинка должна быть другая, а именно про закладку Debugger.
Спасибо, Спасибо, Спасибо за статью. ;-)
#2 ARV 14.10.2012 23:55
картинки поправил - вы правы, задвоено было случайно.
#3 druidcat 16.10.2012 03:05
А можно задать вопрос? А какую настройку нужно сделать, чтобы не приходилось постоянно сохранять сорс файлы перед компиляцией. Чтобы когда я жму компилирование, перед этим происходило автоматическое сохранение.
И еще. Не могу понять, почему эклипс постоянно ругается на строчку GIMSK = 0;
В winavr такой проблемы не было.
#4 ARV 16.10.2012 12:27
Цитирую druidcat:
А можно задать вопрос?
я вас настоятельно прошу использовать форум для вопросов и "пространных" рассуждений.
ругня на GIMSK может быть связана с тем, что:
а) такого регистра нет в выбранном вами МК - смотрите соответствующий хидер (и документацию) на предмет правильного его названия;
б) по каким-либо причинам не перестроен автоматически индекс символов - сделайте его принудительно Свойства Проекта - Index - Rebuild.

да, еще: когда говорите "ругается", приводите текст ругательств, потому как разные матюки указывают на разные проблемы.
#5 Вячеслав Мезенцев 28.11.2012 02:52
Ссылка на то, что студия и протеус не могут отлаживать c++ код ошибочна, оба они и в связке и по отдельности прекрасно с ним справляются. Вот пример проекта, можно посмотреть живьём:
https://mysvn.ru/avr/examples/uSD/
#6 ARV 28.11.2012 22:47
Цитирую Вячеслав Мезенцев:
можно посмотреть живьём
не понравилось на такое смотреть. если есть желание - разместите на форуме архив с проектом протеуса, проектом AVR Studio 4.xx и необходимым набором файлов - вот тогда можно будет и посмотреть.
#7 Bulych24 03.12.2013 18:46
Цитирую druidcat:
Чтоб появилась строчка GDB Hardware Debug в Debug Configuration можно скачать файлы последней версии вот тут: http://www.eclipse.org/cdt/downloads.php

А что С этими файлами потом делать? У меня как раз такая проблема.
#8 druidcat 12.07.2014 06:16
Что то, не корректно работает simulavr на Eclipse Luna под виндой и под линуксой. А именно вкладка Variable при отладке пустует в обоих операционках, а под линукс еще и Disassembly пишет, что ему данные с сервера не приходят (в убунте собирал самый свежий проект simulavr 1.1, может собрал не полностью). :(
#9 Артём 17.07.2014 16:41
Цитата:
ни студия, ни протеус не позволяют вести отладку C++-проектов, а для GDB и Eclipse - это раз плюнуть.
Откуда вы это взяли? Студия вполне поддерживает отладку плюсовых проектов.

Можно ли к Eclipse jtag-ice 2 (или 3) подключить? Нужно ведь в железе отлаживать, а не в симуляторе, который мало что поддерживает.

Добавить комментарий

Защитный код
Обновить

Обсудить эту статью на форуме (17 ответов).

Copyright 2019 © simple-devices.ru.
При использовании материалов ссылка на simple-devices.ru обязательна.