Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

18. Панель инструментов для управления точками останова. Назначение наиболее часто используемых пунктов меню и соответ-

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

Таблица 2.3.2 – Основные диалоговые окна отладчика Keil μVision 4

Ячейки памяти

View Registers Window

Просмотр регистров

View Memory Window Memory 1–4

Просмотр локальных переменных

View Watch Windows Locals

Просмотр глобальных переменных

View Watch Windows Watch 1–2

Окно дизассемблера

View Disassembly Window

Хронометраж

View Analysis Windows

Performance Analyzer

 

Логический анализатор

View Analysis Windows

Logic Analyzer

 

Периферийные устройства

Peripherals …

Остановимся на главных операциях отладки. После перехода в режим отладки (Ctrl+F5) курсор устанавливается на первую строку основной программы. Программист может сразу начать пошаговое выполнение программы (F10/F11) или же установить точку останова (F9) на интересующей строке и запустить программу (F5). При достижении этой точки выполнение программы будет приостановлено и управление передано программисту.

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

В ходе отладки программист просматривает и при необходимости модифицирует регистры процессора (2), а также локальные и глобальные переменные через Watch-окно. Доступ к большинству управляющих регистров периферии открывается через меню Peripherals …. Многочисленные диалоговые окна настройки, связанные с периферийными устройствами будут рассмотрены в разделе 2.4 «Методика отладки программ».

2.3.7 Основные отладочные инструменты среды Keil µVision 4

Окно просмотра переменных Watch (рисунок 2.3.11) служит для наблюдения за значениями переменных или массивов и их редактирования. Окно содержит таблицу из двух колонок: имена переменных (1) и значения (2, 3), которые могут быть отображены в шестнадцатеричной или десятичной форме. Добавление новой переменной к списку осуществляется нажатием кнопки F2 или двойным щелчком по пустой строке (см. подсказку «double-click or F2 to add»). Кроме окна Watch есть окно Locals, в котором отображен список локальных переменных текущей функции.

Хронометраж позволяет измерить время выполнения участка программы и доступен только в режиме симуляции (рисунок 2.3.12). Здесь отоб-

127

ражается общее время выполнения программы (2), а также отдельных подпрограмм (3). Время рассчитывается исходя из числа прошедших машинных тактов и тактовой частоты, заданной в свойствах проекта Options for Target `Target 1` Target Xtal (MHz). Сброс счетчика времени производится кнопкой (1).

 

 

1

– имена переменных;

 

 

2

– элементы массива в

 

2

 

десятичном представ-

 

 

лении;

 

 

 

1

3

3

– шестнадцатеричное

 

 

значение переменной

 

 

 

 

 

 

 

1

2

3

Рисунок 2.3.11 – Окно просмотра переменных Watch

1 – кнопка сброса (обнуление счетчика времени);

2 – общее время выполнения программы;

3 – время выполнения подпрограмм

Рисунок 2.3.12 – Окно хронометража Performance Analyzer

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

1

2

3

1 – кнопка вызова диалога настроек;

2 – выбор масштаба;

3 – экранный курсор

Рисунок 2.3.13 – Окно логического анализатора (Logic Analyzer)

128

1

4

6

3 2

5

7

1 – имена регистров или переменных;

2–3 – кнопки добавления или удаления сигнала; 4 – способ представления

сигнала (аналоговый, двоичный, временная диаграмма);

5 – выбор диапазона по амплитуде;

6– маска (через логическое

«И»);

7– сдвиг право

Рисунок 2.3.14 – Окно настройки логического анализатора

Настройка осуществляется кнопкой Setup (1). В окне настройки (рисунок 2.3.14) можно добавить сигнал кнопкой (2) или удалить кнопкой (3). При добавлении вводится имя переменной или регистра. Для просмотра осциллограммы логического уровня на портовой линии имя вводится по шаб-

лону «PortX.X».

Здесь же можно задать логическую обработку регистра — маскирование (6) и смещение на несколько разрядов вправо (7). Это позволяет выделить несколько интересующих разрядов «из середины» регистра. Также задаются предельные значения по оси ординат (5).

Масштаб настраивается кнопками (3). Для автоматического выбора масштаба служит кнопка All. Щелчком левой кнопки мыши по осциллограмме вызывается экранный курсор (2) — передвижная временная метка.

2.3.8 Управление распределением памяти

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

В простейшем случае используется простая схема распределения памяти: данные размещаются в ОЗУ, начиная с адреса 0x40000000; основная программа, все функции и константы, объявленные через const, — в ПЗУ, после векторов прерываний, то есть, начиная с адреса 0x00000040.

Для устранения задержек при обращении к ПЗУ можно перенести часть кода в память данных. Для этого необходимо оформить фрагмент программы, как функцию, сохранить ее в отдельный файл и прикрепить файл к проекту. Затем в окне проекта (рисунок 2.3.4) изменить свойства этого файла. В поле Memory Assignment требуется задать диапазон адресов 0x40000000– 0x40007FFF, который по умолчанию обозначен IRAM1 (рисунок 2.3.15).

129

Рисунок 2.3.15 – Настройка размещение подпрограммы в оперативной памяти

1

2

3

1 – флаг отключения сценария; 2 – имя файла сценария; 3 – редактор файла сценария

Рисунок 2.3.16 – Окно настройки редактора связей (Linker)

После этого в программу будет автоматически внедрен код, копирующий данную функцию из ПЗУ в ОЗУ. Копирование будет производиться в ходе инициализации микроконтроллера, а запускаться функция будет из оперативной памяти.

Такой способ настройки распределения памяти не решает проблем с быстродействием функций стандартных библиотек. Если пользовательская функция, находящаяся в ОЗУ, вызывает стандартную функцию sqrt, то по-

130