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

Программирование встроенных систем на С++ 17

Покупка
Артикул: 739795.01.99
Доступ онлайн
999 ₽
В корзину
Из этой книги вы узнаете, как создавать автономные и сетевые встроенные системы, обеспечивать их безопасность и рациональное использование памяти. Язык программирования C++ расширяет возможности сопровождения и обладает многочисленными преимуществами по сравнению с другими языками программирования, поэтому прекрасно подходит для такой разработки. В книге описывается методика создания удобных графических интерфейсов пользователя (GUI) для встроенных систем, а также методы интеграции проверенных стратегий в конкретные проекты для достижения оптимальной производительности аппаратуры. Рассмотрены разнообразные аппаратные платформы - у вас есть возможность выбрать наилучший вариант для своего проекта. Издание будет полезно архитекторам встроенных систем и опытным разработчикам на C++.
Пош, М. Программирование встроенных систем на С++ 17 : монография / М. Пош ; пер. с анг. А. В. Снастина. - Москва : ДМК Пресс, 2020. - 394 с. - ISBN 978-5-97060-785-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/1094950 (дата обращения: 29.03.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Майа Пош

Программирование  
встроенных систем на C++17

Hands-On Embedded 
Programming with C++17

Create versatile and robust embedded solutions  
for MCUs and RTOSes with modern C++

Maya Posch

 
B I R M I N G H A M  –  M U M B A I

Программирование  
встроенных систем на C++17

Создание универсальных и надежных встроенных  
решений для микроконтроллеров и операционных  
систем реального времени на современной версии  
языка программирования C++

Майа Пош

        Москва, 2020

УДК 004.4
ББК 32.973.202
П66

Пош М.
П66 
Программирование встроенных систем на C++17 / пер. с анг. А. В. Снастина. – М.: ДМК Пресс, 2020. – 394 с.: ил. 

ISBN 978-5-97060-785-5

Из этой книги вы узнаете, как создавать автономные и сетевые встроенные системы, обеспечивать их безопасность и рациональное использование памяти. Язык 
программирования C++ расширяет возможности сопровождения и обладает многочисленными преимуществами по сравнению с другими языками программирования, 
поэтому прекрасно подходит для такой разработки.
В книге описывается методика создания удобных графических интерфейсов 
пользователя (GUI) для встроенных систем, а также методы интеграции проверенных 
стратегий в конкретные проекты для достижения оптимальной производительности 
аппаратуры. Рассмотрены разнообразные аппаратные платформы – у вас есть возможность выбрать наилучший вариант для своего проекта.
Издание будет полезно архитекторам встроенных систем и опытным разработчикам на С++.

УДК 004.4
ББК 32.973.202

Original English language edition published by Packt Publishing Ltd., UK. Copyright © 2019 Packt 
Publishing. Russian-language edition copyright © 2020 by DMK Press. All rights reserved.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой 
бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

ISBN 978-1-78862-930-0 (анг.) 
 Copyright © 2019 Packt Publishing
ISBN 978-5-97060-785-5 (рус.) 
© Оформление, издание, перевод, ДМК Пресс, 2020

Содержание

Об авторе ................................................................................................................10

О рецензентах ......................................................................................................11

Предисловие .........................................................................................................12

Часть I. ОСНОВЫ ПРОГРАММИРОВАНИЯ ВСТРОЕННЫХ  
СИСТЕМ И РОЛЬ C++ ......................................................................................17

Глава 1. Что такое встроенные системы ....................................................18
Разнообразие встраиваемых систем ........................................................................18
Микроконтроллеры ...................................................................................................20
TMS 1000 .................................................................................................................20
Intel MCS-48 ...........................................................................................................22
Intel MCS-51 ...........................................................................................................24
PIC ...........................................................................................................................27
AVR ..........................................................................................................................33
M68k и микроконтроллеры на основе Z80 ...........................................................38
ARM Cortex-M .........................................................................................................38
H8 (SuperH) .............................................................................................................39
ESP8266/ESP32 .......................................................................................................39
Другие микроконтроллеры ...................................................................................41
Особенности...........................................................................................................42
Одноплатный компьютер, или система на кристалле ............................................42
Особенности...........................................................................................................43
Резюме ........................................................................................................................44

Глава 2. C++ как язык программирования встроенных систем .......45
Связь C++ с C ..............................................................................................................45
C++ как язык программирования встроенных систем ...........................................47
Функциональные возможности языка C++ ..............................................................50
Пространства имен ................................................................................................50
Строгая типизация ................................................................................................51
Преобразование типов ..........................................................................................52
Классы ....................................................................................................................52
Наследование .........................................................................................................55
Виртуальные базовые классы ...............................................................................56
Встроенные функции ............................................................................................57
Информация о типах во время выполнения .......................................................58
Обработка исключений .........................................................................................58

 Содержание

Шаблоны .................................................................................................................58
Стандартная библиотека шаблонов .........................................................................59
Удобство сопровождения ..........................................................................................59
Резюме ........................................................................................................................60

Глава 3. Разработка для встроенной ОС Linux и подобных  
систем .......................................................................................................................61

Встроенные операционные системы .......................................................................61
Операционные системы реального времени ..........................................................64
Специализированные периферийные устройства и драйверы .............................65
Добавление часов реального времени .................................................................65
Специализированные драйверы ..........................................................................67
Ограничение ресурсов ..............................................................................................68
Пример: мониторинг клубного зала ........................................................................69
Аппаратные устройства ........................................................................................69
Реализация .............................................................................................................77
Конфигурация сервиса ........................................................................................101
Права доступа ......................................................................................................102
Окончательные результаты ................................................................................102
Пример: простой медиа-плеер ...............................................................................103
Резюме ......................................................................................................................105

Глава 4. Встроенные системы с ограниченными ресурсами ...........106

Общий обзор применения малых систем ..............................................................106
Пример: устройство управления лазерным резаком ........................................108
Функциональная спецификация ........................................................................110
Проектные требования .......................................................................................111
Варианты выбора реализации ............................................................................112
Интегрированные среды разработки и рабочие среды для встроенных  
систем .......................................................................................................................118
Программирование микроконтроллеров ..............................................................119
Программирование памяти и отладка устройства ...........................................120
Загрузчик..............................................................................................................124
Управление памятью ...............................................................................................124
Стек и динамически распределяемая память ...................................................126
Прерывания, ESP8266 IRAM_ATTR......................................................................127
Параллельный режим выполнения ........................................................................129
Разработка для AVR с использованием Nodate ......................................................130
Вводная информация о Nodate ...........................................................................131
Пример: инструмент тестирования интегральной микросхемы CMOS ..........132
Практическое использование .............................................................................137
Разработка для ESP8266 с использованием Sming ................................................141
Разработка для микроконтроллеров ARM .............................................................142
Использование операционной системы реального времени ...............................142
Резюме ......................................................................................................................143

Содержание  7

Глава 5. Пример: монитор влажности почвы  
с использованием протокола Wi-Fi ...........................................................145
Уход за растениями .................................................................................................145
Предлагаемое решение ...........................................................................................147
Аппаратура ...............................................................................................................148
Специализированное программное обеспечение ................................................152
Настройка рабочей среды Sming ........................................................................152
Код модуля для растения (plant) .........................................................................154
Компиляция и запись в ПЗУ ...............................................................................182
Первоначальное конфигурирование .................................................................183
Использование системы .....................................................................................184
Дальнейшие действия .............................................................................................184
Сложности ................................................................................................................185
Резюме ......................................................................................................................185

Часть II. ТЕСТИРОВАНИЕ, МОНИТОРИНГ .........................................186

Глава 6. Тестирование приложений, предназначенных  
для конкретных ОС ..........................................................................................187
Почему следует избегать разработки на реальной аппаратуре ...........................187
Кросс-компиляция для одноплатных компьютеров .............................................189
Комплексный тест для сервиса управления состоянием клубного  
помещения ...............................................................................................................190
Имитация или реальная аппаратура ..................................................................198
Тестирование с использованием Valgrind ..............................................................200
Многоцелевая система сборки ...............................................................................201
Удаленное тестирование на реальной аппаратуре ...............................................210
Резюме ......................................................................................................................212

Глава 7. Тестирование платформ с ограниченными ресурсами .....213
Снижение степени износа оборудования ..............................................................213
Планирование проектного решения ......................................................................214
Системы сборки, независимые от платформы ......................................................215
Использование кросс-компиляторов .....................................................................216
Локальная отладка и отладка на микросхеме ........................................................216
Пример: комплексный тест ESP8266 ......................................................................217
Сервер ...................................................................................................................218
Узел .......................................................................................................................239
Сборка проекта ....................................................................................................265
Резюме ......................................................................................................................266

Глава 8. Пример: информационно-развлекательная система  
на основе ОС Linux ...........................................................................................268
Одно устройство выполняет все задачи .................................................................268
Необходимая аппаратура ........................................................................................269

 Содержание

Требования к программному обеспечению ..........................................................270
Bluetooth-источники и приемники аудио .............................................................271
Организация потока в режиме онлайн ..................................................................272
Управляемый голосом пользовательский интерфейс ..........................................273
Использование сценариев ......................................................................................273
Исходный код ...........................................................................................................274
Сборка проекта ........................................................................................................282
Расширение системы ..............................................................................................283
Резюме ......................................................................................................................284

Глава 9. Пример: мониторинг и управление внутренним  
микроклиматом в здании ..............................................................................285

Растения, помещения и прочее ..............................................................................285
История разработки ................................................................................................286
Функциональные модули ........................................................................................288
Исходный код специализированного ПО ..............................................................288
Ядро ......................................................................................................................288
Модули ..................................................................................................................289
Сервер управления и контроля ...............................................................................318
Инструментальное средство администрирования ...............................................329
Система кондиционирования воздуха ..................................................................329
База данных InfluxDB для записи показаний датчиков ........................................332
Вопросы обеспечения безопасности ......................................................................334
Дальнейшие разработки .........................................................................................335
Резюме ......................................................................................................................335

Часть III. ИНТЕГРАЦИЯ С ДРУГИМИ  
ИНСТРУМЕНТАЛЬНЫМИ СРЕДСТВАМИ  
И РАБОЧИМИ СРЕДАМИ ...........................................................................337

Глава 10. Разработка встроенных систем с использованием Qt ...338

Главное преимущество правильно выбранной рабочей среды ...........................338
Использование Qt для приложений с интерфейсом командной строки .............339
Приложения с использованием графического пользовательского  
интерфейса Qt ..........................................................................................................341
Qt для встроенных систем ......................................................................................344
Графические пользовательские интерфейсы с использованием таблиц  
стилей .......................................................................................................................345
QML ...........................................................................................................................345
3D Designer ...............................................................................................................345
Пример добавления графического пользовательского интерфейса   
в информационно-развлекательную систему .......................................................346
Основной файл исходного кода (main) ..............................................................347
QmlInterface .........................................................................................................347
Резюме ......................................................................................................................364

Содержание  9

Глава 11. Разработка для гибридных систем SoC/FPGA ...................365
Организация исключительно параллельного выполнения ..................................365
Языки описания аппаратуры ..................................................................................367
Архитектура ППВМ ..................................................................................................368
Гибридные микросхемы FPGA/SoC ........................................................................368
Пример: простой осциллограф ...............................................................................369
Аппаратура ...........................................................................................................370
Код VHDL ..............................................................................................................371
Код C++ .................................................................................................................376
Сборка проекта ........................................................................................................379
Резюме ......................................................................................................................379

Приложение А. Эффективные практические методики ....................380
Тщательно продуманные планы ............................................................................380
Работа с аппаратурой ..............................................................................................381
Огромный мир периферийных устройств .............................................................381
Изучайте свои инструментальные средства ..........................................................382
Выбор асинхронных методов .................................................................................382
Изучение спецификаций ........................................................................................383
Обеспечение краткости обработчиков прерываний .............................................383
8 бит означает 8 бит .................................................................................................383
Не следует заново изобретать колесо .....................................................................384
Подумайте, прежде чем начать оптимизацию ......................................................384
Требования – это основа, а не дополнение ............................................................384
Документация жизненно важна .............................................................................385
Тестирование кода означает попытку нарушить его выполнение ......................386
Резюме ......................................................................................................................386

Предметный указатель ...................................................................................387

Об авторе

Майа Пош (Maya Posch) – ведущий разработчик на языке C++, обладающий более 
чем 15-летним опытом практической работы. Открыв для себя сначала столь увлекательную область деятельности, как программирование, а немного позже не 
менее увлекательную электронику, Майа всегда проявляла живой интерес к технологиям и охотно разделяла свое страстное увлечение с другими.
Сама Майа называет себя разработчиком на языке C, который со временем 
увлекся языками C++ и Ada. Ей нравится работать в условиях, ограничивающих 
объем программного кода и возможности аппаратуры до минимума, и создавать 
в этих условиях новые, эффективные и удобные системы.
Майа также активно интересуется разработками с использованием программируемых пользователем вентильных матриц (ППВМ – FPGA), разработками 
в области искусственного интеллекта и исследованиями в сфере робототехники, 
а кроме того, обладает талантами литератора, музыканта и живописца.

О рецензентах

Франс Фаазе (Frans Faase) изучал информационные технологии в университете 
Твенте (Нидерланды) и получил степень магистра в области проектирования компиляторов и формальных методов. Принимал участие в нескольких научных исследовательских проектах, но в основном работал как инженер по программному 
обеспечению в промышленной сфере. Франс обладает почти 20-летним опытом 
практического использования C++ как профессиональный разработчик и исследователь, а кроме того, C++ – это его хобби. Франс принимал активное участие 
в нескольких проектах с открытым исходным кодом. В последнее время он также 
приобрел некоторый практический опыт разработки ПО для микроконтроллеров, 
в основном с использованием среды Arduino. 
Патрик Минтрэм (Patrick Mintram) – инженер по программному обеспечению, 
который начинал профессиональную карьеру как техник по электронному оборудованию. В течение длительного времени работал со встроенными системами, 
в том числе занимался разработкой и тестированием в средах с повышенными 
требованиями к безопасности, а также линейным сопровождением и восстановлением систем. Женат, имеет двух кошек Дьюка и Дэзи, в свободное время – «домашний мастер на все руки» и бег трусцой.

Предисловие

Язык программирования C++ не добавляет никаких излишеств, расширяет возможности сопровождения и предлагает многочисленные преимущества над прочими языками программирования, следовательно, представляет собой удачный 
выбор для разработки встроенных систем. Если вам необходимо создавать автономные или сетевые встроенные системы, обеспечивать их безопасность и рациональное использование памяти, то из этой книги вы точно узнаете, как это делается. Также вы узнаете, как работает C++, будет проведено сравнение с другими 
языками, используемыми для разработки встроенных систем. Кроме того, описывается методика создания удобных графических интерфейсов пользователя (GUI) 
для встроенных систем, проектирование привлекательных и функциональных 
пользовательских интерфейсов, а также методы интеграции проверенных стратегий в конкретные проекты для достижения оптимальной производительности 
аппаратуры.
В предлагаемой книге подробно рассматриваются разнообразные аппаратные 
платформы для встроенных систем, поэтому вы получаете возможность выбрать 
наилучший вариант для своего конкретного проекта. Вы научитесь решать сложные архитектурные задачи после внимательного изучения всех тщательно проработанных программных шаблонов, представленных в этой книге.

Для кого преДназначена эта книга

Если вы начинающий разработчик программ на C++ для встроенных систем, то 
эта книга предназначена для вас. Для полного понимания всех тем книги требуется хорошее знание конструкций языка C++. Какие-либо предварительные знания 
в области встроенных систем не требуются.

краткое соДержание книги

Глава 1 «Что такое встроенные системы» знакомит читателя со встроенными системами в целом. Обзор разнообразных категорий и примеров встроенных систем дает общее представление о том, что означает термин «встроенный», а также о разнообразии значений этого термина. Рассматриваются многочисленные 
ранние и современные доступные модели микроконтроллеров и решения систем 
на одном чипе (на одной плате), которые вы можете обнаружить в существующих 
системах, а также новые проектные решения.
Глава 2 «C++ как язык программирования встроенных систем» объясняет, почему C++ так же хорош, как C и другие подобные языки. Вообще говоря, C++ не 
только так же быстр, как C, но еще и не содержит каких-либо излишеств и предлагает многочисленные преимущества, связанные с парадигмами кодирования 
и удобством сопровождения.

Краткое содержание книги  13

В главе 3 «Разработка для встроенной ОС Linux и подобных систем» рассматриваются методы разработки для встроенных систем на основе ОС Linux и родственных систем на одноплатных компьютерах с учетом различий между разработкой для Linux-подобных систем и систем, основанных на PC.
В главе 4 «Встроенные системы с ограниченными ресурсами» обсуждается 
планирование эффективного использования ограниченных ресурсов. Основное 
внимание уделяется правильному выбору микроконтроллера для нового проекта, добавлению периферийных устройств и определению требований к Ethernetинтерфейсам и последовательному интерфейсу в проекте. Также рассматривается пример проекта с использованием микроконтроллера AVR, методы разработки 
для других архитектур микроконтроллеров и возможности использования операционной системы реального времени.
В главе 5 «Пример: монитор влажности почвы с использованием протокола 
Wi-Fi» описывается процесс создания системы наблюдения за влажностью почвы 
с применением протокола беспроводной связи Wi-Fi с дополнительными возможностями управления приводом водяного насоса или аналогичного механизма. При наличии встроенного веб-сервера можно воспользоваться его пользовательским интерфейсом на основе браузера для наблюдения и управления или же 
интегрировать веб-сервер в более крупную систему, применив REST API.
В главе 6 «Тестирование приложений, предназначенных для конкретных ОС» 
демонстрируются методы разработки и тестирования приложений, предназначенных для встроенных операционных систем. Вы узнаете, как установить и использовать рабочую среду и конвейер инструментов для кросс-компиляции, как 
выполнять отладку в удаленном режиме с помощью отладчика GDB, как описать 
процедуру сборки системы.
В главе 7 «Тестирование платформ с ограниченными ресурсами» рассматриваются методы эффективной разработки для конкретных целевых микроконтроллеров. Также демонстрируется реализация интегрированной среды, позволяющей 
отлаживать приложения для микроконтроллеров со всеми удобствами, присущими 
настольной ОС, и с предоставляемым ею комплектом инструментальных средств.
В главе 8 «Пример: информационно-развлекательная система на основе ОС 
Linux» демонстрируется возможность относительно простого процесса создания информационно-развлекательной системы на одноплатном компьютере 
с использованием механизма преобразования голоса в текст для формирования 
пользовательского интерфейса, управляемого голосом. Также описаны возможности расширения системы с добавлением функциональности.
В главе 9 «Пример: мониторинг и управление микроклиматом в здании» рассматривается процесс разработки системы мониторинга и управления климатическими условиями внутри здания, отдельные компоненты этой системы, а также 
уроки, извлеченные во время разработки.
Глава 10 «Разработка встроенных систем с использованием библиотеки Qt» содержит описание многочисленных способов применения библиотеки и рабочей 
среды Qt для разработки встроенных систем. Выполняется сравнение с другими 
рабочими средами, рассматривается оптимизация Qt для встроенных платформ, 
а также пример использования предварительно разработанного графического 
пользовательского интерфейса на основе QML, который можно добавить в ранее 
созданную информационно-развлекательную систему.

 Предисловие

В главе 11 «Разработка для гибридных систем SoC/FPGA» рассматривается организация обмена информацией на стороне программируемой пользователем вентильной матрицы (FPGA) в гибридной системе FPGA/SoC. Это помогает читателю 
понять разнообразные методы реализации алгоритмов в FPGA и применение их 
на стороне системы на кристалле (SoC). Также описана реализация простого осциллографа на основе гибридной системы FPGA/SoC.
В приложении А «Эффективные практические методики» кратко описан ряд 
проблем и затруднений, наиболее часто возникающих в процессе проектирования ПО для встроенных систем.

МаксиМально эффективное использование книги

Требуется практический опыт работы с семейством одноплатных компьютеров 
Raspberry Pi. Необходим компилятор C++, комплект инструментальных средств 
для организации (кросс)конвейера GCC ARM Linux, полный набор инструментальных средств AVR, рабочие среды Sming, Valgrind и Qt, а также интегрированная 
среда разработки (IDE) Lattice Diamond.

получение файлов исхоДного коДа приМеров

Файлы исходного кода примеров из этой книги можно загрузить из вашей учетной записи на сайте www.packtpub.com. Если вы приобрели книгу в другом месте, 
то можно посетить страницу поддержки www.packtpub.com/support и зарегистрироваться, чтобы получить эти файлы по электронной почте. Загрузка файлов исходного кода примеров выполняется следующим образом:
1. Войти/зарегистрироваться на сайт/сайте www.packtpub.com.
2. Перейти на закладку SUPPORT.
3. Щелкнуть по пункту Code Downloads & Errata.
4.  Ввести название книги в панели ввода Search, далее выполнять выводимые 
на экран инструкции.
После загрузки файла архива необходимо распаковать его, чтобы извлечь содержимое, используя самые свежие версии программ-упаковщиков:
 
 WinRAR/7-Zip для Windows;
 
 Zipeg/iZip/UnRarX для Mac;
 
 7-Zip/PeaZip для Linux.
Комплект примеров исходного кода  для этой книги размещен в репозитории 
GitHub 
https://github.com/PacktPublishing/Hands-On-Embedded-Programming-withCPP-17. При любых изменениях в коде немедленно обновляются соответствующие файлы в существующем репозитории GitHub.
Кроме того, вы можете получить другие комплекты исходного кода из нашего 
обширного каталога книг и видеоматериалов по адресу https:/ / github. com/ PacktPublishing/. Рекомендуем регулярно проверять его содержимое.

Отзывы и пожелания  15

типографские соглашения, принятые в книге

В этой книге используется несколько стилей выделения некоторых элементов 
текста.
Фрагмент кода в тексте – ключевые слова, операторы, имена переменных и функций непосредственно в тексте. Пример: «Сам класс языка C++ реализован в языке C как структура  struct, содержащая переменные этого класса».
Фрагмент кода отображается в следующем формате:

class B : public A {
   // Закрытые члены класса
public:
   // Дополнительные открытые члены класса
};

При необходимости привлечь внимание читателя к некоторой части фрагмента кода соответствующие строки или элементы строк выделяются полужирным 
шрифтом:

class B : public A {
   // Закрытые члены класса
public:
   // Дополнительные открытые члены класса
};

Ввод или вывод в командной строке отображается следующим образом:

sudo usermod -a -G gpio user
sudo usermod -a -G i2c user

Курсив – имена файлов, каталогов и прочих объектов.
Полужирный шрифт – важные (ключевые) слова, элементы пользовательского интерфейса или слова, которые выводятся на экран. Например, пункты меню 
или элементы диалоговых окон.

 Этим значком обозначаются предупреждения или важные замечания.

 Этим значком обозначаются советы, подсказки и полезные практические приемы.

отзывы и пожелания

Мы всегда рады отзывам наших читателей. Расскажите нам, что вы думаете об 
этой книге – что понравилось или, может быть, не понравилось. Отзывы важны 
для нас, чтобы выпускать книги, которые будут для вас максимально полезны.
Вы можете написать отзыв прямо на нашем сайте www.dmkpress.com, зайдя на 
страницу книги, и оставить комментарий в разделе «Отзывы и рецензии». Также 
можно послать письмо главному редактору по адресу dmkpress@gmail.com, при 
этом напишите название книги в теме письма. 

Доступ онлайн
999 ₽
В корзину