Методические указания для практических занятий по дисциплине мдк. 02. 01
Скачать 7.37 Mb.
|
Средства отладки ПО AVR-микроконтроллеров. Аппаратные средства отладки программного обеспечения AVR-микроконтроллеров представлены внутрисхемным эмулятором ICE50, внутрикристальным эмулятором JTAG ICE, а также стартовым набором STK500. К программным средствам отладки ПО AVR-микроконтроллеров относятся отладчик и симулятор, входящие в состав среды AVR Studio. Отладчик среды AVR Studio позволяет проводить отладку программ как в исходных кодах (например, ассемблера), так и в кодах дизассемблера (оттранслированной или скомпилированной программы, записанной с помощью мнемоник ассемблера). Вызов окна с кодом дизассемблера производится командой Disassembler меню View или командой Goto Disassembly контекстного меню редактора исходного текста. Обратное переключение в окно исходного текста осуществляется командой Goto Source контекстного меню окна Disassembler. 294 Отладчик среды AVR Studio может использоваться с внутрисхемным эмулятором ICE50, внутрикристальным эмулятором JTAG ICE, отладочной платой STK500 или симулятором. Указание способа отладки производится при создании проекта. Симулятор среды AVR Studio предназначен для предварительной отладки программ без применения аппаратных средств. В дальнейшем в настоящем практикуме для отладки создаваемых программ предполагается применение отладчика среды AVR Studio в режиме симулятора. Отладка ПО в среде AVR Studio. Команды отладчика в программе AVR Studio находятся в меню Debug. Переход в режим отладчика в среде AVR Studio осуществляется автоматически при использовании для трансляции программы команды Build and Run или командой Start Debugging меню Debug при использовании для трансляции команды Build. Выход из режима отладчика производится командой Stop Debugging меню Debug. Пошаговое выполнение программы задаётся командами Step Into, Step Over меню Debug. Команда Step Into позволяет выполнить одну команду программы (в т. ч. команду вызова подпрограммы). Для завершения выполнения подпрограммы может использоваться команда Step Out. Команда Step Over также выполняет одну команду программы, но если это команда вызова подпрограммы, последняя полностью выполняется за один шаг. Следующая выполняемая команда (команда, адрес которой содержится в программном счётчике) обозначается символом в окне исходного текста программы. Сброс выполнения программы осуществляется с помощью команды Reset. Прогон (запуск или продолжение выполнения) программы осуществляется командой Run. Для остановки выполнения программы служит команда Break. Контрольные точки представляют собой специальные маркеры для программы-отладчика и могут быть трёх типов: точки останова, точки трассировки и точки наблюдения. Точки останова задаются командой Toggle Breakpoint меню Debug или контекстного меню редактора исходного текста программы. Точка останова обозначается в редакторе исходного текста символом слева от помечаемой строки. Просмотреть заданные точки останова можно на закладке Breakpoints окна Output; там же точки останова могут быть запрещены (путём сброса флажка напротив точки останова) и разрешены (путём установки флажка). При достижении точки останова во время прогона программы её выполнение приостанавливается. Повторный вызов команды установки точки останова на той же строке программы приводит к удалению точки останова. Удалить все заданные точки останова позволяет команда Remove Breakpoints меню Debug или команда Remove all Breakpoints контекстного меню закладки Breakpoints окна Output. Параметры точки останова задаются в диалоговом окне Breakpoint Condition, вызов которого осуществляется командой Breakpoints Properties контекстного меню редактора исходного текста программы. Установка флажка Iterations позволяет задать количество итераций (повторных выполнений) команды до останова прогона программы. При установке флажка Watchpoint по достижению точки останова производится только обновление значений регистров и ячеек памяти в окнах просмотра. Флажки Iterations и Watchpoint не должны устанавливаться одновременно. Установка флажка Show message обеспечивает отображение сообщений о достижении точки останова на закладке Breakpoints окна Output. Вызов диалогового окна задания свойств и удаление точки останова может быть произведено из контекстного меню закладки Breakpoints окна Output. Точки трассировки предназначены для контроля выполнения программы в режиме реального времени. Трассировка позволяет отслеживать так называемую трассу программы – изменение содержимого регистров и ячеек памяти при выполнении определённых команд (команд, по адресам которых заданы точки трассировки). В среде AVR Studio функция трассировки может использоваться только при отладке программы с применением внутрисхемного эмулятора; при работе в режиме симулятора функция трассировки недоступна. Точки наблюдения задаются командой Add to Watch контекстного меню ре- дактора исходного текста программы. Точки наблюдения представляют собой символические имена регистров или ячеек памяти, содержимое которых необходимо отслеживать. При выполнении команды Add Watch на экране появляется окно Watches, разделённое на четыре столбца: Name (символическое 295 имя точки наблюдения), Value (значение), Type (тип), Location (местонахождение). Новая точка наблюдения может быть также задана в выделенной ячейке столбца Name окна Watches или командой Quickwatch в окне редактора исходного текста программы (при этом курсор должен находиться на имени регистра или ячейки памяти). Значения, отображаемые в столбце Value, обновляются при изменении содержимого соответствующего регистра или ячейки памяти. Удалить задан- ные точки наблюдения можно их окна Watches. Отладчик среды AVR Studio также обеспечивает следующие функции: выполнение до курсора (команда Run to Cursor меню Debug) и последовательное выполнение команд с паузами между ними (команда Auto Step меню Debug). Для удобства использования в процессе отладки ряд команд отладчика доступен с клавиатуры (табл. 2). Для просмотра и изменения содержимого регистров и ячеек памяти служат команды Registers, Memory, Memory 1, Memory 2, Memory 3 меню View. По команде Registers на экране отображается окно Registers, в котором приводятся шестнадцатеричные представления содержимого РОН. Изменение (модификация) содержимого регистров производится путём двойного щелчка мышью. Наблюдение за содержимым РОН может быть также произведено с помощью дерева устройств микроконтроллера, находящегося на закладке I/O окна Workspace. Для этого необходимо раскрыть объекты Register 0-15 и Register 16-31 щелчком мыши по знаку «+». Команды Memory, Memory 1, Memory 2, Memory 3 обеспечивают вызов окон Memory, служащих для отображения содержимого ячеек оперативной и энергонезависимой памяти данных, памяти программ, регистров ввода-вывода и РОН. Выбор типа памяти, отображаемой в окне Memory, производится с помощью списка, расположенного в панели управления окна (Data – оперативная память данных, Eeprom – энергонезависимая память данных, I/O – регистры ввода-вывода, Program – память программ, Register – РОН). Для наблюдения за состоянием процессора необходимо раскрыть объект Processor закладки I/O окна Workspace. При этом будет отображена следующая информация: содержимое программного счётчика (Program Counter); содержимое указателя стека (Stack Pointer), количество тактов, прошедших с начала выполнения (Cycle Counter); содержимое 16-разрядных регистров- указателей X, Y и Z; тактовая частота (Frequency); затраченное на выполнение время (Stop Watch). Для наблюдения содержимого регистров ввода-вывода необходимо раскрыть объект I/O закладки I/O окна Workspace, где – тип микроконтроллера. Регистры ввода-вывода, входящие в объект I/O, сгруппированы по типам периферийных устройств. Модифицированные значения содержимого регистров и ячеек памяти действуют только во время текущего сеанса отладки, в исходный текст программы изменения не заносятся. Практическая часть. Провести отладку созданной в предыдущей практической работе программы с помощью симулятора-отладчика среды AVR Studio, проделав следующие операции. 1. Выполнить программу в пошаговом режиме, отслеживая изменение содержимого используемых в программе регистров. Обратить внимание на изменение содержимого программного счётчика. Сравнить содержимое программного счётчика при выполнении команд с их адресами в памяти программ, приведёнными в листинге трансляции и окне памяти программ. 2. Выполнить прогон программы. Проверить правильность результата работы программы. 3. Задать точку останова на команде загрузки в РОН числа В. Включить режим отображения сообщений о достижении точки останова. Выполнить прогон программы с 296 контрольными точками. Задать точку останова на команде умножения. Выполнить прогон программы с контрольными точками. Удалить заданные точки останова. 4. Задать точки наблюдения в используемых РОН. Выполнить программу в пошаговом режиме, отслеживая изменение их содержимого. 5. Оформить отчет. Отчёт должен содержать: титульный лист с указанием номера и названия работы, номера группы и фамилий выполнивших работу; цель работы; краткие теоретические сведения (классификацию средств отладки ПО, перечень основных функций программ-отладчиков); список использованных команд отладчика AVR Studio с указанием их назначения. Контрольные вопросы. 1. Классификация средств отладки прикладного ПО встраиваемых МП. 2. Виды и особенности аппаратных средств отладки ПО. 3. Основные функции программных средств отладки ПО. 4. Пошаговое выполнение программы и его возможности. 5. Особенности прогона программы с контрольными точками. 6. Контрольные точки: типы, назначение, использование. Практическая работа №67. Программирование микропроцессорных систем (изучение способов адресации операндов в AVR-микроконтроллерах). Цель работы: изучение способов адресации операндов в AVR-микроконтроллерах. Основные сведения. В зависимости от количества используемых операндов возможны три типа команд AVR- микроконтроллера: безадресные, одноадресные и двухадресные. В первом типе команд присутствует только код операции (КОП), определяющий выполняемую командой функцию. В командах второго и третьего типов помимо кода операции содержится адресная часть, устанавливающая способ доступа соответственно к одному или двум участвующим в команде операндам (аргументам команды). Способ формирования адреса операнда, указание на который содержится в команде, называется адресацией (addressing). С помощью того или иного способа адресации вычисляется физический адрес, который поступает на шину адреса процессора для выбора ячейки памяти или регистра, используемых в команде. В соответствии с типом адресуемой памяти способы адресации в AVR- микроконтроллерах можно разделить на способы адресации РОН и регистров ввода-вывода, способы адресации оперативной памяти данных (ОЗУ) и способы адресации памяти программ. Возможность использования различных способов адресации позволяет сократить размер и время выполнения программ. Для адресации РОН и регистров ввода-вывода предусмотрен всего один режим – прямая регистровая адресация. При прямой регистровой адресации РОН операндом является содержимое регистра общего назначения, указанного в команде. Команды с прямой регистровой адресацией могут адресовать один (Rd) или два (Rr и Rd) РОН. Во втором случае результат выполнения команды сохраняется в регистре Rd. Прямая регистровая адресация РОН применяется во всех арифметических и логических командах, а также в некоторых командах работы с битами, т. к. эти команды выполняются в АЛУ только над содержимым РОН. Команды, вторым операндом которых является константа, могут ис- пользовать в качестве первого операнда только регистры из старшей половины РОН (R16…R31). 297 При прямой регистровой адресации регистра ввода-вывода операнд содержится в регистре ввода-вывода, указанном в команде. Адрес регистра ввода- вывода хранится в шести разрядах слова команды, где n определяет адрес регистра-источника или регистра-приёмника в РОН). Прямая регистровая адресация регистров ввода-вывода используется в командах чтения IN и записи OUT регистра ввода-вывода, а также в ряде других команд работы с регистрами ввода-вывода. Примеры использования прямой регистровой адресации: ; прямая регистровая адресация одного РОН clr R1 ; очистка всех разрядов регистра R1 ; прямая регистровая адресация двух РОН add R11, R12 ; сложение содержимого регистров R11 и R12 Для адресации оперативной памяти данных используются пять способов адресации: непосредственная, косвенная, косвенная со смещением, косвенная с предекрементом и косвенная с постинкрементом. 1. При непосредственной адресации оперативной памяти данных операндом является содержимое ячейки ОЗУ, адрес которой указан в команде. Адрес операнда содержится в 16 младших разрядах 32-разрядной команды, где Rr/Rd определяет адрес регистра-источника или регистра-приёмника в РОН). Непосредственная адресация используется в команде LDS (Load Direct from Data Space) загрузки из ОЗУ и в команде STS (Store Direct to Data Space) загрузки в ОЗУ. Зарезервировать байты в ОЗУ позволяет директива .byte. Для того чтобы на выделенную область памяти можно было ссылаться, директиве .byte должна предшествовать метка. Директива .byte имеет один параметр – количество выделяемых байт и может использоваться только в сегменте данных, определяемом с помощью директивы .dseg (data segment). Задать тре- буемое размещение выделяемой области памяти позволяет директива .org (origin – смещение). Начало программного сегмента указывается с помощью директивы .cseg (code segment). Директивы .dseg и .cseg не имеют параметров. Выделенные в оперативной памяти данных байты не инициализируются. Пример использования непосредственной адресации: ; непосредственная адресация .dseg ; сегмент данных (оперативная память данных) .org $0065 ; по адресу $0065 cnt1: .byte 1 ; резервирование 1 байта для cnt1 .cseg ; программный сегмент (память программ) ;... lds R10, cnt1 ; загрузка cnt1 в R10 2. 298 При косвенной адресации оперативной памяти данных операндом является содержимое ячейки ОЗУ, адрес которой находится в регистре X, Y или Z. Косвенная адресация используется в команде LD (Load Indirect) косвенной загрузки из ОЗУ и команде ST (Store Indirect) косвенной загрузки в ОЗУ. Например: ; косвенная адресация .dseg ; сегмент данных (оперативная память данных) cnt1: .byte 1 ; резервирование 1 байта для cnt1 .cseg ; программный сегмент (память программ) ;... ldi R30, low(cnt1) ; загрузка в R30 младшего байта адреса cnt1 ldi R31, high(cnt1) ; загрузка в R31 старшего байта адреса cnt1 ld R1, Z ; загрузка cnt1 в R1, т. е. R1 < (R31:R30) В приведённом примере использованы функции low и high, возвращающие соответственно младший и старший байты выражения (в данном случае – адреса ячейки памяти с символическим именем cnt1). 3. При косвенной адресации оперативной памяти данных со смещением адрес операнда в оперативной памяти данных вычисляется путём прибавления к содержимому регистра Y или Z смещения, указанного в команде. Смещение содержится в шести разрядах слова команды. Косвенная адресация со смещением используется в команде LDD (Load Indirect with Displacement) косвенной загрузки из ОЗУ со смещением и в команде STD (Store Indirect with Displacement) косвенной загрузки в ОЗУ со смещением. Например: ; косвенная адресация со смещением .dseg ; сегмент данных (оперативная память данных) arr: .byte 5 ; резервирование 5 байт для массива arr .cseg ; программный сегмент (память программ) ldi R30, low(arr) ; загрузка в R30 младшего байта адреса arr ldi R31, high(arr) ; загрузка в R31 старшего байта адреса arr ;... ldd R10, Z + 0 ; загрузка первого элемента массива arr в R10 ldd R11, Z + 1 ; загрузка второго элемента массива arr в R11 4. При косвенной адресации оперативной памяти данных с предекрементом (лат. decrementum – уменьшение, убыль) перед выполнением команды содержимое указанного в команде регистра X, Y или Z декрементируется (уменьшается на единицу); декрементированное содержимое регистра X, Y или Z является адресом операнда в оперативной памяти данных. Косвенная адресация с предекрементом используется в команде LD косвенной загрузки из ОЗУ и команде ST косвенной загрузки в ОЗУ. Например: ; косвенная адресация с предекрементом 299 ld R10, -Z ; Z <- Z – 1, R10 <- (Z) 5. При косвенной адресации оперативной памяти данных с постинкрементом (лат. incrementum – увеличение, рост) адресом операнда в оперативной памяти данных является содержимое регистра X, Y или Z, указанного в команде; после выполнения команды содержимое регистра X, Y или Z инкрементируется, т. е. увеличивается на единицу. Косвенная адресация с постинкрементом используется в команде LD косвенной загрузки из ОЗУ и команде ST косвенной загрузки в ОЗУ. Например: ; косвенная адресация с постинкрементом ld R10, Z+ ; R10 <- (Z), Z <- Z + 1 Для адресации памяти программ используется непосредственная адресация, косвенная адресация, относительная адресация, адресация константы и адресация константы с постинкрементом. При непосредственной адресации памяти программ выполнение программы продолжается с адреса, указанного в команде. Непосредственная адресация памяти программ используется в командах JMP и CALL. При косвенной адресации памяти программ выполнение программы про- должается с адреса, содержащегося в регистре Z, т. е. в программный счётчик загружается содержимое регистра Z. Косвенная адресация памяти программ используется в командах IJMP и ICALL. При относительной адресации памяти программ выполнение программы продолжается с адреса (PC + k + 1), где PC – содержимое программного счёт- чика; k – указанный в команде относительный адрес, который может принимать значения от –2048 до 2047. Относительная адресация памяти программ используется в командах RJMP и RCALL. При адресации константы адрес байта константы содержится в регистре Z (рис. 20): старшие 15 разрядов занимает адрес ячейки памяти программ (от 0 до 32К); состояние младшего разряда (LSB) определяет выбор младшего (LSB = 0) или старшего (LSB = 1) байта адресуемой ячейки памяти. Адресация константы в памяти программ используется в командах LPM (Load Program Memory), которая загружает адресованный регистром Z байт в указанный в команде регистр. Если регистр-приёмник не указан (команда используется без операндов), байт загружается в регистр R0. Команда ELPM (Extended Load Program Memory) служит для загрузки константы из памяти программ объёмом более 64К слов. При этом для расширения регистра-указателя Z используется регистр RAMPZ, связанный с регистром Z. Задать данные в память программ позволяет директива .db (define bytes). Для того, чтобы на заданные ячейки памяти можно было ссылаться, директиве должна предшествовать метка. Параметры директивы – последовательность выражений, разделённых запятыми; каждое выражение должно быть числом в диапазоне –128…255 или в результате вычисления давать результат в этом же диапазоне, в противном случае число усекается до байта. Директива .db раз- мещается в программном сегменте и может использоваться совместно с директивой .org. Задавать положение данных в памяти программ следует таким об- разом, чтобы была исключена возможность непреднамеренного перехода к выполнению их как команд микроконтроллера. Пример использования адресации константы в памяти программ: ldi R31, high |