41312

Отладка ППО МК серии МС68

Практическая работа

Коммуникация, связь, радиоэлектроника и цифровые приборы

Б окне 2 на передний план выходит вкладка Brekpoints nd Trcepoints где теперь будут отображаться все точки останова. 2 Практическая часть Применение точек останова Пошаговый метод отладки удобен для отладки небольших несложных программ или отдельных участков большой программы. Для того чтобы проверить правильность выполнения всего этого цикла в пошаговом режиме пришлось бы очень долго щелкать мышкой В подобных случаях применяются точки останова Brekpoint. Точка останова это специальная метка...

Русский

2013-10-23

5.11 MB

0 чел.

                  Дисциплина: « Микропроцессоры и микропроцессорные системы»

Практическая работа № 11

   Тема:           «Отладка ППО МК серии МС68 ».

     Цель:       Практически исследовать порядок  и особенности отладки            ППО МК серии МС68

    Время:              2 часа

   Оборудование:    ПК, ПО.

   Методические материалы и литература:

  •  Методические указания по выполнению лабораторных работ;
    •  Иллюстративный материал: «программирования МК серии  МС68 на языке ASM.

 Методические указания по выполнению практической работы:

  Последовательность выполнения работы:

  1.  Изучить  и законспектировать основные теоретические положения по теме, используя описание работы;
  2.  Выполнить практическую часть лабораторной работы. При этом  использовать описание работы, лабораторный блок ПК, иллюстративный материал; В практической части отработать следующие подразделы:
  •  Рассмотреть приводимые примеры программ для семейства МК серии  МС68 на языке ASM.
  •  Выполнить законспектировать в тетради порядок и особенности отладки ППО МК серии  МС68  и отразить в отчёте
  •  Проанализировать порядок и особенности отладки ППО МК серии  МС68   приведённых примерах; сделать выводы.

  1.  Ответить на контрольные вопросы.
  2.  Сделать выводы.
  3.  Подготовить отчёт по установленной форме.
  4.  Представить отчёт для защиты преподавателю.

1. Основные теоретические положения

Отсутствие синтаксических ошибок еще не означает отсутствие ошибок как таковых:

  •  Можно написать команду правильно, да не ту.
  •  Но самая главная неприятность — ошибки алгоритма или его реализации.

 Программист может упустить какой-либо шаг или неправильно поставить условие. Всех возможных ошибок алгоритма не перечесть. Но в результате про-грамма может работать неправильно либо совсем не работать.

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

 

  

  Этапы процесса отладки

Процесс отладки начинается с перевода программы в соответствующий режим. Если проект открыт, а все его программы записаны и оттранслированы, то для перехода в режим отладки выберите пункт «Start Debugging» в меню «Debug» или нажмите кнопку   | на панели задач.

По окончании процесса подготовки программа переходит в новый режим. В окне 1 на передний план выходит вкладка «I/O View» (см. рис.2), которая теперь будет использоваться для просмотра содержимого всех регистров. Причем внешний вид этой вкладки немного изменяется. Для каждого элемента в дереве ресурсов появляется поле, отображающее его содержимое.

 

Б окне 2 на передний план выходит вкладка «Breakpoints and Tracepoints», где теперь будут отображаться все точки останова.

  В панели инструментов активизируются все инструменты, относящиеся к режиму отладки (до этого они были неактивны). 

В окне 3 на первый план выходит текст  главного программного файла. На левой границе окна этого файла появляется желтая стрелка— указатель текущей выполняемой команды.

 Указатель установится в начало программы (напротив первой исполняемой команды). Теперь все готово для отладки.

 Отладка может выполняться разными методами:

Самый простой метод— пошаговое выполнение.

 Для того, чтобы сделать один шаг,

 выберите в меню «Debug » пункт «Step into» («Шаг в») либо нажмите   кнопку  на панели инструментов.

Можно также просто нажать кнопку «F11». В результате программа  выполнит одну текущую команду. Указатель текущей команды (желтая  стрелка) переместится в следующую позицию. Содержимое регистров  изменится в соответствии с выполненной операцией.

  Можно  это проверить, найдя нужный регистр в окне 1. Убедившись,  что команда выполнена правильно, делайте следующий шаг. И так далее.

 При  этом можно проследить:

  •  последовательность выполнения операций,
  •  правильность выполнения условных переходов
  •  и многое другое.

 В любой момент вы можете вручную изменить содержимое любого из элементов в дереве ресурсов.

 Причем можно изменять как содержимое любого отдельного разряда, так и всего регистра в целом.

 Для изменения содержимого разряда достаточно щелкнуть при помощи мыши по одному из квадратиков, символизирующему нужный разряд ( рис. 2).

При этом состояние квадратика изменится на противоположное (единица изме-нится на ноль либо наоборот)

 

 Для изменения значения всего регистра необходимо произвести двойной щелчок мышью по изображению содержимого регистра (в шестнадцатеричном виде).

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

 

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

Кроме директивы «Шаг в», имеется еще несколько ее модификаций. Их назначение и способы вызова приведены в табл.1.

 

      

Таблица 1.  

 

  Рис. 2. Изменение содержимого регистров

    

 Директива «Шаг через» используется в том случае, если при пошаговом выполнении программы встретится команда вызова подпрограммы.

 Если вы не хотите пошагово выполнять всю подпрограмму, вы можете выполнить ее за один шаг. При этом желательно, чтобы подпрограмма не содержала ошибок.

Директива «Шаг из» применяется в том случае, если вы все же вошли в подпрограмму, но затем поняли, что ее пошаговое выполнение излишне. Выбрав данную директиву, можно за один шаг выполнить все оставшиеся команды подпрограммы.

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

 Одна из причин сложности программы заключается в большом количестве способов, с помощью которых могут взаимодействовать ее компоненты, а уж программы полны и компонентами, и взаимосвязями между ними.

 Многие технологии пытаются сократить связи между компонентами, чтобы уменьшить количество взаимодействий:

  •  например, используется сокрытие информации,
  •  абстрагирование и интерфейсы,
  •  а также все возможности языков, способствующие этим технологиям.

Существуют также технологии для проверки целостности архитектуры программы: 

  •  доказательства корректности программ,
  •  моделирование,
  •  анализ требований,
  •   формальные проверки.

Ни одна из перечисленных технологий не изменила радикально способа создания программ: они работают лишь на небольших задачах.

 В реальности всегда будут ошибки, которые мы находим с помощью тестирования и устраняем с помощью отладки (debugging).

Отладка сложна и может занимать непредсказуемо долгое время, поэтому цель в том, чтобы миновать большую ее часть. 

 Технические приемы, которые помогут уменьшить время отладки, включают:

  •  хороший дизайн,
  •  хороший стиль,
  •  проверку граничных условий,
  •  проверку правильности (исходных) утверждений и разумности кода,
  •  защитное программирование,
  •  хорошо разработанные интерфейсы-,
  •  ограниченное использование глобальных данных,
  •  средства контроля и проверки.

Каждая возможность в языке предотвращает одну проблему, но при этом имеет свою цену.

  Если в языке высокого уровня простые ошибки исчезают автоматически, то ценой этого станет большая вероятность совершать ошибки высокого уровня.  Никакой язык не защищает  от ошибок полностью.

 Основное время при программировании тратится на тестирование и  отладку.

 

  Отладчики

 Компиляторы основных языков программирования обычно поставляются со сложными отладчиками, часто входящими в состав среды программирования, которая объединяет в себе:

  •  создание и редактирование исходного кода,
  •   компиляцию,
  •   выполнение
  •   и отладку.

 Отладчики включают в себя:

графический интерфейс для пошагового выполнения программы,

  •  оператор за оператором или функция за функцией,
  •  с остановками на конкретных строках программы или при достижении какого-то условия.
  •   Они также предоставляют возможность форматирования и отображения значений переменных.

 

 Как используются отладчики?

 

 Отладчик можно использовать непосредственно, если существующая проблема точно известна.

 Некоторые отладчики включаются автоматически, если во время выполнения программы что-то происходит не так, как следует.

 

 Обычно довольно легко обнаружить, в каком месте выполнялась программ-ма, если она неожиданно аварийно завершилась, при этом можно рассмотреть последовательность функций, выполнявшихся в тот момент (это называется "просмотр стека вызовов"), а также отобразить значения локальных и глобаль-ных переменных. Этой информации бывает достаточно,/чтобы выявить ошибку. В противном случае можно повторно запустить программу в пошаговом режиме, чтобы обнаружить, где именно начинается неверное поведение.

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

 

  

  

 

 2  Практическая часть

 Применение точек останова

Пошаговый метод отладки удобен для отладки небольших несложных программ или отдельных участков большой программы.

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

 Точка останова    —  это специальная метка, которую в отладочном        режиме  программист может поставить против        любой строки  программы.

 Затем программа запускается под управлением отладчика. Но это не реальная работа. Это лишь имитация работы микроконтроллера. Программа выполняется строка за строкой, пока в очередной строке не встретится точка останова. Обнаружив такую точку, отладчик приостанавливает выполнение программы.

Выглядит это таким образом, как-будто за один шаг вы выполнили большой кусок программы. Теперь вы можете снова просмотреть и (или) изменить содер-жимое любого регистра. А затем продолжить отладку. Причем, вы можете про-должить ее как в пошаговом режиме, так и запустить программу в режиме автома-тического выполнения до следующей точки останова.

Для управления точками останова программа имеет несколько встроенных директив, которые показаны в таблице 2.

  

Директивы управления точками останова                                таблица 2.                 

Для того, чтобы поставить точку останова в какой-либо строке программы, нужно сначала поместить в эту строку текстовый курсор. Затем выбрать директиву «Поставить точку останова» (см. табл. 2). Точка останова выглядит как коричневый кружочек напротив выбранной строки программы на левой границе текстового окна.

Если поместить курсор в строку, где уже есть точка останова, и выполнить еще раз директиву «Поставить точку останова», то точка убирается. Убрать сразу все поставленные точки останова можно при помощи директивы «Убрать все точки останова».

Второй способ простановки точек останова — задание их через меню. Предназначенный для этого пункт «New Breakpoints» меню «Debug» имеет два подпункта. При помощи подпункта «Program Breakpoin» можно устанавливать программные точки останова.(То есть точно такие какие ставились предыдущим способом)

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

Для этого вам необходимо заполнить поле «Break execution after hits» («Остановить выполнение после: — проходов»). Если число в этом поле. не равно нулю, то программа остановится в данной точке останова не с первого раза, а лишь тогда, когда пройдет через нее указанное количество раз.

Если вы установили вашу точку останова не через меню, а напрямую в тексте программы, вы все равно можете вызвать описанный выше диалог и изменить в нем количество проходов, щелкнув мышью по строке с описанием нужной точки останова во вкладке «Breakpoints and Tracepoints».

 

При помощи подпункта «Data Breakpoints» пункта «New Breakpoints » меню «Debug » можно задавать точки останова по данным. При выборе этого пункта меню открывается диалог, в котором  можно выбрать любую из перемен-ных вашей программы или любой ресурс микроконтроллера (из открывающегося списка) и поставить точку останова по обращению к этой переменной (ресурсу).

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

Выбор условия производится при помощи поля «Break When» («Остано-виться если:») и поля «Access type:» («Тип доступа»). Имя переменной выбира-ется при помощи поля «Location».

Диалог простановки точек останова обоих видов можно вызывать не только через меню. В верхней левой части вкладки «Breakpoints and Tracepoints».  для этого имеется специальная кнопка.

После того, как вы проставили все точки останова,  можно запускать программу в режиме автоматического выполнения. Для управления отладчиком в этом режиме программа AVR Studio  имеет несколько специальных директив (см. табл.3).  Запуск автоматического выполнения программы производится при помощи директивы «Пуск».

Пока программа находится в режиме автоматического выполнения, новое состояние регистров не отображается. Указатель текущей. команды  отсутствует.

В нижней строке главной панели программы в правой ее стороне находится индикатор состояния. В режиме останова это желтый кружочек с минусом посере-дине. Слева от него находится слово «Stopped» (Остановлено). В режиме автома-тического выполнения программы желтый кружочек превращается в зеленый с плюсом внутри. Вместо слова «Stopped » появляется - «Running» (Запущено).

 

Если вы неправильно поставили точку останова либо и вовсе забыли ее поставить, программа будет находиться в режиме автоматического выполнения бесконечно долго. Для досрочной остановки программы используется директива «Остановить». Если в процессе отладки программы понадобится начать все сначала (сымитировать сброс микроконтроллера), это можно сделать при помощи директивы «Сброс». По окончании отладки программы необходимо перейти в режим редактирования. Для этого служит директива «Закончить отладку».

  Директивы управления процессом отладки

          таблица 3.    

 Просмотр и изменение содержимого введенных переменных

Для оперативного просмотра и изменения содержимого введенных  переменных в процессе отладки можно открыть специальное окно. Для этого достаточно выбрать пункт «Watch» в меню «View». Окно имеет четыре вкладки. Поэтому можно иметь четыре разных набора переменных.

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

Допустим, вы установили курсор на переменную temp Тогда в открывшемся меню вы увидите пункт «Add Watch »: «temp ». Выберите этот пункт, и переменная будет включена в список «Watch».

Точно так же можно оперативно просматривать содержимое любого вида памяти. Для этого выберите пункт «Memory» в меню «View». Откроется новое окно под названием «Memory ». По умолчанию в этом окне в виде дампа будет представлено содержимое программной памяти. При помощи выпадающего списка в левой верхней части этого окна можно выбрать другой вид памяти.

Память данных (Data), ЕЕPROM или лаже содержимое РОН или портов ввода/вывода.

В процессе отладки всегда будут видны в этом окне все изменения выбран-ной части памяти.

Если необходимо  видеть одновременно содержимое сразу нескольких видов памяти, то можно открыть второе и даже третье подобное окно. Для этого надо выбрать пункт «Memory2» или «Memory 3» в меню «View».

    Исправление ошибок

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

Eсли необходимо доработать программу либо написать новую, то придется много раз переписывать ее, искать различные фрагменты, заменять их на другие и т. д.

Редактор программы AVR Studio дает полный спектр стандартных средств редактирования.

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

 В табл. 4 приведены все директивы работы с закладками. Для создания новой закладки нужно установить в нужной строке текстовый курсор и выбрать директиву «Поставить закладку». При повторном вызове этой директивы в той же строке, закладка убирается. Проставив несколько закладок, можно передвигаться по ним при помощи директив «Перейти к следующей закладке» и «Перейти к предыдущей закладке». При помощи соответствующей директивы можно убрать все закладки.

           Директивы работы с закладками            таблица 4.    


3. Ответить на контрольные вопросы

  1.  Как сократить время, которое  тратится на отладку?  

  1.  Как используются отладчики?

  1.  Какая директива используется для постановки точки останова?

  1.  Какая директива используется для остановки автоматического выполнения программы?

  1.  Для чего применяются закладки?

  4. Сделать выводы.