Отладка программы в связке CodeVisionAVR + AVR Studio4


• О проекте
• Обратная связь
• Полезные ссылки
• Полезные программы
• Друзья сайта


Последние комментарии

Алексей: Генератор кода библиотеки axlib
Ну, а в чем пробл...

Андрей: 3D Модели для DipTrace
ОК, понял. За PB...




           

Библиотека для AVR





AXLIB Генератор





Помощь сайту


   
				

Отладка программы в связке CodeVisionAVR + AVR Studio4

	
	
	

Дата: 9 Марта 2013. Автор: Алексей

	
	
Всем привет.
По малочисленным просьбам или еще по какой причине, решил написать небольшой мануальчик по отладке написанной программы в среде CodeVisionAVR при помощи AVR Studio4. Будем считать что программа написана и появилось желание ее отладить. Сделать можно это разными способами но на мой взгляд для начала пройтись по ней программно. Есть вариант пошаговой отладки в Proteus но мне как-то оно не понравилось и я решил воспользоваться родной Атмеловской программой AVR Studio4. Сейчас уже вышли новые версии и я думаю что работа с ними не чуть не изменилась. К тому же эта программа с каждой новой версией обновляет прошивку программатора AVRISP о котором может быть я напишу.

Первое что нам понадобиться это запустить программу. (Если у Вас ее еще нет, то Вы можете скачать последнюю версию с сайта www.atmel.com или четвертую версию из раздела "полезные программы") Для запуска программы нажмите на красного жука сверху окна программы CodeVisionAVR.


Начнется загрузка программы AVR Studio4. Если программа устанавливалась не по умолчанию, то CodeVisionAVR предложит указать путь до места установки программы. Указываем путь и продолжаем. После загрузки программа выведет окно следующего вида.


Так как мы будем отлаживать наш проект, до жмем на кнопку "Open", далее нам программа предложит выбрать файл для загрузки.


Вариантов у нас всего два. Это COFF файл и obj файл. Если выбрать COFF файл, то программа загрузит наш С код, а если obj, то загрузит ассемблерный код. Тут уж выбирайте сами что вам ближе к сердцу. Лично мне нравится работать с С файлом по этому выбираем его. Далее жмем "Открыть" и видим еще одно окно.


Что от нас хочет программа теперь? А хочет она сохранить новый проект, построенный на основании нашего COFF файла. По умолчанию программа сохранит файл в ту же папку где и лежит проект CodeVisionAVR. Жмем "Сохранить". После сохранения мы видим очередное окно.


В этом окне программа предлагает выбрать (слева) с чем будем работать. Выбираем AVR Simulator так как мы будем симулировать работу МК, а справа выбираем наш МК. После этих действий кнопка "Finish" станет активной и мы на нее давим. Все программа запустилась.


Что мы имеем. В середине окна программы расположился наш С код. Слева расположено окошко "Processor". В нем показаны основные характеристики МК. Справа расположено окошко "I/O View". В нем показаны все внутренности МК в основном регистры. Ну, а в нижнем окне описание проекта. Теперь давайте пройдемся по правому окну поближе.


Рассмотрим сверху вниз по всем пунктам.

PORTB Здесь мы видим три регистра управления портом B.
TIMER_COUNTER_0 Здесь управление регистрами таймера-коунтера 0.
TIMER_COUNTER_1 Здесь управление регистрами таймера-коунтера 1.
WATCHDOG Здесь управление сторожевым таймером.
EXTERNAL_INTERRUPT Здесь управление внешним прерыванием.
UART Здесь управление UARTом.
ANALOG_COMPARATOR Здесь управление аналоговым компаратором.
CPU Здесь управление регистрами CPU.
PORTD Здесь мы видим три регистра управления портом D.
EEPROM Здесь управление регистрами EEPROM.

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

Так, с этим разобрались, что мы еще можем полезного сделать. Смотрим вверх окна программы. Видим поле с кнопками.


Это так сказать наш пульт управления. Давайта взглянем на него по ближе.

Этот кнопка включает/выключает работу программы.
Эта соответственно выключает.
Эта кнопка запускает безпрерывную работу программы.
Эта соответственно останавливает безпрерывную работу.
Эта кнопка ставит желтую стрелку в начало программы. (та стрелка, которая указывает на текущую выполняемую команду).
Эта кнопка как раз ищет ту самую стрелку. (ну если программа длинная).
Эта кнопка заставляет программу выполнить следующий шаг.
Эта по моему делает тоже самое. В чем разница я так и не понял.
Эта кнопка переносит нас в тело функции если такая есть.
Эта кнопка заставит выполнить кусок программы от желтой стрелки до поставленного ниже курсора.
Эта кнопка запускает по шаговый режим в автомате. Смысла в нем не вижу. (мы же проверяем программу, а не любуемся ее выполнением).
Эта кнопка ставит точку останова. Очень полезная штука. Пример: Мы обрабатываем некое прерывание, ну например при получении данных в регистр UDR в UART. Программа работает в непрерывном режиме. Как определить вход в прерывание. Да просто, ставим в начале обработчика прерывания эту точку и все. Как только произойдет прерывание программа уйдет в обработчик и наткнувшись на эту точку остановится. Снять ее можно нажав на эту кнопку еще раз.
Эта кнопка снимает все точки останова.
Эта кнопка вызывает окно быстрого просмотра переменных. Если вам приспичит посмотреть на значение в кокой-либо переменной, то просто с нажатой клавишей "Ctrl" тыкаем в нужную переменную. Она тут же выделится. Дальше нажимаем на кнопку и видим окно с нашей переменной и ее значение, типом и в коком регистре она обитает.


Далее можно закрыть окно или нажать на кнопку "Add to watch" и тем самым сохранить переменную в окошке просмотра переменных.
Эта кнопка как раз вызывает окно просмотра переменных. Занести переменную довольно просто. Также как и раньше выделяем нужную переменную и перетаскиваем в окно. Она сразу там появится.


Эта кнопка выводит окно с 32 регистрами общего назначения. Если только что, что-то в регистре поменялось, то он станет красным. Если в течения следующего такта ничего не поменялось то он почернеет.


Эта кнопка выводит окно дампа памяти. Слева наверху в выпадающем списке выбираем ту память, которая нам нужна. А именно "Data", "EEPROM", "I/O", "Program", "Register". Также там можно выбрать режим вывода.


Эта кнопка выводит программу в ассемблерном коде. Если охота в нем ковыряться то смело нажимаем.

Ну вроде все, если что пропустил пишите в коментах или на форуме.



demos    13.08.13

"Эта кнопк по моему делает тоже самое. В чем разница я так и не понял." Step Over — сделать шаг по тексту, но не заходить в процедуры и функции (процедуры и функции при этом выполняются, просто нам это не показывают).

Алексей    13.08.13

Спасибо за поправку. Буду знать)




Чтобы вставить ссылку используйте форму вида[url]http://www.адрес.ru[/url][text]текст ссылки[/text]
Чтобы вставить код используйте форму вида[code]код[/code]

Имя:   





  








Вверх


Рейтинг@Mail.ru Яндекс.Метрика