Попроще

Итак, пусть нас устраивает отладочный модуль “попроще”. Подключаем к проекту (как это сделать – рассмотрим потом), компилируем, зашиваем МК. Жмем кнопочку с малой лупой – откроется следующее окно (см. справа). Что есть что?

Старт-Стоп – пуск и остановка обмена. Иногда удобно. Программа запускается в режиме “Стоп”, то есть после запуска – нажмите “Старт”!

Кнопочки с цифрами 1..9 – нажмите и в переменную _spicmd программы микроконтроллера будет занесено соответствующее число. Я применяю для отладки – например, организовать точку останова, или ветвление по содержимому.

Если вариантов 1..9 вам оказалось маловато, можно ввести любое число в окошке ниже и нажать кнопочку Send. Результат будет тем же – это число окажется в _spicmd

“запись” – вот тут вы сможете в какой-то степени вмешаться в работу. Окошко слева – адрес, справа – данные(байт!), кнопочка Send – данные будут записаны по адресу. Ограничение – адрес не более 0x7F. Для начальной отладки этого достаточно, захватывает регистры (0..0x1F), периферию (0×20-0x5F) и начало ОЗУ (0×60-0x7F). Если этого недостаточно, используйте отладочный модуль 2.

Надо иметь в виду, что адресное пространство AVR линейное, запись по адресу 0 аналогична записи в R0, запись по адресу 0×21 аналогична команде OUT 1,число. Замечу – за результаты отвечаете сами! Физически ничего не повредите, а вот “повесить” программу AVRа раз плюнуть. Да, если по ячейке в окне отображения “Ctrl-кликнуть” – то ее адрес занесется в окно адреса. И еще кнопочка “0″ – занести в тот адрес не число в окошке, а ноль. Иногда удобно.

Но мы совсем забыли про главное – окно отображения информации! Хотя там все просто, имя регистра или адрес – и содержимое. Формат содержимого можно менять – правой кнопкой мыши кликните на нужной вам ячейке. (на рисунке как раз видно меню выбора формата). В столбце имен/адресов тоже можно вместо них вводить имена – кликните по имени/адресу. Думаю, отлаживаться проще, когда вместо безликого R10 написано, например, Counter. При выходе из отладчика введенные имена сохраняются.

Кнопка “синхро” -для защиты от сбоев обмена при помехах (у нас в соседней комнате стоит станок…) а потеря строба нарушает всю работу – это ведь не асинхронный обмен. Чтобы программу не сбрасывать, теперь достаточно несколько раз ткнуть эту кнопочку.

Отладчик попроще

Пойдем по порядку… Числа сверху – слева количество пакетов обмена, справа – ошибок обмена. Остались исторически со времен отладки, ну да не мешают…

Движок вверху слева – скорость обмена, точнее, пауза между пакетами. (Пакет – содержимое РОН и ОЗУ от 0×60 до 0xDF, с контрольной суммой). Чем быстрее заставите обмениваться – тем быстрее будет обновляться информация, и тем больше будет нагружен обменом AVR. Тут каждый выбирает, что ему важнее.

Вот, вроде, и все… Подведем итоги. Я считаю основной ценностью этого отладчика его “реалтаймовость”, если здесь можно применить такой термин. Работа отладчика и основной программы, в общем-то, ничем не связана (кроме общей памяти). Никаких точек останова (хотя, при желании, вы их можете элементарно реализовать простым циклом ожидания числа в _spicmd). Поэтому надо учесть – никаких быстропротекающих процессов вы при его помощи не зафиксируете. Если вам нужно видеть какое-либо значение, например, снятое с АЦП – не поленитесь положить его в отдельную ячейку ОЗУ, ведь РОН обычно используются в разных целях, и в более-менее сложных программах что-либо разобрать в мешанине чисел будет сложно. Но зато отладка никоим образом не повлияет на реалтаймовость основной программы.

Кликнув по моему аватару с пивной кружкой – вы сможете загрузить MAP файл IAR-компилятора или LST файл имен Algorithm Builder (настройка линкера IAR будет описана далее). Этот фрагмент написан был сильно второпях, работает не идеально, но жизнь таки облегчает.