Как стать автором
Обновить
97.66

C *

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

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

Задача о Пересечении Интервалов (или Зачем Программисту MК Стабильная Сортировка)

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

В программировании микроконтроллеров эпизодически приходится решать задачу о выявлении пересечения интервалов.

На первый взгляд простая задачка, однако, как оказалось, реализовать такое в коде - это вовсе нетривиальная задачка. Но обо всём по порядку...

В этой заметка я представил свой алгоритм определения пересечений интервалов и его разбор.

Читать далее

Новости

Dart Native Assets: Полное руководство от новичка до профи

Уровень сложностиСложный
Время на прочтение14 мин
Количество просмотров691

Представьте, что у вас есть Dart-программа, и вы хотите использовать готовую библиотеку, написанную на C, C++, Rust или другом языке. Раньше это было сложно - нужно было вручную компилировать библиотеку, следить за тем, чтобы она попала в нужное место, и писать много дополнительного кода.

Native Assets - это система, которая автоматизирует весь этот процесс. Она позволяет вашему Dart-пакету "включать в себя" нативный код и автоматически его компилировать и подключать.

Читать далее

Проект умного дома IoT LikNode

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

Проект локальных беспроводных устройств к каждом из которых подключается датчик (температуры, влажности), датчик движения, различные устройства с цифровым выходом, которые можно использовать для охраны. Вся информация, выводится на смартфон, также как и управление и настройка.

Данное устройство разрабатывалось на основе микроконтроллера esp32 (ap), esp8266 (node) и смартфона os Android. 

Программа для микроконтроллеров написана на языке Си для андроид на языке Котлин (скачать возможно по ссылке download). 

Каждый из микроконтроллеров подключенный в данном проекте имеет одинаковые функции. Максимальное количество node можно подключить 20 штук.

Читать далее

Насколько быстр Intel 8080? Используем чипсет на FPGA чтоб проверить

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

Я люблю вызовы - например, написать код в условиях ограниченных ресурсов: медленный процессор, странный набор инструкций, крохи памяти. У меня уже было несколько проектов такого рода - я запускал тяжелую вычислительную задачу на процессорах, которые уже разменяли пол-века: Intel 4004, Intel 4040 и Intel 8008. Очевидно, что на очереди Intel 8080!

В этой статье я опишу детали проекта по созданию системной платы с чипсетом на основе FPGA, на которой будет запущен Intel 8080A-1 на частоте выше 3Мгц. А также расскажу о том, как писать программы для этого процессора на C, и в финале покажу результаты бенчмарков - Dhrystone и CoreMark.

Читать далее

Управление зависимостями на C++ с помощью vcpkg registry и сервера кеширования

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

Здравствуйте, дорогие читатели Хабра! Я давно хотел поделиться своими знаниями о работе с реестрами под ключ, так как нигде нет четкой и последовательной информации по этой теме. Сегодня мы разберем, как управлять зависимостями через реестры vcpkg и как кэшировать их на сервере.

Читать далее

Апгрейд по реверс-инженерски: хакаем прошивку кнопочного телефона и пишем для него программы

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

Осторожно: в данной серии статей я рассказываю о реверс-инжиниринге и хакинге простых кнопочных звонилок. Цель простая: расширить скудный функционал телефонов ценой до 1 000 рублей и сделать их привлекательной платформой для самых разных гиков. Если вам интересно узнать, как происходит процесс взлома и изучения прошивок, а также написания новых программ для кнопочников — жду вас под катом!

Читать далее

Полиморфизм, мета-программирование и космическая баллистика: 4 доклада о C++ и Linux Kernel

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

Посмотрели за вас все доклады с System Level Meetup и выбрали по два лучших из потоков по Linux Kernel и C++. Для «плюсовиков» приготовили выступления о мета-программировании и девиртуализации в компиляторах. Для тех, кто интересуется ядром Linux — материалы о kernel bypass и чем-то еще. 

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

Читать далее

QapDSL — декларативное описание AST и парсеров для C++

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



QapDSL — декларативное описание AST и парсеров для C++


QapDSL — это специализированный язык (DSL), который позволяет описывать абстрактные синтаксические деревья (AST) и правила их разбора для языков программирования, прежде всего C++. Такая формализация помогает автоматизировать построение парсеров, генерацию кода, анализ исходников и даже рефакторинг.



Зачем нужен QapDSL?


  • Компактно и наглядно описывать структуру и грамматику языка.
  • Автоматически генерировать C++-структуры, парсеры, сериализаторы и визиторы.
  • Ускорять эксперименты с языками, создавая прототипы компиляторов и анализаторов.
  • Упрощать анализ и рефакторинг сложных языков, в т.ч. C++.


Пример QapDSL-описания


Рассмотрим, как описывается объявление класса C++ на QapDSL:


t_class{
  string keyword;
  t_sep sep0;
  string name;
  t_sep sep1;
  TAutoPtr<t_parents> parents;
  t_sep sep2;
  TAutoPtr<t_class_body> body;
  t_sep sep3;
  {
    M+=go_any_str_from_vec(keyword,split("struct,class,union",","));
    O+=go_auto(sep0);
    M+=go_str<t_name>(name);
    O+=go_auto(sep1);
    O+=go_auto(parents);
    O+=go_auto(sep2);
    O+=go_auto(body);
    O+=go_auto(sep3);
    M+=go_const(";");
  }
}

Читать дальше →

Векторы в RISC-V на практике: вычисление softmax

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

С 10 по 14 апреля 2025 года прошел первый онлайн RISC-V хакатон, организованный Ассоциацией RISC-V. Участникам на выбор давались 2 задачи. Одна задача от Codasip -доработать программу и кастомный процессор для вычисления LLM трансформера. Другая от Andes - улучшить вычисление функции softmax. Для демонстрации работы векторного расширения RISC-V задача с softmax мне показалась более подходящей.

Интересно было изучить, как в процессорах реализуется вычисление нелинейных функций, как например экспоненциальная функция, нужная для softmax.

Читать далее

Введение в память, мотивация виртуальной, отображение между физической и виртуальной

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

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

Как же оно получилось?

Пишем на C самоизменяющуюся программу x86_64

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

«Зачем вообще писать программу, меняющую код в процессе выполнения? Это же ужасная идея!»

Да, всё так и есть. Но это и хороший опыт. Такое делают только тогда, когда хотят что-то исследовать, или из любопытства.

Самоизменяемые/самомодифицируемые программы не обладают особой полезностью. Они усложняют отладку, программа становится зависимой от оборудования, а изучение кода превращается в очень утомительный и запутанный процесс, если только вы не опытный разработчик на ассемблере. Единственный разумный сценарий применения самоизменяемых программа в реальном мире — это механизм маскировки зловредного ПО от антивирусов. Моя цель исключительно научна, поэтому ничем подобным я заниматься не буду.

Предупреждение: в этом посте активно используется язык ассемблера x86_64, в котором я ни в коем случае не являюсь специалистом. Для написания статьи мне пришлось изучать приличный объём материалов, и, возможно (почти наверняка), в ней есть ошибки.
Читать дальше →

Маленькие программки на С — победители конкурса IOCCC

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


Международный конкурс запутанного кода на С (IOCCC) — известное соревнование по программированию, которое проводилось до 2020 года.

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

Но программки делают реально сложные вещи: например, победитель 2004 года — это операционная система, исходный код 166 строк.

Посмотрим на шедевры разных лет и откуда вообще взялся этот конкурс.
Читать дальше →

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

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

Осторожно: помните ли вы, как в вашем телефоне Siemens, Motorola и Sony поселились маленькие программы — «эльфы»? В рамках этой статьи мы во всех деталях исследуем прошивку бюджетного кнопочника, разберемся в её архитектуре, хакнем и напишем загрузчик тех самых эльфов с MicroSD-флэшки. При этом я постараюсь объяснить всё максимально простым и доступным языком!

Недавно я познакомился с легендой форума allsiemens.ru — Ilya_ZX, который известен своим огромным вкладом в тему реверса и моддинга телефонов на платформе E-Gold и S-Gold. Илья поведал мне интересную историю о том, как в начале нулевых, будучи студентом, поспорил с одногруппником, сможет ли он добавить ‭‭«змейку‭‭» в свой Siemens A60. И спор он этот выиграл, путем бессонных ночей ковыряния прошивки в IDA Pro! Я подумал ‭‭— «а чем я хуже?‭‭». Взял в руки кнопочный телефон на платформе Spreadtrum, сдампил прошивку и загрузил в дизассемблер...

Если вам интересен подробный процесс реверса различных модулей прошивки, как они взаимодействуют между собой, как я написал программу для применения патчей к фуллфлэшу и, собственно, бинлоадер с первой программой — жду вас под катом!

Читать далее

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

Proxy MCAL для Микроконтроллера

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

При продолжительной разработке на одном семействе микроконтроллеров получается так, что приложение намертво привязано к конкретному семейству микроконтроллеров и его SDK, так как напрямую использует HAL от вендора.

Это особенно явно проявляется в таких случаях, когда надо срочно переносить прошивку на другой микроконтроллер.

Получается, что приходится заново писать всю прошивку, всё приложение, драйвера всех ASIC-ов. Драйвер светодиодов, драйвер кнопок, драйвер ASICов c I2C SPI управлением. В общем всё переписывать. Поменяли MCU и пришлось переписать все файлы в репозитории. Нормально так да?

В этом тексте я написал, как можно обойти эту проблему.

Читать далее

Подборка авторских Telegram-каналов про разработку

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

Подборка авторских Telegram-каналов про разработку

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

Поехали!

От космической баллистики до kernel bypass — все, что вы хотели знать про C++ и Linux

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

Заходят как-то в лофт разработчик на С++, доктор математических наук и инженер-программист Linux kernel — и вместо шутки начинается System Level Meetup. 24 мая в Санкт-Петербурге соберутся те, кто пишет код на уровне железа, оптимизирует ядро Linux и проектирует архитектуру сложных систем. Два трека — C++ и Linux kernel, десятки докладов, живое общение, стенды, квесты и железо от YADRO. Регистрируйтесь и подключайтесь — онлайн или офлайн.

Читать далее

Основы по GNU Make

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

GNU Make - это консольная утилита, которая запускает другие консольные утилиты в желаемой последовательности согласно скрипту. Только и всего.

В этом тексте я показал, как можно организовать самостоятельно написанные make скрипты для микроконтроллерных проектов.

Читать далее

Как я модель устройства в QEMU на Rust писал. Часть 1. Разбор интеграции Rust в QEMU

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

С недавнего времени в QEMU появилась экспериментальная возможность создания моделей устройств на языке Rust, вместо традиционного C. Меня эта тема очень заинтересовала, и я не смог пройти мимо и не попробовать не создать модель устройства PCI на этом языке. За основу взял реализацию EDU на C.

Делюсь, через что мне пришлось пройти, и что из этого вышло. Эта часть посвящена разбору интеграции Rust в QEMU.

Читать далее

Уменьшил синтаксис Си ради 15 байт

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

Скучая на очередном уроке биологии я вспомнил о таком прекрасном творении как brainfuck и о его интерпритаторах...

Вернувшись домой я нашел самый маленикий среди интерпритаторов:

Читать далее

Статический Анализ С-кода

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

Существуют бесплатные статические анализаторы для Си кода. Среди них splint и cppcheck.

Статический анализатор - это такая консольная программа, которая проверяет исходные коды до компиляции. Своего рода автоматическая инспекция программ.

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

Суть этой короткой заметки в том, чтобы показать, как просто и лаконично происходит подключение разнообразных статических анализаторов к проекту, который собран скриптами сборки GNU Make.

Читать далее
1
23 ...