3.6.2. Условные контрольные точки
(Руководство разработчика по микроконтроллерам семейства HCS08)Модуль внутрисхемной отладки в составе МК HCS08 предоставляет расширенные возможности по установке контрольных точек. Мы рассмотрим, как устанавливать так называемые триггеры контрольных точек на примере программы, приведенной в Примере 3.3. Триггером контрольной точки называют комбинацию условий, при которых модуль отладки определяет, что в исполняемой программе наступило событие, по которому необходимо остановиться.
Перед использованием триггеров необходимо убедиться, что они сконфигурированы на работу в автоматическом режиме (пункт контекстного меню Trigger Module Usage > Automatic)!
Существует 9 режимов работы триггеров:
- Доступ к памяти по адресу компаратора A. Срабатывание происходит, когда код на шине адреса совпадает с кодом на входах компаратора А. Этот режим может использоваться как для создания точки останова типа breakpoint, если компаратор А указывает на адрес ПЗУ, так и для создания точки наблюдения типа watchpoint, если компаратор А указывает на адрес ОЗУ.
- Доступ к памяти по адресу компараторов A или B. Срабатывание происходит, когда код на шине адреса совпадает с кодом на входах компараторов A или B во время процедуры записи или чтения. Этот режим также может использоваться как для создания точки останова, когда один или оба компаратора указывают на адрес в области программного кода, так и для создания точки наблюдения watchpoint, когда оба компаратора сравнивают адреса ОЗУ.
- Доступ к памяти по адресу сначала компаратора A, затем компаратора B. Срабатывание происходит, когда сначала код на шине адреса совпадает с кодом на входах компаратора A во время процедуры записи или чтения, а затем другой код на шине адреса совпадает с кодом на входах компаратора B во время процедуры записи или чтения. Не существует ограничений во времени между этими двумя событиями.
- Доступ к памяти по адресу компаратора A, когда в этой ячейке находится значение компаратора B. Срабатывание происходит, когда одновременно совпадают код на шине адреса с кодом на входах компаратора А и код на шине данных с кодом на входах компаратора B. Этот режим может использоваться, когда необходимо «поймать» момент записи или чтения определенных данных. В частности, для поиска записи ложных значений в какую-либо переменную.
- Доступ к памяти по адресу компаратора A, когда в этой ячейке находится значение, отличное от значения компаратора B. Срабатывание происходит, когда одновременно код на шине адреса совпадает с кодом на входах компаратора A, а код на шине данных не совпадает с кодом на входах компаратора B. Этот режим может использоваться, когда необходимо «поймать» момент записи или чтения данных, не совпадающих c заданными.
- Копирование данных из ячейки памяти в стек FIFO. Срабатывание происходит, когда код на шине адреса совпадает с кодом на входах компаратора B во время процедуры записи или чтения. В этот момент текущее значение шины данных записывается во внутренний стек FIFO.
- Копирование данных в стек FIFO по комбинации условий. Начало данного режима инициируется, когда код на шине адреса совпадает с кодом на входах компаратора A во время процедуры записи или чтения. Но при этом ничего не происходит. Затем каждый раз, когда код на шине адреса совпадает с кодом на входах компаратора B во время процедуры записи или чтения, текущее значение шины данных будет записано во внутренний стек FIFO.
- Доступ к памяти данных внутри диапазона адресов. Срабатывание триггера контрольной точки происходит, если код на шине адреса больше или равен значению на входах компаратора A и меньше или равен значению на входах компаратора B.
- Доступ к памяти данных вне диапазона адресов. Срабатывание триггера контрольной точки происходит, если код на шине адреса меньше или равен значению на входах компаратора A и больше или равен значению на входах компаратора B.
Выбор режима срабатывания компараторов выбирается в окне настройки модуля триггеров Trigger Module Settings (Рис.3.33). Кроме того, там можно установить следующие действия по срабатыванию:
- Записывать данные постоянно и остановить программу.
- Записывать данные без остановки программы.
- Начать записывать при срабатывании компаратора и остановиться при заполнении стека.
- Начать записывать при срабатывании компаратора, не останавливаться при заполнении стека.
Рис.3.33. Окно настройки режима модуля триггеров отладки.
Рассмотрим пример использования компараторов модуля DBG.
В большинстве МК семейства HCS08 можно создать максимум 3 контрольные точки. Кроме устройств серии QA и QD (только одну контрольную точку) и QE (4 контрольные точки). При использовании комбинированных контрольных точек их возможное максимальное количество уменьшается!
3.6.2.1. Остановка программы при выполнении операции записи значения в переменную
Для назначения такого режима работы, установим триггер на переменную counter1. Нажмите на правую кнопку мыши на переменной counter1 в окне данных и выберите пункт меню Set Trigger Address A > Write Access, как показано на Рис.3.34.
Рис.3.34. Выполнение манимуляций в окне настройки режима модуля триггеров отладки.
Переменная, для которой установлено слежение компаратором A, выделяется в окне данных Data вертикальной красной прерывистой линией (Рис.3.35), а для компаратора B — синей.
Рис.3.35. Окно Data2 после настройки триггера контрольной точки.
Вот и все! Теперь программа останавливается при каждом обращении к переменной counter1 для записи.
3.6.2.2. Остановка программы, когда переменная достигает определенного значения
Для демонстрации этого режима запрограммируем условия для остановки работы программы при достижении переменной counter1 значения 10. Для этого выполним следующие действия:
- Установим компаратор А на переменную counter1.
- Изменим режим триггера контрольной точки на режим 4 — равенство значения шины адреса коду компаратора A и значения шины данных коду компаратора B. Также необходимо изменить значение для сравнения. Установим поле Match Value равным 0xA (10 в десятичной системе счисления), как показано на Рис.3.36.
Рис.3.36. Выполнение манимуляций в окне настройки режима модуля триггеров отладки.
Для проверки режима работы триггера нужно сбросить отладчик и перезапустить программу. Через некоторое время она остановится. Сразу после выполнения строки программного кода, в которой переменной присваивается значение 10, отладчик остановит выполнение программы. Обратите внимание на запись о событии в окне команд отладчика (Рис.3.37).
Рис.3.37. Запись при остановке по контрольной точке в окне Command отладчика.
3.6.2.3. Остановка по комбинации событий
Теперь предположим, что нам необходимо остановить выполнение программы после присвоения переменной val значения 30000, но при выключенном светодиоде. Как это сделать?
Ответ прост: использовать компараторы в режиме 3 — обращение к памяти по адресу A, а затем по адресу B. Нужно установить компаратор А на выражение val = 30000, а компаратор B — на первый вызов функции delay(val), как показано на Рис.3.38,а. Обратите внимание на то, что в окне исходного кода появятся красные символы А и B, показывающие, в каких местах компараторы будут срабатывать.
Рис.3.38,а. Окно Source с отметками об установке контрольной точки по комбинации событий.
Рис.3.38,б. Выполнение манимуляций в окне настройки режима модуля триггеров отладки.
Также надо изменить настройки компараторов в окне Trigger module settings. Следует выбрать режим Instruction at address A then at address B was executed, как показано на Рис.3.38, б.
Для проверки действия созданной контрольной точки необходимо перезапустить программу, и через некоторое время ее выполнение автоматически остановится на вызове функции delay(val), при этом светодиод демонстрационной платы будет погашен.
Рис.3.39. Окно отладчика после остановки в контрольной точке по комбинации событий.
Электронные компоненты Freescale >>>
Подробнее о компании Freescale >>>