MCDIPL (Разработка программной и аппаратной поддержки к методическим указаниям Программирование микроконтроллеров), страница 8
Описание файла
Документ из архива "Разработка программной и аппаратной поддержки к методическим указаниям Программирование микроконтроллеров", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "MCDIPL"
Текст 8 страницы из документа "MCDIPL"
Как уже говорилось, AVR Studio позволяет отслеживать код программы с помощью внутрисхемного эмулятора или программного симулятора. Для выполнения (отслеживания) кода программы она сначала должна быть откомпилирована, чтобы сгенерировать объектный файла, который загружается в AVR Studio.
Рис. 3.2. AVR Studio в процессе отладки исходного кода программы Ap1.asm.
Ключевое окно в AVR Studio является окно источника (Source window), где отображается исходный код программы (см. рис. 3.2). Когда открывается объектный файл, то автоматически создается окно источника. Оно показывает выполняемый программный код и имеет название, соответствующее имени открытого файла. Указатель программного счетчика (желтая стрелка ) всегда показывает на строчку, которая будет выполняться. Полоса статуса (Status bar) указывает является ли исполнительное устройство ВСЭ или программным симулятором. Окно источника дает информацию о логике программы. В дополнении к этому, AVR Studio может показывать другие окна, которые предоставляют пользователю достаточный контроль состояния каждого элемента исполнительного устройства (ВСЭ или симулятор). Перечислим некоторые доступные окна:
-
Смотровое окно (Watch window) – показывает значения и адреса определенных переменных.
-
Окно РОН (Register window) – показывает состояние РОН. Регистры могут быть изменены при остановке выполнения программы.
-
Окно памяти (Memory window) – показывает содержимое памяти программ, памяти данных, регистров ввода/вывода и содержимое энергонезависимой памяти EEPROM. Ячейки памяти могут быть отражены в различных форматах: шестнадцатеричном, десятичном или двоичном формате или как ASCII символы. Содержимое памяти, также как и регистры, может быть изменено по желанию при остановке программы.
-
Окно регистров ввода/вывода (I/O window). Показывает содержимое регистра состояния, таймеров, EEPROM регистров, портов ввода/вывода и т.д.
-
Окно процессора (Processor window). Показывает важную информацию о выполнении программы включая Счетчик Команд (Program Counter), Указатель Стека (Stack Pointer),флаги регистра состояния (Flags), Счетчик Циклов (Cycle Counter) и др.
3.1.2. Создание нового проекта
Запустив AVR Studio в меню Project выберите пункт New. Как показано на рис. 3.3, в появившемся диалоговом окне «Select project name» необходимо будет ввести имя проекта (см. «Project name»), его местоположение «Location» и тип проекта «Project type». Имя может быть любым стандартным именем файла. Каталог можно написать в соответствующем текстовом поле или выбрать из списка имеющихся папок, при нажатии кнопки справа с тремя точками. Если каталога не существует, то он будет создан без всяких напоминаний.
Рис. 3.3. Создание нового проекта.
Все файлы вашего проекта AVR Studio сохраняет в выбранном каталоге.
Тип проекта выбирают из следующих соображений:
-
AVR Assembler: для компиляции кода текста проекта используется встроенный транслятор. Не требует ни каких дополнительных настроек. Мы будем использовать именно этот тип.
-
Generic 3rd party C compiler: позволяет вручную настраивать AVR Studio для использования внешних компиляторов.
После введения всех вышеперечисленных данных для продолжения нажмите кнопку ‘OK’. Далее появится окно проекта, как показано на рис 3.4.
Рис. 3.4. Окно нового проекта.
В папках «Assembler Files» и «Other Files» хранятся файлы связанные с вашим проектом. Но на рис. 3.4 они пока пустые.
Добавление ассемблерного файла в проект может быть реализовано несколькими способами. Можно добавить существующий файл или создать новый. Далее мы используем и тот, и другой способ.
Создадим новый файл исходного кода программы. Для этого с помощью нажатия правой кнопки мыши на папке «Assembler Files» вызовем контекстное меню, как показано на рис. 43 и выберем пункт «Add File…». Появиться окно под названием «Add Files to Project». Убедитесь, что вы находитесь в каталоге своего проекта. В этом каталоге как минимум должен быть файл вашего проекта. В нашем случае это – "Demo_Project.apr". в текстовом поле «File name:» введем имя нового файла – "LED_code.asm", и нажмем кнопку «Open». Заметим, что расширение файла – asm следует ввести вручную, т.к. автоматически оно не создастся. Если все сделано правильно, то создастся файл с тем именем, который вы ввели.
Создание файла можно было осуществить с помощью контекстного подменю «Create New File». Тогда появиться примерно такое же окно как на рис 3.3, но под названием «Create new file». В это случае AVR Studio создает файл не в указанной папке (Assembler или др.), а в корневой папке проекта (Target), что бывает не всегда полезным.
В только что созданный файл добавьте следующий код программы:
;******************************************************
.include "8515def.inc"
.def temp = r16
rjmp RESET ; вектор прерывания по включению питания,
;сбросу RESET или от сторожевого таймера
RESET:
ldi temp,low(RAMEND) ;инициализируем указатель стека
out SPL,temp ;
ldi temp,high(RAMEND);
out SPH,temp ;
ser temp ;temp = 0xFF
out DDRB,temp ;конфигурируем порт В как выход
loop:
out PORTB,temp ;выводим temp в порт В
inc temp ;инкремент temp
rjmp loop ;переход на метку loop
;******************************************************
Теперь добавим в проект уже существующий файл. Для этого, во-первых, скопируем файл "8515def.inc" в каталог нашего проекта (см. рис. 3.3.), т.е. в D:\Project_files\AVRasm\ из подкаталога Appnotes, где находится AVR Studio. Вернувшись в окно проекта проделаем знакомую уже нам операцию по добавлению файла. На папке «Assembler Files» в контекстном меню выберем пункт «Add File…». В появившемся диалоговом окне добавления файлов к проекту выберем каталог нашего проекта, а из перечисленных файлов – "8515def.inc" и нажмем «Open». Теперь окно проекта должно соответствовать рис. 3.5.
Рис. 3.5. Окно проекта с рабочими файлами.
Посмотрев внимательно на рис. 3.5 можно заметить отличие иконок файлов "8515def.inc" и "LED_code.asm". Дело в том, что когда мы добавляем первый файл в новый проект, то AVR Studio помечает его как входной транслируемый файл – «Assembler entry file». И при вызове встроенного транслятора (ассемблера) будет компилироваться именно этот файл, помеченный красной стрелкой вправо, а все остальные, помеченные синей стрелкой вниз – будут игнорироваться. Вообще-то говоря файл "8515def.inc" добавлять в окно проекта совершенно не обязательно. Это было сделано с целью обучения. Важно чтобы этот файл был в том же каталоге, что и ассемблерный файл.
Рис. 3.6. Меню «Project».
Теперь самое время транслировать исходный код программы в объектный код. Для этого существует несколько способов. Можно вызвать контекстное меню и кликнуть мышью на «Assemble», как показано на рис. 3.5, или сделать тоже самое через меню «Project» (см. рис. 3.6). А можно просто нажать «F7».
Появится окно «Project Output» с сообщением об успешной трансляции или ошибках, если они имеются. Если вы еще не сохранили проект, то желательно это сделать, выбрав через меню «Project» команду «Save» или на панели инструментов нажать кнопку «Save all». Если трансляция прошла без ошибок, то можно смело приступать к исполнению кода на встроенном симуляторе или ВСЭ, если он имеется в наличии.
Заметим, что для создания hex файла, который необходим при прошивки (программирование) кристалла, необходимо изменить установки проекта (Project Settings…) см. рис. 3.5. и рис. 3.6. Для этого в появившемся окне “AVR Assembler Options” установите “Output file format:” на “Intel Intellec 8/MDS (Intel Hex)”. Теперь каждый раз при вызове транслятора будет создаваться выходной файл с расширением hex и файл с расширением eep, если в коде программы есть сегмент EEPROM данных.
3.1.3. Исполнение программного кода
Для отладки программы или другими словами, для выполнения программного кода в режиме симулятора необходимо, конечно же, чтобы программа транслировалась без ошибок.
Рис. 3.7. Меню «Debug».
После успешной трансляции выберете из меню «Debug» команду «Trace into» или нажмите «F11», как показано на рис. 3.7. Так как у нас нет ВСЭ, то AVR Studio сама предложит определить соответствующий режим программного симулятора (см. рис. 3.8). Появится окно «Simulator Options», в котором необходимо будет выбрать тип устройства для симуляции. В данном примере это AT90S8515. Изменять значения частоты и объема памяти нежелательно, так как они установлены для выбранного устройства по умолчанию согласно техническим параметрам МК. После нажатия кнопки «ОК», можно сказать, что все готово для работы с кодом программы на симуляторе в пошаговом режиме или другом, каком вы пожелаете.
Рис. 3.8. Окно опций программного симулятора.
Заметим, что теперь в окне исходного кода программы, слева на серой полосе появилась желтая стрелка вправо, которая является указателем программного счетчика. Она указывает на следующую инструкцию, которая будет выполняться. Пример такой стрелки можно увидеть на рис. 3.8.
Рис. 3.9. Меню «View».
Окно регистров ввода/вывода.
Д ля более наглядного представления, что происходит с регистрами ввода/вывода во время выполнения программы, откроем соответствующее окно – «IO view». Это можно сделать либо через меню «View» команда «New IO View», либо нажав «Alt» и 5, как показано на рис. 3.9, или на панели инструментов нажать соответствующую кнопку – .
Рис. 3.10. Окно регистров ввода/вывода для МК AT90S8515.
Так как мы определили для встроенного симулятора микроконтроллер типа AT90S8515, то окно регистров ввода/вывода откроется автоматически со всеми надлежащими устройствами для этого типа МК (см. рис. 3.10). Данное окно содержит перечень устройств, содержимое которых можно просмотреть, как «древовидную» структуру, где один элемент может содержать ряд вложенных подэлементов.
Рис. 3.11. Содержимое порта В.
Так как наша программа работает с портом В, то рассмотрим его содержимое более подробно. Для этого по названию «Port B» щелкнем мышью два раза (double click) или один раз по плюсику слева. Список порта В раскроется, как показано на рис. 3.11, и можно будет увидеть регистр данных (PORTB), регистр направления данных (DDRB) и выводы порта В (PINB) – «Port B Data», «Data Direction» и «Input Pins», соответственно.
Каждый бит этого регистра представлен в виде флажка. Логическая единица соответствует установленному флажку, а логический ноль – снятому. Состояния этих флажков обновляются во время выполнения программы и показывают текущее значение каждого бита. Вы также можете устанавливать или очищать значения битов, щелкая мышью по соответствующим флажкам, тем самым изменяя значения соответствующих регистров ввода/вывода.
Существует пара команд для одиночного пошагового выполнения программы. Это «Trace into» /F11/ и «Step Over» /F10/ из меню «Debug» (см. рис. 3.7). Отличие состоит в том, что «Trace into» при вызове подпрограммы входит в неё в пошаговом режиме, т.е. можно отследить каждую команду по отдельности; а «Step Over» выполняет подпрограмму целиком и продолжает выполнение в пошаговом режиме со следующей команды после вызова подпрограммы, т.е. как бы «обходит» подпрограмму. Наш пример не содержит подпрограмм, поэтому различие заметно не будет.