ytgf6785f86rf  
Главная
Продукция
Партнеры
Статьи
О нас

Контакты

Ссылки

Написание и отладка программ для микроконтроллеров 51семейства

в среде VISION-2


Часть 2. Отладка программы.




Программная симуляция моделирует большинство особенностей микроконтроллеров 51 семейства и позволяет отладить Вашу программу до прожига в конкретной микросхеме. Среда VISION-2 обеспечивает моделирование разнообразных периферийных устройств, таких как: последовательный порт, таймеры, порты ввода—вывода, стандартно присутствующие в 8051 (8052) микроконтроллерах, и, кроме того, специфические, присутствующие в некоторых моделях семейства, например аналоговые компараторы.
Запуск отладчика можно осуществлять двумя путями, однако, экономя место в статье для другой информации, сейчас и в дальнейшем будем указывать один из альтернативных путей.
Переход в режим отладки и возврат обратно осуществляется щелчком мышью по кнопке Start/Stop Debug Session панели инструментов File рис. 6 левая кнопка. Переходим в режим отладки.


Рис. 6

Экран видоизменился, в окне проекта стала активной закладка Regs, на которой отображены регистры контроллера и их значение. Следует отметить, что переход к файловой и справочной системе по-прежнему легко осуществим щелчком мышью по закладкам Files и Books соответственно.
Ввод-вывод дополнительных окон отладчика производится нажатием соответствующих кнопок на панелях инструментов (нажатие на кнопку открывает данное окно, если оно было закрыто, или закрывает его, если оно было открыто). Во всех окнах щелчком правой кнопки мыши можно вызвать контекстные меню, которые в некоторых случаях не будут описаны в данной статье.
В нижней части экрана выведем дополнительные окна Memory Window (окно памяти) и Watch&Call Stack Window (окно просмотра и вызова стека — окно переменных) щелчком мышью поочередно по второй и пятой кнопкам слева панели инструментов отладка, показанной на рис. 7.
 


Рис. 7


В нижней части окна переменных рис.8 расположены четыре закладки:
Locals — в окне показаны локальные переменные текущей функции.
Watch#1, #2 — окна, в которых показаны, определенные пользователем, программные переменные.
Call Stack — в данном окне показан уровень вложенности выполняемой команды.



Рис. 8


Для добавления переменных необходимо двойным нажатием (по 0,5 с) мыши выделить строку <type F2 to edit>, ввести имя переменной и нажать Enter. Тоже самое можно сделать, нажав клавишу F2 на клавиатуре. В качестве переменных могут также быть указаны регистры специальных функций (SFR).
Для удаления переменной необходимо щелчком мыши выделить имя переменной и нажать клавишу Delete.
Содержимое окна переменных автоматически модифицируется при каждой остановке программы.
Для примера, введем, указанным выше способом, переменные DAT1 и DAT2, результат показан на рис.8.
В окне памяти рис. 9 отображается содержимое различных классов и областей памяти.



Рис. 9


В строке Address вводится стартовый адрес области памяти, которую необходимо отобразить. Например, введя C:100h и нажав Enter, мы увидим в окне Memory #1 программную область, начиная с адреса 100h, а, введя D:00h в окне Memory #2 (рис. 9), мы сможем увидеть область памяти данных микроконтроллера.
Контекстное меню этого окна позволяет выбрать формат представления данных. Щелчок мышью по строке контекстного меню Modify Memory at…(изменить память) вызывает окно Enter Bite(s) at… (ввод байта), в котором производится изменение содержимого ячеек памяти программы и данных.
Окно вывода рис. 10 обеспечивает диалог со средой VISION-2 с помощью команд. Более подробно работу с этим окном мы разберем в конце статьи.



Рис. 10


Включением режима Workbook Mode, через пункт главного меню ViewWorkbook Mode, слегка изменяем вид рабочего окна. При этом в нижней части окна появляются дополнительные закладки, которые облегчают работу с файлами.
В рабочем окне при остановленном выполнении программы открыто окно редактора с исходным текстом или при нажатой кнопке Disassembly Window (крайняя слева на рис. 7) показано окно дисассемблера. В окне дисассемблера рис. 11 показаны одновременно: текст исходной программы, код команд и адрес расположения кодов в памяти программ.



Рис. 11
Работа с окном ассемблера дает дополнительные возможности. Например, вызвав через контекстное меню команду Inline Assembly…(встроенное ассемблирование), в открывшемся окне Inline Assembler рис. 12 в строке Enter New Instruction можно изменить код инструкции.



Рис. 12


Это позволяет оперативно исправлять ошибки и производить изменения в программе во время ее отладки.
Среда VISION-2 запоминает состояние окна редактора при выходе из него и восстанавливает его в том же виде при повторном обращении к нему. Во время отладки можно использовать большинство возможностей редактора, кроме команд компоновки программы и изменения структуры проекта.
Для отображения состояния внутренних регистров и внешних выводов микроконтроллера, среда VISION-2 позволяет вывести дополнительные специальные окна. Для разных контроллеров они могут отличаться. Вывод осуществляется через пункт главного меню Peripherals (рис. 13). Командами Peripherals→I/O-Ports→Port 0 открываем окно Parallel Port 0, оно необходимо нам для наблюдения за изменением состояния выводов в процессе выполнения программы.


Рис.13


Отладка программы обычно разбивается на этапы, без первых двух этапов обойтись не возможно.
Этап 1: пошаговое выполнение программы.
Этап 2: расстановка в программе точек останова и пошаговое выполнение программы в тех местах, где возникает несоответствие выполняемого и задуманного Вами алгоритма.
Этап 3: повторное пошаговое выполнение программы.
И так, основные подготовительные операции закончены, и мы можем преступить к пошаговому выполнению программы. Для этого, щелкаем по кнопке Step into рис. 14 (третья слева на панели инструментов отладка) или нажимаем F11 на клавиатуре, при этом выполняется первая команда нашей программы.
 


Рис. 14


При выполнении этого шага, была выполнена команда JMP NACHALO, в результате чего управление было передано на команду MOV SP,#?STACK–1. Выполняем эту команду. Продолжая пошаговое выполнение программы, мы будем обращать наше внимание на изменения, происходящие в регистрах и переменных нашей программы.
Выполнив команды SETB DAT2, CLR DAT1 мы увидим изменение значения переменной DAT1 из 1 в 0 в окне переменных (закладка Watch#1). При этом строка переменной DAT1 окрасится в синий цвет, этим выделением обозначаются переменные, которые поменяли свое значение на последнем выполненном шаге. В окне Parallel Port 0 очистится значение 5 бита. Указанная цветовая подсветка имеет место и в других окнах (например, в окне проекта).
На следующем шаге выполняется команда CALL DEL1S, при этом изменилось значение стека, оно увеличилось на два, и стало равным SP 0x09. В окне переменных (закладка Call Stack) видно, что в данный момент времени выполняется подпрограмма. Выполнив еще три шага, мы окажемся в подпрограмме DEL10mS. При этом значение стека достигнет величины SP 0x0f, а в окне переменных (закладка Call Stack) мы увидим уровень вложенности нашей подпрограммы.
Дальнейшее выполнение программы потребует большого количества шагов внутри подпрограмм для реализации задержки равной одной секунде. Поэтому, мы, сократим время выполнения подпрограмм, воспользовавшись кнопкой Step out (вторая справа на рис.14) или клавишей Ctrl+F11 на клавиатуре. Ровно четыре шага потребуется нам для выхода из подпрограмм, при этом каждый шаг соответствует выполнению текущей подпрограммы.
Мы вернулись в основную программу. Выполнив две очередных команды CLR DAT2, SETB DAT1, мы увидим, что значения переменных DAT1 и DAT2 в окне переменных (закладка Watch#1) поменялись местами. В окне Parallel Port 0 очистился бит 4 и установился бит 5, то есть на выходах микроконтроллера изменилась полярность напряжения.
Следующая команда повторно обращается к подпрограмме задержки, но вместо пошагового выполнения программы мы можем щелкнуть по кнопке Step over (третья справа на рис. 14) или нажать клавишу F10 на клавиатуре. Подпрограмма будет выполнена без захода в нее.
Выполнив следующую команду JMP NACHAL1, мы вернемся к команде SETB DAT2, которая начинает повторный цикл выполнения наших команд.
Проверив правильность исходной программы, можно запустить ее кнопкой Run (первая слева на рис. 14) или клавишей F5 на клавиатуре. В окне Parallel Port 0 мы увидим переключение в противофазе битов 4 и 5 порта 0. Останов программы производится щелчком по кнопке Halt (вторая слева на рис. 14) или клавишей Esc на клавиатуре.
Для удобства отладки программы можно вводить точки останова, они позволяют останавливать выполнение программы в необходимых местах для контроля хода выполнения программы и внесения требуемых оперативных изменений.
Ввод точек останова возможен во время редактирования и отладки программы несколькими различными путями:
1. Щелчком по кнопке Insert/Remove Breakpoint (вставить/удалить точку останова) панели инструментов File (рис. 15 первая кнопка слева).
2. Щелчком правой кнопкой мыши по строке программы в окне редактора или дисассемблера и выбором, в открывшемся контекстном меню, команды Insert/Remove Breakpoint.
3. Через пункт главного меню Debug→Insert/Remove Breakpoint.
4. Через окно вывода.


Рис. 15


Следом за кнопкой ввода точек останова (слева направо) расположены кнопки:
— кнопка удаления всех точек останова,
— кнопка, изменяющая состояние точки останова: активна, пассивна,
— кнопка, изменяющая состояние всех точек останова на пассивное.
Для просмотра введенных точек останова удобно использовать окно Breakpoints…, вызываемое через пункт главного меню Debug→ Breakpoints…. В этом окне щелчком мыши по окошку, расположенному в начале строки, можно также сделать введенную ранее точку останова активной или пассивной, и задать дополнительные характеристики точки останова.
Нами рассмотрены основные шаги по отладке программы, но изложение было бы не полным, если бы мы не рассмотрели дополнительные окна отладчика.
Отладчик снабжен двумя окнами последовательного порта, обеспечивающих последовательный ввод и вывод данных. Их вызов осуществляется командой View→Serial Window #1 (2) или щелчком мышью по кнопке Serial Window #1 панели инструментов отладка (четвертая слева на рис. 7). Это окно позволяет моделировать асинхронный приемо-передатчик без аппаратных средств. Последовательный вывод может быть перенаправлен на COM порт компьютера, используя команду ASSIGN в окне вывода.
В окне выполнения кода показано процентное выполнение кода программы. Эту информацию можно направить в окно вывода, используя команду COVERAGE. Поле в левом столбце окна отладчика, напротив строк выполненного кода, окрашиваются в зеленый цвет. Данную особенность можно использовать для определения частей программы, которые к данному моменту не были выполнены. Вызов окна выполнения кода осуществляется командой View→Code Coverage Window или щелчком мышью по кнопке с аналогичным названием панели инструментов отладка третья слева на рис. 7.
В окне карты памяти автоматически отображаются адреса областей памяти, в которых расположена программа. Для каждой области можно определить тип доступа: Read, Write, Execute или их комбинацию. Во время выполнения программы происходит проверка правильности обращения к областям памяти. Вызов окна производится командой DebugMemory Map….
В окне просмотра символов показаны: общие символы, локальные символы и регистры специальных функций, используемые в данной программе. В окне Mode выбираем тип переменных для отображения, а в окне Mask тип фильтра. Вызов окна производится командой DebugSymbol Window.
Мы можем взаимодействовать со средой VISION-2 посредством ввода команд в окне вывода (рис. 10).
Работу в этом режиме предлагается рассмотреть на примерах:
D_D:10h,_D:50h — выводит содержимое памяти в указанном сегменте с 10 по 50 адреса.
E_char_D:0_=_3h — вводим однобайтное целое (3h), в память данных по адресу 0.
В процессе отладки возможен ввод ассемблерных команд в любой сегмент по указанному адресу:
Asm_C:1Ch (нажать кнопку Enter) — установка адреса.
Asm _MOV А,#2 — ввод конкретной команды (команд может быть несколько, они будут вводится последовательно).
R0_=_55h — записывает в R0 данный код.
PC_=_ С:120h — переход на 120h адрес памяти программ.
В выше приведенных примерах символ подчеркивания обозначает наличие пробела.
Три кнопки панели инструментов отладка, приведенные на рис. 16, позволяют повысить оперативность работы.



Рис.16


Левая желтая кнопка обеспечивает быстрый возврат к месту выполнения программы. Следующая кнопка устанавливает режим записи, выполненных команд. Правая кнопка позволяет посмотреть предыдущую выполненную команду. Данное действие может оказаться удобным для нахождения точки входа в текущую подпрограмму.
Крайняя кнопка слева Reset CPU панели инструментов отладка симулирует аппаратный сброс микроконтроллера в процессе отладки данной программы. Нажатие на эту кнопку возвращает отлаживаемую программу в начало, оставляя при этом содержимое оперативной памяти без изменения.
На панели инструментов файл расположены две кнопки поиска: Find in files (поиск в файлах) и Find (поиск). Щелчок по кнопке Find (поиск) вызывает появление окна Find (рис.17).

Рис. 17
Режимы поиска могут быть откорректированы установкой флажков:
Match Case — поиск с учетом регистра.
Regylar expresson — поиск целого выражения.
Wrap around search — циклический поиск.
В разделе Direction задается направление поиска: Up (вверх по тексту) и Down (вниз по тексту).
Find Next — поиск следующего (предыдущего) совпадения.
Mark All — выделять строки.
Описанные приемы отладки программ, составляют необходимый и достаточный объем знаний для быстрого перехода из DOS в Window ориентированную среду проектирования. Даже поверхностный взгляд на предлагаемые, средой VISION-2 возможности говорят об огромных дополнительных ресурсах, обеспечивающих качественно иной стиль работы.
Как и другие Window ориентированные программы VISION-2 предлагает пользователю различные варианты путей к конечной цели — рабочей программе. Каждый со временем выберет тот путь, который ему по душе.


Авторы:
Андрей Сошкин
Андрей Мамонтов