Библиотека C/C++ разработчика | cpp, boost, qt
20.4K subscribers
1.75K photos
46 videos
16 files
3.93K links
Все самое полезное для плюсовика и сишника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/d6cd2932

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
Download Telegram
🧑‍💻🪜 6 карьерных советов программисту

Советы, которые подойдут джуниорам, мидлам и сеньорам.

#туториал

Читать статью
🤯7👍31
🏃🏃‍♂️ Библиотека libopencm3. Работа с USART, прерываниями, I2C и таймерами

В заключительной части (это и это — предыдущие части, в которых происходит вся подготовительная кухня) рассматривается взаимодействие микроконтроллера с окружающим миром с помощью USART — интерфейса, позволяющего организовать взаимодействие с человеком при помощи текста.

Цель: отправить в USART строчку «Hello from LibOpenCM3!» Параметры подключения должны быть: скорость 9600, 8 бит данных, один стоп-бит, проверка четности выключена.

Изучить материал

#туториал
👍4
💹⚖️ Измерение частоты на STM32

Рассказ о различных методах измерения частоты прямоугольного сигнала с помощью микроконтроллера STM32.

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

Начальные условия: частота входного сигнала от 0 до 10 кГц. Микроконтроллер STM32F103C8T6, всем известная плата bluepill. Библиотека HAL. Источником сигнала, частота которого будет измеряться, для проверки работоспособности будет служить двухканальный генератор частоты JDS6600. Будет использовать модуль CH340G (Преобразователь USB — UART) для передачи данных в терминал (terminal v1.9b) для наглядности. В него будет посылаться полученное после обработки значение.

Читайте дальше тут

#туториал
👍8
🙃😉 Iteration Revisited

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

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

#туториал
😁2🔥1
🥸👁️ Отслеживание изменений в директории с помощью Inotify

Автор материала столкнулся с задачей, где необходимо было отслеживать в ОС Linux изменение файла в директории на чистом С++. Так как чистый С++, Qt с его QFileSystemWatcher сразу отпадал, из-за того что необходимо было подключать QObject. В итоге выбор пал на линуксовую функцию Inotify.

Inotify позволяет через файловый дескриптор наблюдать за директорией или файлом, отслеживая их события. Все события ввода-вывода ссылаются на открытый файл с использованием файлового дескриптора. Файловый дескриптор представляет собой целое число типа int.

Работа типичной программы мониторинга организована следующим образом:

♦️ С помощью inotify_init() открывается файловый дескриптор
♦️ Добавляется одно или несколько событий для наблюдений
♦️ Ожидаем добавленное событие
♦️ Обрабатываются события, после чего снова начинаем ждать в бесконечном цикле
♦️ При отсутствии активных наблюдений или при получении определенного сигнала файловый дескриптор закрывается, выполняется очистка и программа завершает работу.

#туториал
🎉26👍103🔥1
🤲✍️ Базовые алгоритмы на графах

Рассматриваются основные алгоритмы на графах и их реализацию на C++:

▪️Обход графа в ширину (Поиск в ширину) aka BFS | Breadth First Search
▪️Обход графа в глубину (Поиск в глубину) aka DFS | Depth First Search
▪️Алгоритм Дейкстры
▪️Алгоритм Флойда-Уоршелла
▪️Алгоритм Прима

Изучить вопрос

#туториал
❤‍🔥10👍7
🤸🤸‍♂️ Механизм перезапускаемых последовательностей (Rseq) при работе с TCMalloc

В TCMalloc кэши для отдельных ядер процессора реализуются при помощи перезапускаемых последовательностей man rseq(2) под Linux. При помощи перезапускаемых последовательностей можно вплоть до завершения выполнять область памяти (атомарно, относительно других потоков, выполняющихся на том же ядре процессора), либо выходить из этого процесса, если ядро прервёт этот процесс, например, вытеснив его или прервавшись на обработку сигнала.

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

Продолжить

#туториал
👍2🤔2👏1
🎓 Продвинутый SQL: секреты профессионалов

Рассказываем о сложных стратегиях оптимизации запросов, продвинутых типах соединений и тонкостях использования SELECT.

Читать статью

#туториал
👍4