Программирование встроенных систем на С++ 17
Покупка
Тематика:
Программирование на C и C++
Издательство:
ДМК Пресс
Автор:
Пош Майа
Перевод:
Снастина А. В.
Год издания: 2020
Кол-во страниц: 394
Дополнительно
Вид издания:
Монография
Уровень образования:
ВО - Магистратура
ISBN: 978-5-97060-785-5
Артикул: 739795.01.99
Доступ онлайн
В корзину
Из этой книги вы узнаете, как создавать автономные и сетевые встроенные системы, обеспечивать их безопасность и рациональное использование памяти. Язык программирования C++ расширяет возможности сопровождения и обладает многочисленными преимуществами по сравнению с другими языками программирования, поэтому прекрасно подходит для такой разработки. В книге описывается методика создания удобных графических интерфейсов пользователя (GUI) для встроенных систем, а также методы интеграции проверенных стратегий в конкретные проекты для достижения оптимальной производительности аппаратуры. Рассмотрены разнообразные аппаратные платформы - у вас есть возможность выбрать наилучший вариант для своего проекта.
Издание будет полезно архитекторам встроенных систем и опытным разработчикам на C++.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Магистратура
- 09.04.01: Информатика и вычислительная техника
- 09.04.02: Информационные системы и технологии
- 09.04.03: Прикладная информатика
- 09.04.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Майа Пош Программирование встроенных систем на 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, при этом напишите название книги в теме письма.
Доступ онлайн
В корзину