Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

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

Покупка
Основная коллекция
Артикул: 814962.01.99
Изложены теоретические основы использования средств разработки программного обеспечения и особенности построения программного обеспечения встраиваемых систем на примере микроконтроллеров семейства AVR. Приведены примеры программных решений с целью их использования в практической работе. Применительно к микроконтроллерам семейства AVR, рассмотрены вопросы трансляции и кросстрансляции программ, написанных на языках C/C++. Для студентов и аспирантов, обучающихся по направлениям «Прикладная математика и информатика», «Информатика и вычислительная техника», «Информационные системы и технологии», «Прикладная информатика», «Программная инженерия», «Автоматизация технологических процессов и производств», «Мехатроника и робототехника». Может быть полезно школьникам, углублённо изучающим информатику, робототехнику и посещающим соответствующие кружки.
Сонькин, М. А. Микропроцессорные системы. Разработка программного обеспечения для микроконтроллеров семейства AVR : учебное пособие / М. А. Сонькин, А. А. Шамин. - Москва ; Вологда : Инфра-Инженерия, 2023. - 96 с. - ISBN 978-5-9729-1211-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/2095075 (дата обращения: 18.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
М. А. Сонькин, А. А. Шамин









                МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ





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















Москва Вологда «Инфра-Инженерия» 2023

УДК 004.42
ББК 32.973
С62

Рецензенты:
зам. директора по развитию ИШИТР ТПУ, к. т. н., доцент, доцент ОИТ ИШИТР ТПУ Дёмин Антон Юрьевич;
к. т. н., доцент ОИТ ИШИТР ТПУ Погребной Александр Владимирович




     Сонькин, М. А.
С62 Микропроцессорные системы. Разработка программного обеспечения для микроконтроллеров семейства AVR / М. А. Сонькин, А. А. Шамин. - Москва ; Вологда : Инфра-Инженерия, 2023. - 96 с.: ил., табл.
          ISBN 978-5-9729-1211-7

          Изложены теоретические основы использования средств разработки программного обеспечения и особенности построения программного обеспечения встраиваемых систем на примере микроконтроллеров семейства AVR. Приведены примеры программных решений с целью их использования в практической работе. Применительно к микроконтроллерам семейства AVR, рассмотрены вопросы трансляции и кросс-трансляции программ, написанных на языках C/C++.
          Для студентов и аспирантов, обучающихся по направлениям «Прикладная математика и информатика», «Информатика и вычислительная техника», «Информационные системы и технологии», «Прикладная информатика», «Программная инженерия», «Автоматизация технологических процессов и производств», «Мехатроника и робототехника». Может быть полезно школьникам, углубленно изучающим информатику, робототехнику и посещающим соответствующие кружки.

УДК 004.42
ББК 32.973












ISBN 978-5-9729-1211-7

     © Сонькин М. А., Шамин А. А., 2023
     © Издательство «Инфра-Инженерия», 2023
                             © Оформление. Издательство «Инфра-Инженерия», 2023

ОГЛАВЛЕНИЕ

Введение.............................................................5

1. Микропроцессорные устройства (МПУ)................................7
2.  Программное обеспечение МПУ......................................9
3.  Назначение средств разработки программного обеспечения для микроконтроллеров...............................................10
4.  Архитектурамикроконтроллеров AVR............................... 11
   4.1. Выполнение машинных команд..................................14
   4.2. Выполнение команд ветвления и перехода......................15
   4.3. Выполнение команд вызова подпрограмм........................16
5.  Особенности разработки ПО для микроконтроллера..................19
6.  Средства разработки программного обеспечения....................20
   6.1. Компиляторы семейства GCC...................................20
   6.2. Организация проекта на языках С и C++.......................20
   6.3. Трансляция программы на языках С и C++......................23
   6.4. Утилита make................................................25
     6.4.1. Простейший сборочный скрипт.............................26
     6.4.2. Трансляция проекта по частям............................27
     6.4.3. Трансляция проекта под различные платформы..............29
7.  Распределениепамяти.............................................31
   7.1. Секции памяти...............................................34
   7.2. Начальная инициализация программы на языках С и C++.........44
   7.3. Инициализированные при создании и не инициализированные при создании переменные...........................................45
   7.4. Область видимости переменных................................47
   7.5. Пересечение областей видимости..............................49
   7.6. Модификатор static..........................................50
   7.7. Использование областей видимости............................52
   7.8. Модификатор volatile........................................52
   7.9. Размещение произвольных данных в памяти программ............54
8.  Проектирование программы для микроконтроллера...................58
   8.1. Программирование без использования операционной системы.....58
   8.2. Специализированные операционные системы.....................59
   8.3. Операционные системы общего назначения......................60
9.  Архитектура программы для микроконтроллера......................61
   9.1. Инициализация...............................................66
   9.2. Основной цикл...............................................67
   9.3. Модуль управления программными потоками.....................68
   9.4. Обработка прерываний........................................69
     9.4.1. Обработка прерываний на языках C и С++..................75
     9.4.2. Блокировка прерываний...................................75
     9.4.3. Приоритетная обработка прерываний.......................76
     9.4.4. Обработка повторных прерываний..........................79

3

   9.5. Драйвераустройств..........................................82
10. Обмен данными между МПУ........................................85
   10.1. Протокол обменаданными между МПУ..........................85
   10.2. Алгоритмы обработки пакетов данных........................88

Заключение.........................................................91

Список использованных источников...................................92

            ВВЕДЕНИЕ


    В настоящее время микроконтроллеры стали неотъемлемой частью нашей жизни: практически любое современное электронное устройство содержит их в качестве управляющего элемента.
    Стиральная машина, холодильник, телевизор, проигрыватель, часы, автомобили и даже некоторые лампочки, розетки и выключатели сейчас имеют в своём составе схемы управления, позволяющие повысить удобство их использования. Мы привыкли жить в мире «умных вещей» и уже не представляем себе, как без них обойтись.
    Сейчас уже никого не удивляет возможность с помощью смартфона или компьютера управлять практически из любой точки мира светом в своей квартире или с помощью видеокамеры посмотреть - всё ли дома в порядке. Так называемый «интернет вещей» постепенно проник в нашу жизнь и то, что вчера казалось фантастикой в считанные годы стало реальностью.
    Все это стало возможно благодаря стремительному развитию микроэлектроники, микропроцессорной техники и сетей связи, позволяющих передавать информацию из одной точки мира в другую.
    Неудивительно, что многие школьники, студенты и просто интересующиеся граждане стремятся больше узнать о микропроцессорной технике - кто-то просто из любопытства, а кто-то для того, чтобы реализовать какие-то свои идеи в виде электронных устройств.
    С целью дать людям образование в области микропроцессорной техники и электроники открыто множество соответствующих специальностей в ВУЗах и кружков для школьников, например таких как федеральная сеть детских технопарков «Кванториумы».
    Курс «Микропроцессорные системы» предусматривает освоение обучающимися современных аппаратных и программных средств разработки устройств и систем на базе микропроцессорного управления - той основы, на которой строятся «умные вещи» и «интернет вещей».
    Что такое микроконтроллер и в чём его отличия от микропроцессора? Рассмотрим некоторые распространённые определения этих терминов.
    Микропроцессор - интегральная микросхема, исполняющая машинные инструкции (код программ), главная часть аппаратного обеспечения компьютера или программируемого логического контроллера. В состав микропроцессора обычно не входит память программ и данных за исключение регистров.
    Микроконтроллер - он же однокристалльная микроэвм или ОЭВМ -это микросхема, предназначенная для управления электронными устрой

5

ствами. Типичный микроконтроллер сочетает на одном кристалле функции микропроцессора и периферийных устройств, содержит память программ и данных - ОЗУ и ПЗУ. По сути, это законченный компьютер, выполненный в виде одной микросхемы.
    На сегодня нет чёткой грани между определениями «микроконтроллер» и «микропроцессор», поэтому часто вместо слова «микроконтроллер» употребляют слово «микропроцессор» или даже просто жаргонное -«процессор».
    Номенклатура микроконтроллеров, выпускаемая на сегодня мировой промышленностью, просто огромна. Зачастую, разные фирмы выпускают очень схожие по характеристикам микроконтроллеры, отличающиеся, например, только процессорным ядром. Поэтому выбрать, на примере какого из микроконтроллеров показывать процесс разработки программного обеспечения и аппаратной части устройств - нетривиальная задача.
    В качестве наглядного пособия для изучения построения систем на микроконтроллерах и проектирования программного обеспечения микроконтроллеров нами были выбраны микроконтроллеры семейства AVR по следующим соображениям:
      • эти микроконтроллеры достаточно современны;
      • микроконтроллеры семейства AVR широко доступны;
      • их архитектура проста для изучения;
      • в сети Интернет доступно множество материалов по архитектуре AVR для тех, кто захочет углублённо изучить вопросы, недостаточно глубоко освещённые в данном пособии.
    Нами рассмотрены средства разработки и примеры организации программного обеспечения (ПО) для микропроцессорных устройств (МПУ) на базе микроконтроллеров на примере семейства AVR.
    Большая часть приведённых примеров без изменений или с незначительными изменениями переносится на уровне исходного кода в микроконтроллеры других семейств микроконтроллеров или на персональный компьютер.
    Практически весь теоретический материал применим при разработке систем и программного обеспечения для микроконтроллеров различных типов, а не только к семейству AVR.
    Пособие предполагает наличие начального опыта программирования на языках С и C++.
    В случае, если такого опыта нет, то можно обратиться к специализированной литературе по программированию на языках С и C++ [1, 2, 6, 13, 14].

            1. Микропроцессорные устройства (МПУ)


    Микропроцессорное устройство (МПУ) представляет собой функционально и конструктивно законченное изделие, состоящее из нескольких микросхем, в состав которых входит микропроцессор; оно предназначено для выполнения определённого набора функций: получение, обработка, передача, преобразование информации и управление.
    Часто МПУ содержит в своём составе либо средства для передачи данных по каналам связи, либо интерфейсы для подключения таких средств (например, модемов, оптоволоконных линий, спутниковых терминалов и проч.). Это позволяет включать МПУ в состав распределённой микропроцессорной системы (РМПС), в качестве одного из её элементов.
    С точки зрения возможности включения МПУ в РМПС можно выделить три возможных варианта:
     • полностью автономные МПУ. Такие МПУ не имеют в своём составе средств для передачи данных по каналам связи и интерфейсов для подключения таких средств;
     • автономные МПУ с возможностью включения их в состав РМПС. Такие МПУ являются функционально законченными устройствами и могут работать как автономно (вне состава РМПС), так и передавать данные по каналам связи. Отличительная особенность таких МПУ - наличие средств для передачи данных по каналам связи, либо интерфейсы для подключения таких средств;
     • МПУ, предназначенные исключительно для работы в составе РМПС. Такие МПУ предназначены исключительно для работы в составе РМПС и отдельно от РМПС не функционируют.
    Разумеется, приведённая классификация является достаточно условной. Но она позволяет оценить назначение и возможности того или иного устройства относительно включения его в состав РМПС, что важно при проектировании как аппаратной части МПУ, так и при разработке его программного обеспечения.
    Рассмотрим в качестве примера МПУ, измеряющее температуру окружающей среды (интеллектуальный термометр), построенное по каждому из трёх указанных вариантов.
    В первом варианте (полностью автономное МПУ) в состав такого интеллектуального термометра войдут датчик температуры, микроконтроллер, средства индикации и управления. Такое устройство явля

7

ется полностью законченным и его невозможно включить в состав РМПС.
    Второй вариант (автономное МПУ с возможностью включения их в состав РМПС) отличается от первого наличием аппаратуры передачи данных или какого-либо интерфейса для подключения такой аппаратуры. Например, это может быть интерфейс RS232, USB или встроенный WiFi-модуль. Разумеется, что помимо подключения аппаратуры передачи данных, необходимо обеспечить также её программную поддержку. Такое устройство может быть использовано как автономно (полностью аналогично первому варианту), так и включено в состав РМПС, например, в качестве удалённого датчика температуры.
    Третий вариант (МПУ, предназначенное исключительно для работы в составе РМПС) отличается от второго варианта отсутствием органов управления и индикации. То есть, в его состав входит только датчик температуры, микроконтроллер и аппаратура передачи данных или какой-либо интерфейс для подключения такой аппаратуры. Функционирование устройства, построенного по третьему варианту, невозможно вне РМПС.

            2.  Программное обеспечение МПУ


    Какое бы ни было МПУ, ему необходимо программное обеспечение. На современном этапе развития микропроцессорной техники, чаще всего разработка программного обеспечения занимает многократно больше времени, чем создание аппаратной части микропроцессорного устройства. Это объясняется многими причинами, главная из которых - возможность практически бесконечно совершенствовать программу, не изменяя аппаратной части устройства.
    Чтобы сократить время на разработку ПО необходимо:
      • однозначно поставить задачу для проектируемого ПО, т. е. составить техническое задание - ТЗ - на программное обеспечение, в котором описаны все функции ПО и поведение устройства в различных ситуациях. Чем подробнее и точнее составлено ТЗ, тем меньше вопросов возникает при реализации программного обеспечения МПУ;
      • хорошо представлять возможности современных средств разработки программного обеспечения. Неясное представление о возможностях средств разработки может привести к неверному их выбору или использованию не по назначению (помним, что молотком надо забивать гвозди, а шурупы закручивать отвёрткой -наоборот будет долго, неудобно и результат не гарантирован);
      • знать архитектурные особенности конкретного микроконтроллера, для которого разрабатывается ПО. Например, очень важно учитывать, какая у микроконтроллера архитектура - гарвардская или фон-неймоновская; принимать во внимание ограничения быстродействия, объёма памяти программ и памяти данных; учитывать какие функции можно реализовать программно, а какие с помощью периферийных устройств, встроенных в микроконтроллер и т. п.;
      • разработать архитектуру построения ПО в зависимости от типа микроконтроллера и поставленных задач. Неверно спроектированная архитектура вызывает множество трудно разрешимых проблем, поэтому необходимо ясно представлять преимущества и недостатки выбранной или разработанной программной архитектуры.

9

            3. Назначение средств разработки программного обеспечения для микроконтроллеров


    Средства разработки программного обеспечения условно можно подразделить на несколько видов по функциональному назначению.
    Средства преобразования исходного кода программ в исполняемый файл. К ним относятся компиляторы языков высокого уровня (ЯВУ); ассемблеры; утилиты преобразования форматов файлов; программы автоматизации процесса сборки программного кода, такие как make, cmake и проч. Самыми популярными языками высокого уровня для микроконтроллеров семейства AVR и им подобных являются языки С и C++. Это не значит, что не другие языки на микроконтроллерах не применяются. На AVR есть такие языки как Forth или Basic. Но наибольшее распространение получили именно языки С и C++. На сегодняшний день эти языки - основа программирования практически любого микроконтроллера, так как являются, с одной стороны, достаточно низкоуровневыми, чтобы можно было достигать быстродействия, близкого к коду на языке Ассемблер (или машинного кода). С другой стороны, на этих языках (особенно на С++) легко реализовать нужные высокоуровневые абстракции и использовать современные принципы объектно-ориентированного программирования.
    Средства отладки, к которым относятся специальные программы, позволяющие осуществлять пошаговый запуск программ, мониторинг значений переменных, организацию точек останова и т. п.
    Сервисные утилиты, являющиеся специальными программами, позволяющими, например, записывать исполняемые файлы в ПЗУ микроконтроллеров, программировать биты глобальной начальной конфигурации микроконтроллеров (FUSE-биты) и т. п.
    Существует так же несколько интегрированных сред разработки, позволяющих объединять указанные средства для их совместного использования. Эти среды представляют собой мощные средства разработки, включающие в себя редакторы программ с интеллектуальным анализом исходного кода, подсветкой синтаксиса, интегрированным компилятором, отладчиком и другими утилитами. В настоящем издании такие среды рассматриваться не будут, но с таким средами, как AVR Studio, Kdevelop и другими можно ознакомиться в соответствующей литературе и сети интернет.

10

            4. Архитектура микроконтроллеров AVR



    Микроконтроллеры с архитектурой AVR (рис. 1) выпускаются фирмой Atmel.

Flash Program Memory

Instruction Register

Instruction Decoder

Control Lines

Program Counter

and Control

Comparator

I/O Module 1

I/O Module 2

I/O Module n

• Lf

General
Purpose Registrars

Watchdog

Рис. 1. Общая архитектура микроконтроллеров семейства AVR


    В настоящем пособии приводится ознакомительное описание архитектуры. Более подробное описание архитектуры и системы команд микроконтроллеров семейства AVR можно получить в специальной литературе, например в[1,2, 14]. В тексте, кроме русскоязычных названий приводятся также англоязычные, как в оригинальной документации на микроконтроллеры семейства AVR.
    Микроконтроллеры AVR имеют расширенную гарвардскую архитектуру. Это означает, что программа и данные находятся в разных адресных пространствах.

11

    Память программ, Program Flash Memory, выполненная в виде энергонезависимого постоянного запоминающего устройства (ПЗУ по технологии FLASH) доступна только для чтения специальными машинными командами.
    Память данных, Data SRAM, выполненная в виде энергозависимого оперативного запоминающего устройства (ОЗУ) доступно как для чтения, так и для записи.
    Абсолютное большинство команд процессора работает с регистрами или памятью данных. Система команд ядра AVR, близка к идеологии RISC, то есть представляет собой относительно небольшое число быстрых и коротких простых команд.
    Процессор AVR имеет 32 8-битных регистра общего назначения (РОН или General purpose registers - GPR), объединённых в регистровый файл. Регистры обозначаются как R0-R31.
    В отличие от «идеального» RISC-ядра, регистры не равнозначны между собой (см. рис. 2). Некоторые машинные команды пересылки, арифметических и логических операций (ANDI/CBR, ORI/SBR, CPI, LDI, LDS, STS, SUBI, SBCI, SER и MULS) работают только с регистрами R16...R31.
    Четыре последние пары регистров (R24-R31) могут использоваться попарно для операций с 16-битными числами.














          X-register Low Byte X-register High Byte Y-register Low Byte Y-register High Byte Z-register Low Byte Z-register High Byte


Рис. 2. Карта регистров микроконтроллеров серии AVR


12