Перечисления: enum в C и enum class в C++
Введение Перечисления дают именованные, осмысленные альтернативы «магическим числам» — в этой статье разберём enum в его классическом, С-совместимом виде, и более современный, безопасный enum class C++11, устраняющий ряд…
Активный/пассивный зуммер и многоцветные светодиодные модули (RGB, двухцветные)
Введение Звуковая и световая индикация — два разных по природе, но часто объединяемых в одном проекте способа обратной связи с пользователем: набор включает активный и пассивный зуммер (различающиеся…
Стек и куча: где живут переменные, разница в скорости и времени жизни
Введение Ранее мы упоминали «автоматическое» время жизни локальных переменных и динамическую память — в этой статье соберём эти концепции в единую картину, явно разобрав два основных региона памяти,…
Введение в CUDA: модель потоков, блоков и сеток (grid/block/thread) на простом примере
Введение CUDA — платформа параллельных вычислений от NVIDIA, позволяющая выполнять код на тысячах ядер GPU одновременно. В отличие от CPU с несколькими быстрыми ядрами, GPU состоит из множества…
Таймеры QTimer в многопоточном окружении: подводные камни
Введение QTimer — один из самых часто используемых классов Qt, но его поведение в многопоточном контексте вызывает регулярную путаницу: таймер привязан к event loop конкретного потока, и попытка…
Память в CUDA: global, shared, constant и registers — где что использовать
Введение Производительность CUDA-кода в значительной степени определяется тем, как эффективно используется память — у GPU есть несколько физически разных видов памяти с очень разной латентностью, объёмом и областью…
ИК-пульт и ИК-приёмник: приём и декодирование команд
Введение ИК-приёмник (модуль на чипе VS1838/HX1838) в сочетании с прилагаемым в комплекте маленьким ИК-пультом — простой способ добавить беспроводное управление устройством без необходимости в более сложных Bluetooth/Wi-Fi модулях.…
std::variant и std::visit: типобезопасные альтернативы union
Введение Классический union в C++ позволяет хранить в одной области памяти значения разных типов, но он совершенно не типобезопасен: компилятор не следит за тем, какой тип «активен» в…
Работа с метаданными медиафайлов: теги, обложки, длительность
Введение Помимо самого аудио/видеоконтента, медиафайлы обычно содержат метаданные — название трека, исполнителя, альбом, обложку, длительность — в этой статье разберём чтение этих метаданных через QMediaPlayer/QMediaMetaData, что необходимо для…