
lab1
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ИИСТ
отчет
по лабораторной работе №1
по дисциплине «Микропроцессорные устройства в
информационно-измерительной технике»
Тема: Создание программ на языке Ассемблера в среде Eclipse
Бригада №7
Студент гр. 9587 |
|
Медведев Г.Н. |
|
|
Постникова Е.И. |
Преподаватель |
|
Марченков Р.Ю. |
Санкт-Петербург
2022
Цель работы.
Освоение технологии создания программ на языке низкого уровня.
Задание.
Создать проект.
Набрать исходный текст программы на языке ассемблера.
Отладить программу.
Основные теоретические положения.
Среда разработки Eclipse – это модульная расширяемая среда разработки. Часто разделяют понятия Eclipse как платформы и Eclipse как некоторого программного средства, построенного на этой платформе. Одним из таких программных средств является среда разработки Eclipse CDT (C/C++ Development Tooling). По сути, это платформа Eclipse с определённым набором модулей расширения, делающих её ориентированной на разработку программ преимущественно на языках Си и Си++. Эта же среда поддерживает работу с исходными текстами на языке ассемблера.
Лабораторный стенд представляет собой персональный компьютер с подключённой к нему отладочной платой, которая питается либо от интерфейса USB (5 В), либо адаптера постоянного тока (6 В). На отладочной плате располагаются микроконтроллер AT91SAM7S и необходимые для его работы электронные компоненты (на рисунке не обозначены). К микроконтроллеру подключены две кнопки общего назначения, кнопка сброса контроллера, 2 светодиода общего назначения, светодиод наличия питания, потенциометр и терморезистор. В правой части платы находится монтажная область, которая на некоторых отладочных платах может быть занята дополнительным оборудованием.
Алгоритм работы программы
Начало программы
Объявление области исполняемого кода
Объявление вектора сброса
Подготовка перефирии (присвоение адреса регистру r0 с использованием PA18; загрузка адреса PIO Enable Register; использование режима дискретного ввода/вывода; загрузка адреса регистра; использование r0 как выход)
Мигание светодиода (загрузка адреса Set Output Data Register в регистр r1, если включается выход r0, то светодиод гаснет; запуск подпрограммы задержки wait, присваивание r4 нулевого значения, прибавление единицы к значению r4, пока значение r4 не будет ровно 100000, выход из подпрограммы задержки wait; загрузка адреса Clear Output Data Regiseter в регистр r1, если выключается выход r0, то светодиод загорается; запуск подпрограммы задержки wait; переход в начало подпрограммы blink)
Конец программы
Описание использованных регистров
В процессе выполнения были использованы регистры общего назначения:
r0 используется для записи адреса светодиода
r1 используется для загрузки и передачи адресов
r4 используется как счетчик в подпрограмме задержки wait
Листинг программы
lab1.elf: file format elf32-littlearm
Disassembly of section .text:
00100000 <_vectors_>:
@---------------------------------------------------------------
.text @ Объявляем область исполняемого кода
.section .text.vectors @ Далее - таблица векторов прерываний
ResetVector: @ Первый вектор - вектор сброса
b start @ При сбросе контроллера - переход на метку start
100000: ea000006 b 100020 <_start_>
100004: 00000000 andeq r0, r0, r0
100008: 00000000 andeq r0, r0, r0
10000c: 00000000 andeq r0, r0, r0
100010: 00000000 andeq r0, r0, r0
100014: 00000000 andeq r0, r0, r0
100018: 00000000 andeq r0, r0, r0
10001c: 00000000 andeq r0, r0, r0
Disassembly of section .text.program:
00100020 <start>:
@---------------------------------------------------------------
.section .text.program
@ Подготавливаем периферию
start:
mov r0, #0x040000 @ Используем PA18
100020: e3a00701 mov r0, #262144 ; 0x40000
ldr r1, =PIOA_PER @ Загружаем адрес PIO Enable Register
100024: e59f1038 ldr r1, [pc, #56] ; 100064 <wait+0x14>
str r0, [r1] @ Использовать режим общего дискр. вв/в.
100028: e5810000 str r0, [r1]
ldr r1, =PIOA_OER @ Загружаем адрес регистра
10002c: e59f1034 ldr r1, [pc, #52] ; 100068 <wait+0x18>
@ Output Enable Register
str r0, [r1] @ Используем PA18 как выход
100030: e5810000 str r0, [r1]
00100034 <blink>:
blink: @ Мигаем
ldr r1, =PIOA_SODR @ Загружаем адрес Set Output Data Register
100034: e59f1030 ldr r1, [pc, #48] ; 10006c <wait+0x1c>
str r0, [r1] @ Включаем выход / светодиод гаснет
100038: e5810000 str r0, [r1]
bl wait @ Пауза
10003c: eb000003 bl 100050 <wait>
ldr r1, =PIOA_CODR @ Загружаем адрес Clear Output Data Reg.
100040: e59f1028 ldr r1, [pc, #40] ; 100070 <wait+0x20>
str r0, [r1] @ Выключаем выход / светодиод зажигается
100044: e5810000 str r0, [r1]
bl wait @ Пауза
100048: eb000000 bl 100050 <wait>
b blink @ Повторяем мигание
10004c: eafffff8 b 100034 <blink>
00100050 <wait>:
@---------------------------------------------------------------
@ Подпрограмма задержки
wait:
ldr r4, =0 @ Инициализируем r4 нулём
100050: e3a04000 mov r4, #0
.Lwait:
add r4, #1 @ Инкремент
100054: e2844001 add r4, r4, #1
cmp r4, #0x100000 @ Сравнить с числом
100058: e3540601 cmp r4, #1048576 ; 0x100000
bne .Lwait @ Если не равно, считаем дальше
10005c: 1afffffc bne 100054 <wait+0x4>
mov pc, lr @ Если равно, выходим из подпрограммы
100060: e1a0f00e mov pc, lr
100064: fffff400 ; <UNDEFINED> instruction: 0xfffff400
100068: fffff410 ; <UNDEFINED> instruction: 0xfffff410
10006c: fffff430 ; <UNDEFINED> instruction: 0xfffff430
100070: fffff434 ; <UNDEFINED> instruction: 0xfffff434
Описание технологии разработки и отладки программ на языке ассемблера
Создание проекта
Импорт заготовочных файлов
Создание в проекте файла с разрешением «.s»
Набор текста программы
Построение программы
Проверка на содержание ошибок в программе
Подготовка к отладке программы
Запуск отладчика Olimex
Запуск отладки (сброс и остановка процессора целевого микроконтроллера; запись программы в память микроконтроллера; настройка отладчиком процессора для запуска программы; запуск и выполнение процессором программы до момента входа в процедуру обработки прерывания по сбросу, после чего выполнение приостанавливается; переключение Eclipse в режим отладки)
Отладка в пошаговом режиме
Запуск автоматического выполнения программы
Завершение отладки
Вывод: в ходе выполнения лабораторной работы были освоены технологии создания программ в Eclipse на языке ассемблер; был создан проект и набран исходный текст программы; была произведена отладка программы; был описан алгоритм работы программы; были описаны использованные регистры; был приведён листинг программы; были описаны технологии разработки и отладки программ на языке ассемблер.