«Создание встраиваемых систем». Обзор книги. embedded.. embedded. stm32.. embedded. stm32. Блог компании Издательство БХВ.. embedded. stm32. Блог компании Издательство БХВ. книги.. embedded. stm32. Блог компании Издательство БХВ. книги. Программирование.. embedded. stm32. Блог компании Издательство БХВ. книги. Программирование. Программирование микроконтроллеров.. embedded. stm32. Блог компании Издательство БХВ. книги. Программирование. Программирование микроконтроллеров. прошивка.. embedded. stm32. Блог компании Издательство БХВ. книги. Программирование. Программирование микроконтроллеров. прошивка. Системное программирование.. embedded. stm32. Блог компании Издательство БХВ. книги. Программирование. Программирование микроконтроллеров. прошивка. Системное программирование. Электроника.

Как только я узнал, что книга Making Embedded Systems 2nd Edition (русская версия: «Создание встраиваемых систем. Паттерны проектирования отличных программ. 2-е издание») доступна для предзаказа, я не раздумывая отправился на Amazon и раскошелился за неё.

Некоторое время я занимался самообучением в различных областях, связанных с электроникой и разработкой встраиваемых систем, но в совершенно произвольном и никак не организованном ритме.

Рассчитывал, что эта книга даст мне хороший каркас, на базе которого можно будет формализовать мой рост и обучение.

Я сразу примерно представлял, о чём будет книга, и полагал, что сначала научусь с её помощью настраивать среду разработки для различных микроконтроллеров класса STM32, а потом, отталкиваясь от материала книги, смогу перейти в любую область разработки, которая к тому времени будет меня больше всего интересовать.

Просмотрев на сайте O’Reilly предметный указатель и выложенные для просмотра главы, я обнаружил, что такой «конфигурационной» главы в книге нет. Также в предисловии прямо рекомендовалось не прыгать по книге от главы к главе, а проработать её всю по порядку.

Что меня немного напугало… неужели автор читает мои мысли? Ладно. Дождусь, пока книга придёт, и сделаю, как тут сказано. Тем временем я сам установил среду разработки STM32CubeIDE. Оказалось, что это очень неплохая штука, и к тому же совсем не сложная.

Я бесконечно благодарен автору за то, что потратила много месяцев своей жизни, чтобы написать эту книгу, казалось бы, специально для меня. :)

Ниже я расскажу вам об определённых моментах из каждой главы, которые показались мне особенно удачными или просто заинтересовали меня в моём путешествии по страницам этой книги.

Ключевые моменты

Глава первая — приятное и лёгкое введение во встраиваемые системы. Здесь рассказано о компиляции, отладке, изложены соображения, связанные с ресурсами, а также описано, чем кустарный прототип отличается от продукта. Мне понравились вопросы для самопроверки, как в конце этой главы, так и после всех других. Но о них я ничего не буду рассказывать, поскольку из-за этого могу повлиять на то, как ответите на них вы. Поэтому оставлю их вам для самостоятельного ознакомления.

«Создание встраиваемых систем». Обзор книги - 1

Во второй главе рассказано, как вычерчивать схемы для планирования систем. Сначала я приуныл. Ведь мне всего-то и требовалось, что подключиться к нескольким периферийным устройствам. Когда же мы дойдём до сути? То есть, я же знаю, чего хочу от создаваемой системы, и вполне представляю, как она должна быть скомпонована. В самом ли деле мне нужно читать весь этот материал?

Но потом я вспомнил, что дал себе слово прорабатывать всё по порядку и следовать советам, которые встречу по пути. Так что я взялся рисовать прямоугольники и проводить чёрточки между ними… и знаете… это оказалось сложно. Мне действительно приходилось приостанавливаться и продумывать, как именно лучше всё это расположить, задуматься о ресурсах, взвесить все «за» и «против».

Это необычайно помогло. Всё стало само собой становиться на места, я начал осознавать, что, вбрасывая в конфигурацию различные подсистемы, я сильно рискую запутаться в спагетти.

«Создание встраиваемых систем». Обзор книги - 2

Глава третья — это ознакомление с искусством чтения даташитов. Но…даташит по трицератопсу? Нельзя ли рассмотреть какой-нибудь реальный пример или хотя бы более знакомый, например, конкретный компонент?

Я как будто снова наступаю на знакомые грабли, вам не кажется? Меня вдруг осенило, что многие незнакомые компоненты на первый взгляд могут выглядеть как чёрный ящик. Допустим, если справа от меня будет лежать даташит по какому-то дисплею на основе SPI, а  слева — по трицератопсу, то я не буду понимать один из них значительно лучше другого.

Так почему бы не объяснить при помощи даташита, как устроен динозавр? Или кирпич, или вообще что угодно.

Далее приводятся дельные мысли о том, чем отличается планирование программного проекта от аппаратного, как читать принципиальные схемы, где брать хорошую документацию, качественные инструменты, и как всё это тестировать.  

В четвёртой главе некоторое внимание уделено побитовым операциям. Притом, что ранее я уже пользовался ими, мне никогда не удавалось полностью понять, почему некоторые разработчики задействуют их так активно, предпочитая более ясному синтаксису. Но мне в самом деле понравилось, как просто и ясно были объяснены приведённые здесь примеры.

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

Шестая глава знакомит нас с конечными автоматами. Очень интересно читается. Ранее я пользовался конечными автоматами при разработке игр, так как это наиболее естественный способ наделять интеллектом виртуальных врагов. Не знаю, есть ли название у этого паттерна.

Поначалу показалось, что пример со светофорами и дорожным движением прост, но оказалось, что там нужно учесть много аспектов, как с точки зрения планирования потоков, так и для упрощения компонентов.

«Создание встраиваемых систем». Обзор книги - 3

В седьмой главе мы наконец-то добираемся до периферии, ура! Там рассматриваются I2C, SPI и всевозможные разновидности последовательных интерфейсов.

С другой стороны, здесь ничего не сказано о том, как именно использовать протоколы. Впрочем, это и не суть книги. Поскольку у меня уже был опыт работы со многими нужными протоколами, эта глава помогла мне закрепить материал о доступности многих протоколов последовательной передачи и о различиях между ними. Я узнал, в чём их сильные стороны и ограничения, а также какие вещи при работе с ними должен учитывать инженер.

Тема о DMA и буферах мне также понравилась и вновь подтвердила, что в моём самообучении я на правильном пути.

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

Определённо, вы будете снова и снова возвращаться к этой главе, чтобы попробовать тем или иным способом решить возникающие проблемы. Работая с реальным проектом, действительно важно самому покопаться в проблемах и проверить, как именно компилятор реагирует на ту или иную ситуацию.

«Создание встраиваемых систем». Обзор книги - 4

Одиннадцатая глава — одна из моих любимых. В ней рассказано о ресурсах оперативной памяти, пространстве кода и процессорном времени, причём, все эти темы противопоставляются друг другу с учётом того, каковы их сильные и слабые стороны в различных сценариях. Какой ресурс наиболее важен в каждой практической ситуации?

Так, цепочки функций могут давать повышенный расход оперативной памяти ради большей удобочитаемости и лёгкости поддержки кода.

Объяснены map-файлы — с которыми ранее мне не приходилось иметь дела. Они помогают понять, как именно дробится исполняемый файл: где находится библиотечное пространство, как именно хранятся функции и переменные. При помощи этого инструмента можно не только выявить всевозможные проблемы, но и значительно оптимизировать использование ресурсов.

Рассмотрено, как можно накладывать регистры на переменные ради повышения скорости работы и уменьшения глубины цепочек функций.

Мне понравился раздел о профилировании кода и выводе линий GPIO на осциллограф, который служит визуальным индикатором и позволяет судить, сколько времени уходит на выполнение функции или участка кода. Тайминг сравнивается при использовании разных паттернов и приёмов программирования.

Двенадцатая глава… ох. Там математика. Как визит к стоматологу — не хочется, но надо. Удивительно, как много, оказывается, забываешь, если не пользуешься (математикой) постоянно. Честно скажу: с этой главой я с трудом разобрался. В большинстве других глав было множество спонтанных озарений, но не в этой.

В особенности меня заинтересовала тема «фиктивных чисел с плавающей точкой». О чём-то таком мне ранее доводилось задумываться. Поэтому приятно было убедиться, что в этой книге тема исследована во всех подробностях. Ещё одна отличная тема — объяснение того, почему так дорого обходится деление на ЦП, а также разбор имеющихся альтернативных приёмов.

Эту главу я пока не дочитал, но, чтобы в полной мере понять весь её материал, приходится постоянно возвращаться к началу и медленно прорабатывать каждую тему.

Тринадцатая глава — настоящее расслабление после двенадцатой. Здесь рассказывается об энергопотреблении (и о способах его снизить), а также как его измерять. Кроме того, здесь рассказано: разработке под низкое напряжение, отключении тех вещей, которые не являются необходимым, замедлении, спящем режиме и о сторожевых таймерах. Спящий режим — такое мы любим.

Четырнадцатая глава — заключительная, и там рассматриваются различные виды двигателей, с которыми вам, возможно, придётся иметь дело в электронике. Хорошая обзорная глава и хорошая завершающая тема. Очень интересно программировать светодиоды, чтобы они мигали, а также наблюдать, как именно ваша работа воплощается в реальном мире, и именно этим разработка встраиваемых систем приятно отличается, скажем, от веб-разработки или мобильной разработки.

Изучая безопасную работу с двигателями, вы осваиваете безопасный подход к схемотехнике в целом. Если крупный двигатель резко затормозит, то можно запросто сжечь MOSFET или процессор.

И на этом всё.

Недостатки?

Пожалуй, я слишком расхвалил книгу. Что же мне в ней не понравилось?

В седьмой главе упоминалось, что термины ведущий/ведомый в MISO и MOSI сейчас уже не в моде, автор подталкивает читателя к использованию более «корректных» терминов. Но я предпочитаю придерживаться классики.

В вопросах для самопроверки к пятой главе автор углубляется в порядком избитую тему «культурного разнообразия». Как по мне, лучше бы она без этого обошлась.

Тем не менее, должен сказать, что автор подходит к теме разнообразия гораздо более аккуратно и продуманно, чем многие другие. Тем не менее, в материалах, которые я читаю, я предпочёл бы обойтись без этой темы.

Заключение

Это отличная книга. Она не обучает азбучным истинам, и это не набор туториалов. Тем не менее, она станет вам верным спутником на пути самообразования, даст ценные подсказки о ключевых навыках и поможет наработать опыт, чтобы далее вы могли сделать карьеру в области встраиваемых систем.

Напоминает разговор с душевным коллегой, которому нравится наставничать, делиться знаниями и опытом.

Не сказал бы, что это книга для начинающих. Если вы сами активно изучаете различные аспекты встраиваемых систем, то думаю, именно эта книга наиболее поможет вам в работе.

Что же делать дальше? Открывайте книгу и начинайте тщательно усваивать главу за главой. В особенности это касается главы о математике.

Автор: BHV_publishing

Источник

Rambler's Top100