Отладка Кода Arduino На Чипе

Многие из тех, кто делает проекты немного сложнее «Hello, World!» Что касается микроконтроллеров, то рано или поздно они сталкиваются с проблемой отладки кода.

В таких ситуациях, как правило, на консоль выводится отладочная информация, либо определенное количество «миганий» каким-нибудь светодиодом.

Не надо объяснять тем, кто отлаживал с помощью printf, prinln и иже с ними, что даже понять, куда девать отладочный вывод, иногда бывает проблематично, а вот интерпретировать результат и понять, где ошибка, еще сложнее.

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

Кому интересно, добро пожаловать под кат.



Введение

Во избежание недоразумений скажу, что тема ни в коем случае не является рекламой, а призвана поделиться с сообществом своим опытом отладки кода для Arduino и тем качественным скачком, который этот опыт совершил в связи с открытием мной продукта VisualMicro ( www.visualmicro.com).

Также хотелось бы сразу предотвратить комментарии типа «ага, установите монстра VisualStudio, чтобы писать маленькие прошивки для маленьких контроллеров…».

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

Так что унификация процесса отладки для Arduino и кода, который я обычно пишу на VS, вызывает у меня дикий восторг: ух ты, «взрослая отладка» для «маленькой железки».

По поводу «чудовищности» я могу сказать следующее.

Да, размер VS намного больше, чем у Arduino IDE, но место на винте теперь стоит дешевле овса.

Имея двухтерабайтный жёсткий диск, жадничать до гигабайт – это моветоном.

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

Я скачиваю студию раз в день (так это +20 секунд загрузки в день на моем не столь навороченном домашнем ноутбуке на Core i3 первого поколения), но на отладку трачу часы.

Кроме того, через очень короткое время Arduino IDE становится немного тесновата для не новичка в программировании и начинаешь задумываться о том, как выйти за те границы, которые она накладывает. Ну и последний аргумент против такой установки для отладки Arduino — VS стоит немалых денег.

Да, это так, но есть несколько «но»:

  1. Иногда это бесплатно( проверочная ссылка )
  2. Иногда оно уже есть
  3. А теперь самое интересное: Atmel распространяет VisualStudio 2010 как продукт под новым брендом под названием AtmelStudio. Бесплатно.

    Кроме того, он включает VisualAssist, плагин для рефакторинга, также бесплатный.

Так что, если есть желание, то VisualStudio — не проблема.

Для этих целей я дома установил AtmelStudio 6.2. Итак, VisualMicro — это плагин для VisualStudio (и, как следствие, для AtmelStudio), который имеет:

  • Организация проекта способом, знакомым пользователям VisualStudio.
  • Поддержка встроенных модулей VS, таких как IntelliSense.
  • Компиляция и прошивка МК прямо из VS
  • Отладка кода на чипе
Существует две версии плагина — бесплатная, реализующая первые три пункта, и платная, поддерживающая отладку.

Стоит сравнительно дорого — около $29, но разработчики обещают. бесплатная лицензия для бета-тестеров и просто людей, так или иначе вложившихся в проект .

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

  • Компиляция и загрузка в кристалл
  • Точки трассировки и точки останова
  • Мониторинг состояния контактов и оперативной памяти


Собственно, процесс

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

Те.

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

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

Второй момент касается разницы между отладкой с помощью этого плагина и процессом «обычной отладки».

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

Здесь дело обстоит иначе.

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

Ситуация с просмотром значений переменных аналогичная: нужно заранее сообщить плагину, какие переменные и в каких местах вы собираетесь смотреть/изменять.

К счастью, это не так уж сложно сделать.

Предположим, вы умеете вставлять скетч через Arduino IDE (ну мало ли.

), т.е.

проблем с прошивкой у вас нет. Предположим, вы уже установили плагин, т.е.

прошли процедура установки .

Допустим, у вас уже есть скетч, подготовленный в Arduino IDE. В этом случае создание проекта в VS сводится к открытию скетча через File-> Open-> Sketch project. Для созданного проекта необходимо установить для параметра MicroDebug значение Full. После этого у вас есть два варианта — классический VS «Начать без отладки» и «Начать отладку».

Первый компилирует код и загружает его в Arduino. Второй компилирует код с инструментами и запускает сеанс отладки.

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

В этом есть логика.

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

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

Что случится? Он упадет с лестницы? Будет ли он врезаться в стену? В кота? В ноге? Чтобы включить остановку в точках останова, вам необходимо установить для параметра «Включить перерыв/паузу» значение «True» в свойствах проекта.

Следует отметить, что при запуске сеанса отладки открывается ряд окон.

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

Сеанс завершается закрытием окна монитора.

Пока окно открыто, Visual Micro будет считать, что вы выполняете отладку.

Теперь давайте посмотрим на арсенал средств отладки, которые я использовал.



Точки трассировки
Так называемые точки трассировки, т.е.

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

С точки зрения VS, точка трассировки — это обычная точка останова, но для которой в окне «При достижении точки останова» есть галочка «Продолжить выполнение» (на всякий случай туда можно попасть, щелкнув правой кнопкой мыши по ограничение точки останова:

Отладка кода Arduino на чипе

).

Трассировка в VisualMicro осуществляется путем написания соответствующего сообщения в том же окне.

В этом случае для вывода переменных из программы необходимо использовать специальные макросы вида {XXX}, где XXX — имя переменной.



Отладка кода Arduino на чипе

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

Отладка кода Arduino на чипе

Заливаются сообщения заданного вами формата, содержащие запрошенные вами переменные и выражения.

Кроме того, запрошенные переменные также отображаются в специальном окне «Выражения».



Контрольные точки
Точки останова очень похожи на точки трассировки.

Они настраиваются точно так же, с той лишь разницей, что галочку «Продолжить выполнение» ставить не нужно, а при достижении точки останова выполнение скетча приостанавливается.

Здесь необходимо отметить одну особенность Visual Micro. В отличие от отладчиков для взрослых, строка, на которой установлена точка останова, будет выполнена до остановки отладчика.

Это связано с особенностями инструментирования кода.

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

указаны в список переменных для текущей точки останова точно так же, как указано для точки трассировки).

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

Если для того, чтобы отладчик подхватил переменные из МК, их нужно было указать в виде {XXX} в строке трассировки, то для возможности изменения их нужно указать в виде {XXX=?} .

Переменные, которые можно изменить, отмечены желтым цветом в окне «Выражения».

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



Отчеты
«Из коробки» Visual Micro поддерживает три типа отчетов: аналоговые входы, цифровые входы и объем свободной оперативной памяти.



Отладка кода Arduino на чипе

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

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

А вот отчет об объеме свободной памяти мне показался крайне полезным, так как память у меня уже несколько раз заканчивалась.

Обнаружить такого рода проблему – не самая простая задача, поскольку спектр симптомов очень широк – от самопроизвольных перезагрузок МК до некорректного поведения, «которое никогда не может случиться».



Другие варианты
Visual Micro имеет массу возможностей, перечислять которые нет смысла и возможности.

Я упомяну только те, которые считаю потенциально полезными:

  • Наличие базы для расширения.

    Вы можете прикрепить некоторые визуализации, специфичные для проекта.

    Пример

    Отладка кода Arduino на чипе

  • Отладка не только через последовательный порт, но и через Bluetooth, XBee, IP, последовательный порт программного обеспечения.

  • Поддержка Teensy, Attiny, avrIO, Intel Galileo, Texas Instruments StellarPad, LaunchPad, ChipKIT/Pic32, STM32
Теги: #visualstudio #VisualMicro #arduino #отладка #Visual Studio
Вместе с данным постом часто просматривают: