Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дмитриев Универсалный лабораторный стенд. Инструменталные средства проектирования и отладки 2009

.pdf
Скачиваний:
47
Добавлен:
17.08.2013
Размер:
17.8 Mб
Скачать

Рис. 1.8. Сохранение файла с текстом программы

Для завершения формирования нового проекта необходимо подключить к нему созданный файл с исходным текстом программы. Для этого на вкладке «Project» выбираем опцию «Edit Project» (рис. 1.9).

Рис. 1.9. Выбор опции для подключения файла с исходным текстом программы к проекту

Далее в окне «Project» (см. рис. 1.4) в поле «Source Files» нажимаем кнопку «Add». Открывается окно «Add File to Project»

(рис. 1.10).

В полях «Папки» и «Диски» определяем местоположение файла с исходным кодом программы. В поле «Типы файлов» выбира-

ем опцию «Assembly Sourсe (*.a51)». После этого в поле «Имя файла» выбираем требуемое имя и последовательно нажимаем

11

кнопки «Add» и «Close» этого окна. В поле «Source Files» окна «Project» (рис. 1.11) можно наблюдать имя выбранного файла, выделенное полосой синего цвета. Для сохранения результатов редактирования проекта последовательно нажимаем кнопки «Save» и «Cancel». На этом создание нового проекта завершено.

Рис. 1.10. Окно для выбора файла, подключаемого к проекту

Рис. 1.11. Подключение файла с исходным текстом программы к проекту в окне «Project»

12

1.1.2. Открытие проекта

Для открытия ранее созданного проекта необходимо на вкладке меню главного окна «Project» выбрать опцию «Open Project» (рис. 1.12).

Рис. 1.12. Выбор опции «Open Project» для открытия проекта

Откроется окно «Open project» для открытия проекта (рис. 1.13). Работа с этим окном идентична ранее рассмотренной работе с окном «Create Project» (см. рис. 1.3).

Рис. 1.13. Окно для открытия созданного ранее проекта

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

13

крытия нужного файла на вкладке «Files» главного окна выбираем опцию «Open». В появившемся окне «Открытие файла», следуя предыдущим указаниям, выбираем требуемый файл.

1.1.3. Формирование исходного кода пользовательской программы

При написании пользовательской программы необходимо учитывать некоторые особенности как среды µVision, так и организации памяти МК в составе УЛС. Сформулируем основные рекомендации по составлению кода программы с учетом этих особенностей.

Пользовательская программа должна разрабатываться таким образом, чтобы ее впоследствии можно было запускать и отлаживать на УЛС. В этом случае программа должна предварительно загружаться в эмулятор ПЗУ, который занимает область адресов 8000h – FFFFh внешней памяти программ МК. При запуске программы, загруженной в эмулятор ПЗУ, управление всегда передается по адресу 8000h. Поэтому абсолютный код программы должен всегда начинаться именно с этого адреса, который устанавливается следующей директивой ассемблера: ORG 8000h.

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

8000

 

org

8000h

8000 028015

ljmp

met1

8003

 

org

8003h

8003

F9

mov

r1,a

8004 32

reti

 

8013

 

org

8013h

8013

FA

mov

r2,a

8014 32

reti

 

8015

 

met1:

 

8015

F8

mov

r0,a

8016 028016

ljmp

$

 

 

еnd

 

14

Если не контролировать эти условия, то при компоновке возможно возникновение эффекта наложения различных участков кода программы. Суть состоит в следующем. Директива ORG предписывает компоновщику размещать часть кода программы до следующей аналогичной директивы, начиная с заданного в ней абсолютного адреса. Если в последующих директивах ORG используются адреса, которые попадают в область памяти, уже зарезервированную под участки кода в соответствии с предшествующими директивами ORG, то часть такого кода, начиная с адреса последующей директивы ORG, теряется. Рассмотрим текст простой программы, который иллюстрирует данное положение:

ORG

8100h; данная директива предписывает поместить в память

 

с адреса 8100h последующую часть кода программы;

MOV

A, #00h

ORG

8100h; данная директива предписывает также поместить в

 

память с адреса 8100h последующую часть кода

 

программы;

MOV

A, #0FFh

Если проанализировать содержимое полученного после ассемблирования и компоновки HEX-файла, то можно увидеть, что по адресу 8100h будут записаны коды обеих команд. При загрузке такого файла в симулятор dScope исполняться будет только одна последняя команда MOV A, #0FFh, а команда MOV A,#00h будет потеряна. При загрузке данного HEX-файла в эмулятор ПЗУ УЛС программа «Монитор-загрузчик» выдаст сообщение, предупреждающее пользователя о возникновении такой ошибки. Чтобы избежать данной ситуации, следует директивы ORG вводить в строгой последовательности адресов, на которые они указывают, а соответствующие участки кода следует начинать командой перехода на относительный адрес (по метке), например, так как это сделано во втором варианте программы:

8000

 

org

8000h

8000

028016

ljmp

met1; основной модуль программы

8003

 

org

8003h

8003

02801A

ljmp

met2;обработчик прерывания INT0

8013

 

org

8013h

8013

02801C

ljmp

met3;обработчик прерывания INT1

8016

 

met1:

 

8016 F8

mov

r0,a

15

8017 028017

ljmp

$

801A

 

met2:

 

801A

F9

mov

r1,a

801B

32

reti

 

801C

 

met3:

 

801C FA

mov

r2,a

801D 32

reti

 

 

 

end

 

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

1.2. Программный симулятор dScope

Симулятор dScope также является приложением Windows и предназначен для отладки пользовательских программ на моделях различных микроконтроллеров. После запуска данного приложения открывается его главное окно «dScope», к которому пользователь может добавить ряд других окон для просмотра кода программы, состояния памяти и регистров МК, а также управления отладкой. Тем самым пользователь сам формирует отладочную среду в виде конфигурации необходимой совокупности просмотровых окон, адаптированную под свою конкретную задачу. Пример такой отладочной среды показан на рис. 1.14.

В верхней части основного окна «dScope» располагается главное меню и инструментальная панель. С их помощью осуществляются открытие файла c кодом отлаживаемой программы, выбор окон для просмотра памяти и регистров МК, а также настройка различных параметров программы.

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

Окно «Module» открывается путем выбора опции «Debug window» на вкладке главного меню «View» и служит для отображения

16

Рис. 1.14. Пример отладочной среды

кода отлаживаемой программы. Текущему состоянию счетчика команд, который указывает на команду, с которой начнется выполнение программы, соответствует строка красного цвета. На рис. 14 красным цветом выделена строка с адресом 0000h. В верхней части окна «Module» располагаются меню и инструментальная панель. Выбор пункта меню или нажатие кнопки на инструментальной панели приводит к вызову соответствующей функции отладки. Для большего удобства в правой части формы находится панель с кнопками для дублирования вызовов функций отладки. Перечислим их:

«Go» – выполнение программы, начиная с текущего адреса счетчика команд (строка красного цвета);

«GoTilCurs» – выполнение программы, начиная с текущего адреса счетчика команд. Выполнение заканчивается при достижении команды, содержащейся в строке, на которую указывает курсор (строка малинового цвета);

«StepInto» – выполнение следующей команды. Если встречается команда вызова функции, то происходит вход в тело функции;

17

«StepOver» – выполнение следующей команды. Если встречается команда вызова функции, то вход в тело функции не осуществляется. Функция выполняется как одна команда;

«StepOut» – выполнение программы, начиная с текущего адреса счетчика команд. Выполнение программы прекращается при осуществлении возврата из функции;

«Stop» – прекращение выполнения программы.

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

Враспоряжении пользователя также есть буфер трассы (Trace buffer), который хранит информацию о выполнении последних 512 команд. После выполнения каждой команды в буфере запоминаются значения: счетчика команд PC, статусного слова PSW и всех регистров МК. Для отображения результатов трассировки использу-

ется кнопка «View Trace».

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

Окно памяти «Memory» служит для просмотра состояния как внутренней, так и внешней памяти данных. Переключение режимов отображения осуществляется путем выполнения специальных команд. Ввод таких команд выполняется в командной строке окна

«Command».

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

12 МГц).

1.2.1.Открытие пользовательской программы в симуляторе dScope

Для открытия программы необходимо в меню «File» главного окна выбрать опцию «Load object file». Откроется меню навигации для поиска файлов (рис. 1.15), в поле «Типы файлов» необходимо выбрать Hex file (*.hex). В полях «Папки» и «Диски» местополо-

18

жение файла. После этого в поле «Имя файла» выбираем требуемый файл из списка.

Рис. 1.15. Окно поиска файла

Обратите внимание на то, что код правильно составленной программы должен располагаться в памяти программ с адреса 8000h. При открытии окна «Module» содержимое памяти программ по умолчанию выводится с адреса 0000h. Этот адрес выделен строкой красного цвета. Для того чтобы отображение кода программы в данном окне начиналось с адреса 8000h, достаточно один раз кликнуть левой кнопкой мыши на бегунок в правой части окна

(рис. 1.16).

Рис. 1.16. Окно «Module» c открытым кодом программы, расположенной по адресу 8000h

19

Как видно из рис. 1.16, курсор малинового цвета выделяет строку с первой командой, отображаемой в окне, начинающемся с адреса 8000h. Счетчик команд при этом сохранил свое прежнее начальное значение 0000h. Чтобы подготовить программу к запуску с адреса 8000h, необходимо поменять значение в счетчике команд на 8000h. Для этого необходимо нажать кнопку «GoTilCurs» (то есть выполнить все команды, начиная со строки красного цвета с остановом на строке малинового цвета). В нашем случае будут выполнять команды NOP, расположенные в памяти программ с адреса 0000h по 7FFFh. Это обусловлено тем, что при имитации загрузки в память программ во все ее свободные ячейки записывается код 00h команды NOP.

После выполнения этого действия строка с адресом 8000h выделяется полосой красного цвета и можно переходить к выполнению отладки программы.

1.2.2. Отладка пользовательской программы

Как правило, отладка программы ведется в пошаговом режиме с контролем состояний ячеек памяти и регистров МК. На рис. 1.17 показан пример пошагового выполнения программы при помощи кнопки «StepInto».

Рис. 1.17. Пример пошагового выполнения программы

Две последние выполненные команды имеют адреса 8009h и 800Bh. Покажем, как можно проконтролировать их выполнение в соответствующих окнах отладочной среды.

20

Соседние файлы в предмете Интегрированные системы управления и проектирования