Как стать автором
Обновить
66.55
Рейтинг

C *

Типизированный язык программирования

Сначала показывать
Порог рейтинга

Как пропатчить ОС 1996 года с помощью Ghidra

Блог компании SkillFactory C *Реверс-инжиниринг *Старое железо Звук
Перевод

Не так давно автор материала работал над сложной головоломкой: как пропатчить операционную систему сэмплового синтезатора 1996 года Kurzweil K2500. О путешествии автора в старый код музыкального инструмента рассказываем к старту курса по разработке на C++.

Читать далее
Всего голосов 55: ↑55 и ↓0 +55
Просмотры 8.3K
Комментарии 5

Новости

Библиотека для адресных светодиодов STM32

Open source *C *Программирование микроконтроллеров *Гаджеты DIY или Сделай сам
Из песочницы

Драйвер для STM32 для реализации протокола адресных светодиодов (WS2812, WS2811, SK6812, и т.д.), с рациональным использованием буферной памяти и DMA.

Читать далее
Всего голосов 20: ↑19 и ↓1 +18
Просмотры 5.8K
Комментарии 23

Как отобрать у микроконтроллера QN902x его прошивку

Беспроводные технологии *C *Реверс-инжиниринг *Программирование микроконтроллеров *

Когда у меня появился умный чайник Xiaomi Mi Smart Kettle Pro - у меня возник тот же вопрос, что и у многих его пользователей: почему его нельзя включить удаленно? Чайник позволяет подключиться к нему через блютуз, задать температуру которую он будет поддерживать и еще пару незначительных параметров, но его невозможно удаленно включить, что нивелируют его ценность как компонента умного дома.

Читать далее
Всего голосов 98: ↑98 и ↓0 +98
Просмотры 13K
Комментарии 51

Обзор всего доступного в С++ type erasure

Программирование *C++ *C *

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

Если спросить современного С++ разработчика какие примеры type erasure он видел / использовал, то вероятно он ответит что то про std::function и возможно про std::any, но это лишь малая часть всех применений этого замечательного инструмента!

В статье я постараюсь описать все возможные виды type erasure в современном С++, но начать стоит с определения.

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

Начнём с того, что было уже в С и о чём часто забывают говоря об erasure

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

Кстати, насчёт байтов:

std::byte (since C++17) / unsigned char / char так исторически сложилось, что в С все использовали чары для работы с сырыми байтами, поэтому для них в языке С++ исключение и указатель на них можно приводить к указателю на любой другой тип. Это не обходится без последствий и иногда из-за этого строки теряют некоторые оптимизации, поэтому сначала добавили std::byte, а потом начали потихоньку заменять чары (char8_t since C++20), но это уже совсем другая история. В контексте стирания типов нам важно, что мы получили способность читать данные из стёртого типа, а составив массив мы получим ещё и верхнюю границу размера типа, что конечно немного, но с void и так нельзя.

[erased]
Всего голосов 23: ↑21 и ↓2 +19
Просмотры 5.8K
Комментарии 38

Регистры STM32 в структурах на битовых полях, UART (Tx, Rx-длина?) + DMA

C++ *C *Программирование микроконтроллеров *
Из песочницы

Цель статьи - рассказать, как получить удобный доступ к битам регистра STM32 без использования битовых операций и пользоваться битами микроконтроллера как обычными переменными. Чтобы не быть голословным, создадим проект UART+DMA с передачей и приёмом данных неизвестной длины, работающую чисто на структурах c битовыми полями, которые привязаны к адресам периферии STM32.

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Просмотры 4.8K
Комментарии 27

Мигать лампочками не модно или дампер картриджей dendy на недорогой atmega

C++ *C *DIY или Сделай сам Игры и игровые консоли

В далёком уже 2015 году Алексей aka ClusterM опубликовал статью про то, как он сконструировал дампер на двух atmega64. В статье говорилось о принципах взаимодействия консоли с картриджами и как можно сдампить игру, не разбирая сам картридж по запчастям.

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

Читать далее
Всего голосов 36: ↑35 и ↓1 +34
Просмотры 3.5K
Комментарии 8

Как я делаю дрон из Raspberry Pi и ESP32 (или мои первые шаги в робототехнике)

C++ *C *Kotlin *Программирование микроконтроллеров *Разработка на Raspberry Pi *
Из песочницы

Всем привет, меня зовут Антон, и как вы могли уже догадаться из названия, решил я рассказать о своих попытках вкатиться в робототехнику, а в частности о своем дроне из Raspberry Pi и ESP32.

Читать далее
Всего голосов 70: ↑70 и ↓0 +70
Просмотры 16K
Комментарии 42

Пишем аудио-разведчик своими руками

Программирование *C *Разработка под Linux *Разработка под Windows *Звук
Tutorial

Было бы здорово иногда иметь под рукой программку, которая в наше отсутствие умеет записывать звук со встроенного микрофона нашего ноутбука и передавать его по сети на другой наш комьютер. А тот, в свою очередь, этот звук умел бы воспроизводить в режиме реального времени. Давай попробуем самостоятельно написать такую программу, тем более что это, как оказывается, не так уж и сложно.

Что мы в итоге хотим получить и какой алгоритм работы реализовать:

1. Сервер, который запускается на той машине, пространство вокруг которой мы хотим прослушивать. Он тихо ждёт, пока к нему не подключится клиент. Затем он открывает устройство записи звука, настроенное по умолчанию в системе, и начинает передавать аудио поток на машину клиента. При отключении клиента от сервера, звуковое устройство закрывается, чтобы не тратить ресурсы зря.

2. Клиент, который подключается к серверу и начинает принимать аудио поток и воспроизводить его в режиме реального времени. Для того, чтобы клиент мог правильно (в нужном формате) открыть устройство воспроизведения звука, он получает нужную мета информацию от сервера в Hello сообщении.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 3.6K
Комментарии 3

Что там у PVS-Studio c покрытием Toyota ITC Benchmark?

Блог компании PVS-Studio Информационная безопасность *C++ *C *

Toyota ITC Benchmark – это набор синтетических тестов для C и C++, состоящий приблизительно из 650 примеров и предназначенный для тестирования анализаторов кода. Данная статья ответит на вопрос: "Насколько хорошо статический анализатор PVS-Studio покрывает Toyota ITC Benchmark?".

Читать далее
Всего голосов 13: ↑11 и ↓2 +9
Просмотры 1.9K
Комментарии 3

STM32. Про синус

Алгоритмы *C *Промышленное программирование *Программирование микроконтроллеров *

Тригонометрические функции, характеризующиеся высоким потреблением процессорного времени, могут негативно влиять на выбор бюджетных микроконтроллеров ( без модуля FPU ) для задач, где важна скорость счёта, например, контроль пространственного положения.

Читать далее
Всего голосов 61: ↑60 и ↓1 +59
Просмотры 10K
Комментарии 100

Удивительное приключение в стране оптимизирующих компиляторов

Python *Программирование *C++ *Lisp *C *

Приглашаю вас в небольшое приключение выходного дня, в котором никто никому ничего не будет доказывать. Мы просто будем реализовывать один и тот же несложный алгоритм, разыскивающий простые числа в некотором диапазоне, на нескольких языках программирования: C, C++, Scheme и Python - и смотреть, что этим кодом могут сделать современные оптимизирующие компиляторы. В процессе приключения мы увидим, что «динамический» не означает «совсем уж медленный», и посмотрим на приёмы программирования на Scheme, что, как мне кажется, можно сравнить с путешествием на экзотический остров.

Читать далее
Всего голосов 66: ↑64 и ↓2 +62
Просмотры 21K
Комментарии 82

Баг в ядре Linux и как правильно жаловаться

Open source *Системное программирование **nix *C *Параллельное программирование *

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

Я отвечаю за поддержку одной из наших библиотек с C-интерфейсом, написанной на C и C++. Мой коллега из другого отдела сообщил, что его нагрузочный тест нашей библиотеки на C# в Linux выдаёт ошибку в хитром сценарии: нужно иметь два процесса по пять потоков, делающих некоторые идентичные вызовы. Если процесс один, а потоков много, то проблема не проявляется. Если процессов два, но в каждом по одному потоку, то проблема не проявляется. Путём просмотра исходников нагрузочного теста и логов работы библиотеки удалось перенести проблему в маленький юнит-тест на C++ с использованием нашего API.

Узнать, что же это было
Всего голосов 94: ↑90 и ↓4 +86
Просмотры 13K
Комментарии 38

Извлечение истории воспроизведения из медиабиблиотеки проигрывателя Winamp

Восстановление данных *C *Реверс-инжиниринг *
Давным-давно, когда не было современных гаджетов и интернетов, большинство пользователей компьютеров слушали музыку «оффлайн» при помощи различных проигрывателей. Один из самых популярных и распространённых – Winamp.
Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Просмотры 2.2K
Комментарии 8

Основы работы отечественных МК 1986ВЕ1Т с болгарскими отладчиками OLIMEX ARM-USB-OCD-H. Часть 2 — RAM & Interruptions

Отладка *C *Программирование микроконтроллеров *Процессоры
Tutorial

Изначально вторая главазадумывалась только, как шпаргалка по работе из оперативной памяти, но делать и разбираться в этом не очень трудно. Основная "запара" может настигнуть несведущего именно при работе с прерываниями. Собсна, решено объединить.

Читать далее
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 3.2K
Комментарии 6

Как начать писать программный код Си в ОС Linux (Руководство для совсем начинающих)

C++ *Системное программирование **nix *C *Разработка под Linux *
Из песочницы

Этот материал рассчитан на людей, будущих программистов, которые только начинают разбираться в программировании под ОС Linux, или может быть долго были пользователями ОС Windows. Я попробую здесь показать прямое руководство к действию на примере ОС Ubuntu и тех простых инструментов, которые использовал некогда сам при изучении Си в процессе знакомства с Linux.

Читать далее
Всего голосов 26: ↑18 и ↓8 +10
Просмотры 25K
Комментарии 37

C/C++ из Python (ctypes) на Android

Python *C++ *Разработка под Android *C *
Tutorial
main

Ранее я писал статью C/C++ из Python (ctypes), в ней описывается процесс запуска на Linux. На этот раз мне понадобилось повторить это уже на Android. В этой статье речь пойдет о сборке, необходимых инструментах, механизмах отладки и установки.

Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 4K
Комментарии 2

Masscan с поддержкой HTTPS

Блог компании BI.ZONE Информационная безопасность *Open source *Проектирование и рефакторинг *C *

Masscan — быстрый сетевой сканер, который хорошо подходит для сканирования большого диапазона IP-адресов и портов. Мы немного доработали его, адаптировав под свои нужды.

Больше всего неудобств оригинала было связано с невозможностью собирать баннеры с HTTPS-серверов. А что такое современный веб без HTTPS? Особо ничего не насканируешь. Это и смотивировало нас изменить masscan. Как обычно бывает, одна маленькая доработка переросла в другую, обнаружились баги. Теперь мы хотим поделиться нашими наработками с сообществом. Все изменения, о которых пойдет речь, уже доступны в нашем репозитории на GitHub.

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 3.2K
Комментарии 0

DevOps для производства Firmware

Программирование *C *Программирование микроконтроллеров *DevOps *DIY или Сделай сам

В этом тексте я намерен пофантазировать каким мог бы быть абстрактный процесс разработки firmware с точки зрения DevOps. И перечислить атрибуты такого процесса.

Читать далее
Всего голосов 12: ↑9 и ↓3 +6
Просмотры 4K
Комментарии 18

Баги в Hello World

Python *Программирование *Совершенный код *C *
Перевод

Hello World, должно быть, самая часто создаваемая компьютерная программа. Уже десятилетия это первая программа, которую пишут люди, когда начинают изучение нового языка программирования.

Конечно же эта простая программа не должна иметь баги. Верно?

Читать далее
Всего голосов 31: ↑25 и ↓6 +19
Просмотры 8.2K
Комментарии 21

Простая программная генерация видео и картинок без стороннего API

Python *Программирование *C++ *C *Компьютерная анимация *
Tutorial

В этой статье я покажу простой способ генерации видео программами на Python и C/C++ без использования стороннего API. Вам так же потребуется ffmpeg, без него вы не сможете конвертировать файлы в читаемые форматы!

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 3.4K
Комментарии 3

Вклад авторов

Работа

Программист С
52 вакансии