c++17
-
Хабрахабр
Студенты пишут Uart драйвер для STM32F411
Доброго здравия всем! Сегодня я хочу вам рассказать, как постепенно студенты учатся разрабатывать ПО для микроконтроллера на примере драйвера UART на STM32F411. Код и архитектуру с небольшими моими изменениями и доработками я попытаюсь привести здесь. Сразу отмечу, что все сделано статикой, как я учил 🙂 (статические классы, статическая подписка, статический странно-рекурсивный шаблон, статический контейнер для команд и так далее), но…
Читать далее » -
Хабрахабр
Что нового в SObjectizer-5.7.0 и ждет этот проект дальше?
SObjectizer — это относительно небольшой C++17 фреймворк, который позволяет использовать в С++ программах такие подходы, как Actor Model, Publish-Subscribe и Communicating Sequential Processes (CSP). Что существенно упрощает разработку сложных многопоточных приложений на C++. Если читатель в первый раз слышит о SObjectizer-е, то составить впечатление о нем можно по этой презентации, или из этой уже достаточно старой статьи. Вообще говоря, подобных…
Читать далее » -
Хабрахабр
[Из песочницы] Любовь в ненависть indie gamedev’a
Зачем мне это? История про то, как я решил заняться разработкой игры без знаний и опыта в этой области, без движка и вложений. О провалах и успехах, о начале indie-разработки пост. Зачем это кому-то другому? Меня зовут Рома и я несколько лет разрабатываю для embedded на, прости господи, С/С++. Всем привет! Отсюда и желание иметь какой-либо собственный проект, который будет…
Читать далее » -
Хабрахабр
Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби» — разбор полётов
В настоящей статье приводится разбор вариантов устранения антипаттерна «Зомби», описанного в первой части: Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби». Введение Весь код, приведённый в статье, опубликован на гитхабе в ветках. В коде использованы несколько новшеств C++17 — weak_from_this(), if statement with init-statement, может что-то ещё по мелочи. Уничтожение вышестоящей бизнес-логикой всех сильных ссылок на экземпляр класса не приводит к…
Читать далее » -
Хабрахабр
[Из песочницы] Типобезопасная работа с регистрами без оверхеда на С++17: value-based метапрограммирование
На хабре уже довольно много статьей, описывающих как, используя типы, добиться этого, и это прекрасно. С++, благодаря своей строгой типизации, может помочь программисту на этапе компиляции. Сравним с++ подход и си подход с использованием CMSIS, привычный в мире программирования микроконтроллеров: Но во всех, что я читал, есть один изъян. some_stream.set (Direction::to_periph) SOME_STREAM->CR |= DMA_SxCR_DIR_0 .inc_memory() | DMA_SxCR_MINC_Msk .size_memory (DataSize::word16) |…
Читать далее » -
Хабрахабр
Статическая подписка с использованием шаблона Наблюдатель на примере С++ и микроконтроллера Cortext M4
Всем доброго здравия! В преддверии Нового года хочу продолжить рассказывать про использование С++ на микроконтроллерах, на этот раз попытаюсь рассказать про использование шаблона Наблюдатель (но далее я буду называть его Издатель-Подписчик или просто Подписчик, такой вот каламбур), а также реализацию статической подписки на С++17 и преимущества этого подхода в некоторых приложениях. Введение С его помощью, например, делают обработку нажатия кнопок…
Читать далее » -
Хабрахабр
Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби»
В статье приводится опасный антипаттерн «Зомби», в некоторых ситуациях естественным образом возникающий при использовании std::enable_shared_from_this. Материал — где-то на стыке техники современного C++ и архитектуры. Введение C++11 предоставил разработчику замечательные инструменты для работы с памятью — умные указатели std::unique_ptr и связку std::shared_ptr + std::weak_ptr. Использование умных указателей по удобству и безопасности существенно перевешивает использование сырых указателей. Умные указатели широко применяются…
Читать далее » -
Хабрахабр
Просто и на C++. Основы Userver — фреймворка для написания асинхронных микросервисов
В Яндекс.Такси придерживаются микросервисной архитектуры. С ростом количества микросервисов мы заметили, что разработчики много времени тратят на boilerplate и типичные проблемы, при этом решения не всегда получаются оптимальные. Вот так теперь выглядит типичный код микросервиса: Мы решили сделать свой фреймворк, с C++17 и корутинами. Response View::Handle(Request&& request, const Dependencies& dependencies) psql::Execute(trx, queries::kUpdateRules, request.foo, request.bar); trx.Commit(); return Response200{row["baz"].As<std::string>()}; } А вот…
Читать далее » -
Хабрахабр
Трактат о Pinе. Мысли о настройке и работе с пинами на С++ для микроконтроллеров (на примере CortexM)
Я лишь начал очень медленно вкуривать функциональное программирование и формальные методы. Последнее время я сильно увлекся вопросом надежности софта для микроконтроллеров, 0xd34df00d посоветовал мне сильнодействующие препараты, но к сожалению руки пока не дошли до изучения Haskell и Ivory для микроконтроллеров, да и вообще до совершенно новых подходов к разработке ПО отличных от ООП. Уж больно специфические навыки должны быть у…
Читать далее » -
Хабрахабр
Boost.Spirit, или Добавляем «духовности» фильтрам списков
Я по-прежнему являюсь разработчиком ISPsystem, и меня все еще зовут Дмитрий Смирнов. Доброго времени суток, коллеги. Asio накопилось много. Некоторое (довольно продолжительное) время я никак не мог определиться с темой следующей публикации, поскольку материала за последние месяцы работы с Boost. Нужно было разработать инструмент, позволяющий frontend’у фильтровать данные в запрашиваемых списках. И уже в тот момент, когда казалось, что легче…
Читать далее »