Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие 59.doc
Скачиваний:
10
Добавлен:
30.04.2022
Размер:
2.2 Mб
Скачать

Рабочее задание

  1. Создайте свой каталог в папке Users (ВНИМАНИЕ! Имя каталога и весь путь к нему НЕ должны содержать знаков КИРИЛЛИЦЫ и пробелов!), если он еще не создан. Создайте в нем папку LR17.

  2. Составьте заготовку отчета в виде файла MS Word с названием и целью работы, запишите отчет в файл под именем LR17 в своем каталоге.

  3. Запустите AVR Studio. Создайте новый проект, выбрав в меню Project команду New Project. В появившемся окне в списке Project Type выберите «Atmel AVR Assembler», в поле Project Name введите название проекта (LR17_1), в поле Location укажите подходящее расположение – свой каталог в папке Users. Здесь же следует указать на необходимость создания основного (входного) файла для проекта (флажок в чек-боксе Create Initial File), а также на необходимость создания отдельной папки для проекта (флажок Create Folder). Сохраните в отчете скриншот окна, как описано ниже, снабдив его подписью «Инициализация проекта».

Чтобы скопировать содержимое всего экрана в виде рисунка (скриншота) для занесения в отчет, можно пользоваться клавишей PtScr, чтобы скопировать содержимое только текущего окна – сочетанием клавиш Alt+PtScr, а чтобы скопировать вкладку или вспомогательное окно, удобно предварительно превратить ее/его в отдельное окно, как описано в п. 5.

  1. Нажмите кнопку Next и на следующем этапе создания проекта выберите средство отладки (Debug Platform) и исследуемую модель МК (Device). В качестве первого выберите Simulator, дождитесь активизации второго окна и выберите ATMEGA 162 (рис. 2). Далее нажмите кнопку Finish – откроется главная панель программы с названием LR17_1.asm.

Рис. 2. Окно выбора МК и средства отладки

  1. Подробно рассмотрите компоненты главной панели программы. Она имеет вид, аналогичный приведенному на рис. 3, хотя AVR Studio обладает очень гибким интерфейсом, и внешний вид окон может сильно отличаться от варианта, показанного на рисунке. Назначение пунктов строки меню и пиктограмм панелей инструментов будет рассматриваться ниже по ходу выполнения работы.

Главная панель программы AVR Studio разделена на несколько окон, каждое окно может состоять из нескольких вкладок (корешки показаны в нижней или верхней части окна). Любую из вкладок любого вышеописанного окна можно скрыть или, наоборот, превратить в отдельное свободно перемещаемое окно. Для этого достаточно щелкнуть правой клавишей мыши по заголовку соответствующей вкладки и выбрать в открывшемся меню нужный режим. Пункт «Hide» этого меню означает «Скрытое» (невидимое), «Floating» означает «Свободное» (Перемещающееся), «Docking» — «Закрепленное». Если вкладка находится в состоянии Docking, то для перевода в другое состояние следует нажать в строке заголовка и выбрать нужное положение.

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

Рис. 3. Главная панель программы

Вернемся к содержимому главной панели.

Левое окно – обзорное, оно предоставляет нам полную информацию о составе текущего проекта. В ходе разработки в нем появляются дополнительно вкладки «Info» и «Processor».

Правое окно «I/O View» – обзор устройств (аппаратных ресурсов), входящих в состав МК, в виде дерева, каждая из ветвей которого содержит набор регистров данных, битов управления и состояния устройства.

В центре панели находится рабочее пространство (главное окно), в котором появляются различные рабочие окна. Во-первых, это окна с текстами программ на Ассемблере. А во-вторых, здесь могут появляться окна любых открытых программой файлов. Это могут быть текстовые файлы или файлы других программ. Каждый такой файл по умолчанию открывается в виде отдельного плавающего окна. Для определенности будем называть такие окна текстовыми окнами.

Для каждого нового текстового окна в нижней части рабочего пространства появляется «корешок», при помощи которого можно быстро перейти к нужному окну, если оно не находится на переднем плане. Если произвести двойной щелчок левой кнопкой мыши по заголовку любого текстового окна, оно раскроется на всю ширину пространства (кнопки управления окном при этом появятся в правой части строки меню). Иногда именно так удобно работать с тестами программ. Все открытые текстовые окна запоминаются и затем открываются автоматически при открытии проекта.

Любое текстовое окно имеет подсветку синтаксиса. Разные части помещенного туда текста программы подсвечиваются разными цветами. Так, все операторы Ассемблера высвечиваются голубым цветом. Комментарии выделяются зеленым. Остальной текст (параметры команд, псевдооператоры, метки, переменные и константы) остается черным. Это очень удобно. Если написанный вами оператор окрасился в голубой цвет, то это значит, что вы не ошиблись в синтаксисе. Если вы написали комментарий, но перед текстом комментария забыли поставить точку с запятой или двойной слеш (//), то этот комментарий не окрасится в зеленый цвет. Таким образом, многие ошибки видны уже в процессе написания программы.

Нижнее окно – вспомогательное, оно служит, в основном, для вывода различных сообщений. Это окно также содержит ряд вкладок. По умолчанию их четыре. Первая вкладка называется «Build». На вкладке «Build» отражается процесс трансляции. На эту вкладку выводятся сообщения об различных этапах трансляции, сообщения о синтаксических ошибках и различные предупреждения (Warnings). Если трансляция заканчивается нормально (отсутствуют критические ошибки), то сюда же выводятся статистические данные о полученном результирующем коде. Эти данные показывают размеры и процент использования всех видов памяти микроконтроллера.

Следующая вкладка второго окна называется «Message». Здесь выводятся разные системные сообщения о загрузке модулей программы и т.п.

Третья вкладка называется «Find in Files» (поиск в файлах). В этом окне отражаются результаты выполнения команды «Поиск в Файлах». Эта команда позволяет производить поиск заданной последовательности символов сразу во всех файлах проекта. По окончании поиска во вкладке «Find in Files» отражаются все найденные вхождения с указанием имени файла и строки, где найдена искомая последовательность.

Последняя вкладка называется «Breakpoints and Tracepoints» (Точки останова и точки трассировки). Эти точки проставляются в тексте программы перед началом процесса отладки и дублируются в данном окне. Как проставлять точки останова, мы узнаем чуть позже. Точки останова используются для того, чтобы приостановить выполнение программы в том или ином месте программы, дабы убедиться, что программа выполняется правильно. При создании точки останова в тексте программы она автоматически появляется во вкладке «Breakpoints and Tracepoints».

Трассировку же программная среда AVR Studio поддерживает только при работе с отладочной платой ICE50. Это достаточно дорогое устройство. Поэтому в данной работе мы остановимся лишь на программном отладчике без применения каких-либо аппаратных средств отладки.

В начале работы в рабочем пространстве открывается окно для написания программы. Раздвиньте его границы и перепишите в него исходный код из примера 1, приведенного выше. Получите у преподавателя имя порта и номер разряда, с которым вам следует работать. Измените имя порта и номер разряда в окне программы.

Сохраните в отчете скриншот всей панели AVR Studio, снабдив его подписью.

  1. Проверьте настройку опций проекта: выберите в меню Project / Assembler Option – указатель AVR Assembler должен быть установлен на Version 2. Закройте окно.

Теперь нажмите клавишу F7 или выберите пункт Build/Build в строке меню, в результате чего начнется трансляция программы. Следует надеяться, что трансляция вашего файла пройдет без ошибок, и вы на вкладке Build (в нижнем окне программы) получите сообщение о распределении памяти МК. В противном случае будет полезно просмотреть файл листинга (*.lst) в папке LR17_1. Откройте этот файл в Блокноте или каком-либо другом текстовом редакторе и поищите сообщения об ошибках. Поскольку наша программа чрезвычайно проста, эти сообщения будут вызваны скорее всего орфографическими ошибками. Сообщения об ошибках выводятся также в окне Build (вкладка Build). Для локализации ошибок достаточно дважды щелкнуть левой кнопкой на сообщении об ошибке. При этом курсор в окне редактора будет установлен на строку, вызвавшую сообщение об ошибке. Устраните все замечания.

  1. Откройте в своем каталоге папку LR17_1 и проверьте появление в ней ассемблерного файла вашей программы с расширением .asm. Если ваша программа не содержит критических ошибок и процесс трансляции прошел успешно, то в директории проекта автоматически появляются не только этот файл, но и другие: файл, содержащий результирующий код трансляции в hex формате (он служит источником данных при прошивке программы в программную память микроконтроллера), файл map, содержащий все символьные имена транслируемой программы со своими значениями, листинг трансляции (lst), файл с расширением еер, который содержит информацию, предназначенную для записи в EEPROM, и другие вспомогательные файлы.

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

  1. Определите местонахождение и просмотрите содержание файла m162def.inc (если гиперссылка не работает, исправьте в ней путь), запишите в отчет путь к этому файлу. Найдите строку RAMEND и скопируйте эту строку в отчет.

  2. Далее переходим к проверке работоспособности программы путем симуляции программы LR17_1 средствами AVR Studio. Для этого необходимо переключить AVR Studio в режим отладки, нажав на панели инструментов Debug, находящейся в верхней части экрана, кнопку Start Debugging или выбрав соответствующий пункт в строке меню. Через некоторое время откроется окно с текстом программы (если оно не было открыто), первая строка которой (rjmp _rst) будет отмечена желтой стрелкой. Одновременно станут доступными некоторые кнопки на панели инструментов Debug в верхней части экрана. Они служат: для пошагового выполнения программы, пропуска команды, следующей после выделенной, выхода из текущей функции, отработки до положения курсора, автоматического выполнения шагов, переключения точек останова. Пользуясь всплывающими подсказками, изучите назначение кнопок . В частности, при нажатии на кнопку Step Into выполняется текущая строка программы. При помощи этой кнопки (или соответствующей «горячей» клавиши F11) можно выполнить программу по шагам. Работу программы в цикле позволяет наблюдать кнопка AutoStep. Остановить эмуляцию можно с помощью кнопки Break (Ctrl+F5) или Reset (Shift+F5).

  3. Чтобы посмотреть, каким образом изменяется в ходе симуляции состояние регистров ввода/вывода (в частности, бита 0 регистра РоrtВ), перейдите к окну I/O View (если оно не открылось, выберите в меню цепочку View / Toolbars / I/O), переведите окно, если необходимо, в плавающую форму и поместите в удобном месте экрана (не загораживая окно программы). Добейтесь появления содержимого, показанного в верхней части рис. 4, приведя кнопки в верхней части окна в состояние, соответствующее скриншоту . Вы увидите, что регистры ввода/вывода сгруппированы по функциональным блокам микроконтроллера. Раскрыв блок PortB нажатием символа + перед его именем, вы увидите три регистра: PortB, DDRB и PinB. Назначение каждого из этих регистров вам известно /2/. Раскрыв с помощью список под заголовком окна I/O View справа от кнопок и выбрав PortB, вы увидите содержание каждого бита этих регистров (см. нижнюю часть рис. 4). Сохраните в отчете скриншот окна I/O View с подписью.

  4. Опробуйте работу кнопок на панели инструментов Debug и соответствующие сочетания клавиш, изменяя положение и количество точек останова (breakpoints). Обратите внимание, что основная часть любого алгоритма управления объектом должна быть цикличной, дабы непрерывно повторять стадии получения информации от датчиков и других устройств объекта и направлять результа­ты обработки на исполнительные механизмы.

  5. Д

    Рис. 4. Просмотр и изменение регистров МК

    ля наблюдения процессов во введенной программе откройте окна “Processor” (вкладка в левой части экрана) и “Register” (выбрав в меню View текстовой строки пункт Register). Поместите открывшееся окно под окном программы. В данном случае мы будем наблюдать за регистром R16 (его часто используют как транзитный и предопределяют как temp). Систему счисления можно изменять через контекстное меню. Сделайте RESET и опробуйте пошаговое выполнение программы, наблюдая за перемещением стрелки в окне программы, значениями R16, Stack Pointer, затем DDRB, PortB, PinB в течение нескольких циклов. Занесите в отчет скриншоты экрана в двух состояниях PinB. Проверьте влияние бита DDRB.0 на состояние PinB.0, объясните результаты, запишите их в отчет.

  6. Проследите пошагово изменение значений указателя стека, начиная с метки _rst, сравните с величиной RAMEND в заготовке отчета.

  7. Переработайте программу 1, используя макрос outi там, где это возможно. Опробуйте пошаговое выполнение измененной программы и ее работу в режиме AutoStep.

  8. Изучите размещение программы в памяти команд, открыв в строке меню (View / Memory) окно Memory / Program (удобно изменить ширину окна так, чтобы в каждой строке помещалось содержимое 4 или 8 байтов, т.е. двух или 4 команд и содержимое отображалось по 16 разрядов в слове, т.е. по 4 символа). Занесите в отчет скриншот этого окна.

  9. Скопируйте в буфер текст программы, откройте новый экземпляр AVR Studio как описано выше (имя проекта LR17_11), скопируйте в окно программы содержимое буфера. Закомментируйте строку программы .org 0x003A, откомпилируйте программу и найдите местоположение кода программы в памяти. Проверьте функционирование программы. Занесите в отчет скриншот окна и сравните с предыдущим скриншотом. Директива .org 0x003A нужна в случае, если в ходе доработки программы предполагается использовать требования прерывания. Из файла m162def.inc видно, что адреса векторов прерывания INTERRUPT VECTORS занимают в памяти программ интервал адресов 0x0002… 0x0036. Под скриншотами сформулируйте в отчете, в каком случае установка программного счётчика в явной форме необязательна. Закройте второй экземпляр AVR Studio

  10. Сохраните исходный проект как LR17_1. Закройте проект.

  11. Создайте в своем каталоге новый проект с именем LR17_2 как описано выше. Перепишите в него исходный код из примера 2 (без сноски, естественно).

  12. Проверьте функционирование программы (окна “Processor”, “Port B” и “Register”). В окне “Processor” проследите за изменением состояния бита I в SREG и значения Stack Pointer. Замечание: при отладке программы следует уменьшать интервалы таймеров относительно предложенных в примере – они слишком велики, поскольку в процессе отладки в AVR Studio программа выполняется в тысячи раз медленнее, чем в реальном кристалле, и вы не дождетесь срабатывания таймера. С другой стороны, слишком частый переход на подпрограмму _timer1ov не позволит проследить за связью между местонахождением указателя в окне программы, значениями I и Stack Pointer.

  13. Переработайте программу, используя макрос outi всюду, где это возможно. Опробуйте выполнение измененной программы в режиме AutoStep. Выйдите из отладки.

  14. Добавьте в подпрограмме _timer1ov после строки с запретом прерываний команду остановки таймера, а после строки разрешения прерываний – команду запуска. Пере­запишите программу, занесите в отчет скриншот подпрограммы _timer1ov с подписью, поясните назначение новых команд в контексте подпрограммы.

  15. Опробуйте пошаговое выполнение программы до метки _w0, наблюдая за перемещением стрелки в окне программы и значениями соответствующих регистров R16, порта В (в верхней части окна I/O View) и регистров таймера (в нижней части окна I/O View). Опробуйте выполнение измененной программы в режиме AutoStep. Выйдите из отладки.

  16. Проанализируйте заполнение памяти команд. Выделите границы размещения: начального перехода (по аргументу команд rjmp), основной программы, áдреса вектора прерывания по переполнению таймера, подпрограммы обслуживания этого прерывания. Занесите в отчет скриншот окна памяти, запишите имена модулей программы и значения адресов. Найдите в своей папке LR17_2 файл карты памяти (его расширение .map). Откройте его в Блокноте, сравните адреса в последних строках с полученными вами результатами. Занесите в отчет копию текста из окна Блокнота, начиная со строки EQU OVF1addr. Сделайте для этих материалов соответствующую подпись.

  17. Скопируйте в буфер текст программы, откройте новый экземпляр AVR Studio как описано выше (имя проекта LR17_21), скопируйте в окно программы содержимое буфера. Закомментируйте строку программы .org 0x0048, откомпилируйте программу и найдите местоположение кода программы в памяти. Проверьте функционирование программы. Занесите в отчет скриншот окна. Найдите в новой папке файл карты памяти. Откройте его в Блокноте, занесите нужный фрагмент текста в отчет, составьте сравнительную таблицу адресов меток с результатами, полученными в предыдущем пункте. Объясните алгоритм оптимизации памяти команд, примененный в компиляторе AVR Studio. Закройте второй экземпляр AVR Studio

  18. Создайте новый проект с прежними параметрами, дав ему название LR17_3, в окно программы загрузите текст из буфера. Переработайте программу так, чтобы выполнялся алгоритм LR15_1 из лабораторной работы № 15 /1/ (бегущая единица по разрядам порта B). Операции смещения единицы на выводах порта включите в подпрограмму обработки прерываний от таймера – по аналогии с рис. 5. Учтите, что основная программа должна сохранять вид цикла. Изобразите в отчете в виде двух столбцов алгоритм LR15_1 и соответствующую последовательность команд на ассемблере.

  19. В окне программы LR17_3 останов установите на выходе из прерывания от таймера, выполните трансляцию и симуляцию. При наличии ошибок устраните их, пользуясь советами из п. 7. Пере­запишите программу, скопируйте в буфер текст программы, занесите в отчет скриншот окна программы с подписью.

  20. Создайте новый проект с прежними параметрами, дав ему название LR17_4, в окно программы загрузите текст из буфера.

    Рис. 5

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

  21. Переработайте программу так, чтобы в порте B перемещались две смежные логические единицы. Обратите внимание на их переход с одного края разрядной сетки на другой. Доработайте программу так, чтобы переход происходил через состояние 10…01. Выполните симуляцию и сохраните программу под именем LR17_5. Занесите в отчет скриншот окна программы с подписью.

  22. Оформите отчет по перечисленным выше пунктам, включая скриншоты программ и экранов эмуляции с соответствующими пояснениями. Выделите в пунктах отчета полученные навыки составления программ и навыки пользования интегрированной средой разработки AVR Studio.

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