Скачиваний:
1
Добавлен:
10.01.2025
Размер:
39.74 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра ИИСТ

отчет

по лабораторной работе №1

по дисциплине «Микропроцессорные устройства в

информационно-измерительной технике»

Тема: Создание программ на языке Ассемблера в среде Eclipse

Бригада №7

Студент гр. 9587

Медведев Г.Н.

Постникова Е.И.

Преподаватель

Марченков Р.Ю.

Санкт-Петербург

2022

Цель работы.

Освоение технологии создания программ на языке низкого уровня.

Задание.

  1. Создать проект.

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

  3. Отладить программу.

Основные теоретические положения.

Среда разработки Eclipse – это модульная расширяемая среда разработки. Часто разделяют понятия Eclipse как платформы и Eclipse как некоторого программного средства, построенного на этой платформе. Одним из таких программных средств является среда разработки Eclipse CDT (C/C++ Development Tooling). По сути, это платформа Eclipse с определённым набором модулей расширения, делающих её ориентированной на разработку программ преимущественно на языках Си и Си++. Эта же среда поддерживает работу с исходными текстами на языке ассемблера.

Лабораторный стенд представляет собой персональный компьютер с подключённой к нему отладочной платой, которая питается либо от интерфейса USB (5 В), либо адаптера постоянного тока (6 В). На отладочной плате располагаются микроконтроллер AT91SAM7S и необходимые для его работы электронные компоненты (на рисунке не обозначены). К микроконтроллеру подключены две кнопки общего назначения, кнопка сброса контроллера, 2 светодиода общего назначения, светодиод наличия питания, потенциометр и терморезистор. В правой части платы находится монтажная область, которая на некоторых отладочных платах может быть занята дополнительным оборудованием.

Алгоритм работы программы

  1. Начало программы

  2. Объявление области исполняемого кода

  3. Объявление вектора сброса

  4. Подготовка перефирии (присвоение адреса регистру r0 с использованием PA18; загрузка адреса PIO Enable Register; использование режима дискретного ввода/вывода; загрузка адреса регистра; использование r0 как выход)

  5. Мигание светодиода (загрузка адреса Set Output Data Register в регистр r1, если включается выход r0, то светодиод гаснет; запуск подпрограммы задержки wait, присваивание r4 нулевого значения, прибавление единицы к значению r4, пока значение r4 не будет ровно 100000, выход из подпрограммы задержки wait; загрузка адреса Clear Output Data Regiseter в регистр r1, если выключается выход r0, то светодиод загорается; запуск подпрограммы задержки wait; переход в начало подпрограммы blink)

  6. Конец программы

Описание использованных регистров

В процессе выполнения были использованы регистры общего назначения:

  1. r0 используется для записи адреса светодиода

  2. r1 используется для загрузки и передачи адресов

  3. 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

Описание технологии разработки и отладки программ на языке ассемблера

  1. Создание проекта

  2. Импорт заготовочных файлов

  3. Создание в проекте файла с разрешением «.s»

  4. Набор текста программы

  5. Построение программы

  6. Проверка на содержание ошибок в программе

  7. Подготовка к отладке программы

  8. Запуск отладчика Olimex

  9. Запуск отладки (сброс и остановка процессора целевого микроконтроллера; запись программы в память микроконтроллера; настройка отладчиком процессора для запуска программы; запуск и выполнение процессором программы до момента входа в процедуру обработки прерывания по сбросу, после чего выполнение приостанавливается; переключение Eclipse в режим отладки)

  10. Отладка в пошаговом режиме

  11. Запуск автоматического выполнения программы

  12. Завершение отладки

Вывод: в ходе выполнения лабораторной работы были освоены технологии создания программ в Eclipse на языке ассемблер; был создан проект и набран исходный текст программы; была произведена отладка программы; был описан алгоритм работы программы; были описаны использованные регистры; был приведён листинг программы; были описаны технологии разработки и отладки программ на языке ассемблер.