Все потоки
Поиск
Написать публикацию
Обновить
221.54

C *

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

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

Пишем «Hello, World!» на Си для OpenWRT

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров6K

Мне стало интересно, как можно скомпилировать код на языке Си для OpenWRT на мой роутер.
В интернете инструкции имеются, но расплывчатые и то им уже по 6-8 лет. Поэтому, в этой статье собрана актуальная информация по компиляции.

Читать далее

Как я портировал свой игровой движок с JavaScript на C

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров11K

high_impact


tl;dr: high_impact — это маленький игровой движок для 2D-игр жанра «экшн». Он написан на C, компилируется для Windows, Mac и Linux, а также для WASM в вебе. Он был написан «по мотивам» моего игрового движка Impact на JavaScript, разработанный в 2010 году. Название high_impact — отсылка к тем временам, когда C считался языком высокого уровня.

Движок имеет лицензию MIT, исходники выложены на Github: github.com/phoboslab/high_impact

Видео из моего твита за 5 июля, демонстрирующее геймплей Biolab Disaster
Читать дальше →

Протокол SMTP. Пишем SMTP-сервер на C

Время на прочтение12 мин
Количество просмотров4.6K

Недавно я захотел подкачать свои знания языка C. Я решил написать небольшой проект используя только стандартную библиотеку языка. Чтобы извлечь ещё больше пользы из данного проекта, я решил изучить новую для меня технологию. Этой технологией стал протокол прикладного уровня SMTP, а проектом – небольшой SMTP-сервер. Сегодня я расскажу, как работает протокол SMTP, а также как я реализовал сервер, работающий с ним.

Читать далее

Reverse engineering конкурсных списков поступления на бюджет в вузы России

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров10K

Сегодня, 3 августа 2024 года, был последний день подачи документов в вузы России на бюджет.

Ситуация нервная: слишком много факторов.

Мать-недопрограммист не дождалась приказа

Интеграция clang-format в Процесс Сборки

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.3K

Есть такая тема, как автоматическое выравнивание отступов в исходных текстах программ на Си или С++. Притом для этого есть специальные утилиты. Например clang-format или GNU indent.

В этом тексте я написал, как встроить процесс выравнивания исходных кодов прямо в систему сборки проекта.

Цель данного текста- показать, как интегрировать clang-format в процесс сборки прошивки. Просто в одно касание и выровнять код, и собрать бинари.

Читать далее

4 типовые ловушки в работе со строками в С и С++ и как их избежать

Время на прочтение9 мин
Количество просмотров18K

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

Читать далее

Пишем за неделю 3D-редактор на C

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров11K
Прошлой осенью я участвовал в недельном мероприятии по программированию Wheel Reinvention Jam. Смысл этого джема заключается в том, чтобы взглянуть по-новому на уже существующие программные системы. Я написал для него 3D-редактор под названием ShapeUp. Пост будет понятнее, если вы сначала посмотрите видео-демо ShapeUp. Можно попробовать ShapeUp в браузере.

Вот, как он выглядит:

Майк Вазовски!

3D-редактор


Я ненавижу тормознутость компилятора Typescript (поверьте, это относится к теме статьи). Джем показался мне подходящей возможностью реализовать более быстрое подмножество Typescript, обгоняющее по скорости tsc. Мне показалось, что проект можно реализовать, если начать с парсера Typescript esbuild or Bun. Но потом ко мне пришло понимание, что успешный результат будет выглядеть как команда терминала, выполняющая работу быстрее другой. Не особо впечатляюще в качестве демо. Мне хотелось создать крутое демо, поэтому я выбрал 3D.
Читать дальше →

Работа SPI на MIK32 АМУР с платой ELBEAR ACE-UNO ревизии 1.0.1

Время на прочтение3 мин
Количество просмотров1.7K

Здравствуйте все! ✋

При первой же попытке подключить экран ILI9341 по SPI к MIK32 АМУР выявил пару проблем, одна касается библиотеки HAL от Микрона, а вторая касается платы ELBEAR ACE-UNO ревизии 1.0.1 от ELRON.

Для начала поясню, я использую свой Makefile и работаю в VSCode, есть возможность работать с PlatformIO но я ей не пользуюсь. Прошиваю МК через COM-порт, для этого использую бутлоадер и загрузчик от elron.tech.

Для запуска экрана я взял библиотеку которую использовал ранее для работы с МК от Миландр К1986ВК025 (ОКР «Счетчик М»), заменил внутренности функций SPI_Master_Init, SPI_SendData и т.д., взяв их из примера который находится в репозитории Микрона - HAL_SPI_Master.

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

Читать далее

Тысяча и одна библиотека С++

Время на прочтение65 мин
Количество просмотров52K

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

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++

Пуск I2S трансивера на Artery

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров4.5K

В этом тексте я написал про то, как самому написать System Software уровня HAL для ARM Cortex-M4 совместимого микроконтроллера.

Как отлаживать такую работу и на что обратить внимание при запуске I2S на Artery MCU.

Читать далее

Прошиваем программу не только в начало FLASH памяти STM32

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров8.4K

Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память? Небольшая статья, которую я сам в свое время не нашел и потратил много часов и нервов на сбор этой не хитрой информации.

Читать далее

Фиксим баги в вашем AI или разбор ошибок в OpenVINO

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров1.3K

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

Читать далее

Xv6: увеличим размер страниц виртуальной памяти с 4Кб до 2Мб

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров2.4K

Научим xv6 работать с виртуальными страницами размера 2 Мб, узнаем, как компоновщик создает образ памяти программы и научим файловую систему xv6 справляться с большими файлами.

Пример: Пусть программа занимает 4 Мб памяти. Размер страницы - 4 Кб. Программа займет (1024 * 1024 * 4) / (1024 * 4) = 1024 страницы памяти. ОС избавит процессор от лишней работы, если увеличит размер страницы до 2 Мб - тогда программа займет 2 страницы.

Читать далее

Ближайшие события

Куча таймеров в node.js

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров6.6K

А знаете ли вы, как на самом деле работают таймеры в node.js? В этой статье мы разберемся, как хранятся таймеры, когда запускаются и как в целом все работает вплоть до системных вызовов.

Читать далее

Реверс алгоритма поиска устройств в сети

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров3.3K

При создании оконного клиента под MS-Windows для удалённого взаимодействия с LED-матрицами стояла задача сделать автоматический поиск всех табло в сети. Моей первой идеей было перебирать все существующие IP-адреса конкретной подсети, по очереди посылая на них запросы и ожидая что одно или несколько устройств отправят соответствующий ответ. Я быстро отказался от этой задумки, ведь подобный брутфорс будет сильно нагружать сеть, да и сам алгоритм не самый быстрый. Других идей по реализации на тот момент у меня не было. Мне предоставили копию другого клиента, где поиск осуществляется моментально по нажатию одноимённой кнопки, а приложение в табличном виде выводит IP и MAC-адреса с рядом другой информации об обнаруженных матрицах, если таковые нашлись. Эти данные затем могут быть использованы для подключения, конфигурации и отправки команд на найденные устройства. Не имея исходного кода, я подготовил дизассемблеры, отладчики и hex-редакторы, готовясь к глубокому анализу и разбору проприетарного алгоритма поиска, чтобы реализовать что-то подобное уже в своей программе.

Читать далее

MIK32 АМУР на плате ELBEAR ACE-UNO от ELRON, мой опыт или как три дня загружать Blink

Время на прочтение4 мин
Количество просмотров11K

Здравствуйте все! ✋

Наконец-то ко мне пришёл долгожданный MIK32 АМУР на плате ELBEAR ACE-UNO от ELRON. Нормально так мне с ним пришлось по возиться, в какой-то момент уже подумал что прислали "кирпич", оказалось просто есть кое-какие нюансы о которых я сейчас расскажу.

Микроконтроллер долгое время не хотел определяться, с начала не заработал PlatformIO, библиотека MIK32 не установилась, выскакивала ошибка. Теперь я знаю что невнимательно прочёл инструкцию, но тогда не смог установить. В инструкции обратите внимание на ссылки wiki.mik32.ru и сделайте всё в точности как там описано, не спешите (:

Потом я установил MikronIDE, но OpenOCD писал ошибку, мол к JTAG ничего не подключено. Точнее ошибку сначала выдавал Uploader Микрона, а он в свою очередь обращался к OpenOCD.

Ошибка сначала выглядела так.

Читать далее

Стартер пак в C: 3 полезные библиотеки для начинающих. Часть 1

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4.2K

Привет, Хабр!

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

Читать далее

Решатель Игры Set на Микроконтроллере

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров2.6K

Существует одна остроумная настольная игра, называется Set. Это игра на внимание.

В этом тексте я показал, как я сконструировал автоматический решатель, чтобы всегда выигрывать в игру Set!

Читать далее

Как установить библиотеку check.h?

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров4.7K

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

Читать далее

Нюанс, из-за которого ваш I2S не работает…

Время на прочтение3 мин
Количество просмотров16K

... и о котором почему‑то нигде не написано.

Некоторое время назад я сел осваивать интерфейс I2S для работы с аудио ЦАПом высокого качества. За спиной у меня уже был большой опыт работы с различными SPI микросхемами, I2C микросхемами, методы работы в блокирующем режиме, неблокирующем режиме через прерывания, неблокирующем режиме через DMA. В общем, мне казалось, что меня уже ничем не удивить. Но за это мы и любим мир электроники и компьютеров — он сможет удивить даже самого искушенного разработчика.

Читать далее

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