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

C *

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

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

Основы по GNU Make

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

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

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

Читать далее

Новости

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

Пишем один «exe», который работает на 3-х разных ОС без перекомпиляции

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

Нет, это не шутка и не кликбейт. Такое действительно возможно — правда через небольшой хак.

Недавно я задался вопросом: а возможно ли написать для ARM нативную программу, которая будет бесшовно работать сразу на 4-х операционных системах без необходимости перекомпиляции для разных платформ и ABI. Мне очень хотелось реализовать возможность писать кроссплатформенные эльфы для мобильных телефонов из нулевых и попытаться портировать на них эмуляторы ретро-консолей. Погрузившись в документацию на исполняемые форматы, я пришёл к выводу, что да — это возможно и смог реализовать такую программу на практике без читерства по типу VM! Всех гиков приглашаю под кат!

Читать далее

Язык Odin — прагматичная альтернатива C с привкусом Go

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

Odin — это универсальный язык для системного программирования, придуманный Биллом Холлом aka «gingerBill». Odin задумывался как современная альтернатива C, и в нём делается акцент на простоте, производительности и удобочитаемости, но при этом не упускается контроль над низкоуровневыми деталями.

На сайте об этом языке Odin охарактеризован как «ориентированный на данные», именно поэтому в нём присутствуют, например, структуры массивов (SOA) и неявная инициализация значения в ноль. Удивительно, что, несмотря на такие приоритеты, в языке есть динамические словари и массивы, встроенные в сам язык. Притом, что памятью всё-таки приходится управлять вручную, такие встроенные вещи встречаются нечасто.

Возможно, вот те самые черты, придающие Odin собственный облик: язык задуман как эргономичный, такой, на котором удобно писать, и поэтому многое предоставляет «из коробки». Также в Odin предусмотрен «вендор», в котором содержатся привязки к разнообразным популярным библиотекам. Поэтому вкатываться в язык очень просто.

Читать далее

Часть 3. Векторизация на Go: CGo, транзакции, компиляторы, поддержка, байтовые инструкции

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

В первой части статьи мы рассмотрели, как можно вручную ускорить Go-код с помощью векторизации и SIMD-инструкций, реализованных через Go-ассемблер. Написали простую, но показательно быструю реализацию sliceContains и увидели, что даже базовая векторизация может дать ускорение в 10–14 раз по сравнению со стандартной реализацией.

Во второй части статьи погрузились в практическое применение SIMD в Go-ассемблере, реализовали функцию SliceContainsV1 и изучили, как с помощью VADD, VDUP и других инструкций можно добиться 10–14-кратного ускорения простых задач.

Но возможности оптимизации Go-программ на этом не заканчиваются. В этой части мы пойдём дальше: рассмотрим другие техники низкоуровневой оптимизации — от использования C-кода и альтернативных компиляторов с поддержкой векторизации до работы с аппаратными транзакциями памяти на Intel. Поговорим о том, как внедрять ассемблер в продакшен-код, не боясь за его поддержку, и как обойти ограничения стандартного Go-компилятора.

Привет, Хабр! Меня зовут Игорь Панасюк, я работаю в Яндекс, преподаю в ИТМО, а также в свободное время выступаю на конференциях, делюсь опытом в соцсетях и помогаю развитию Go-сообщества, веду телеграм-канал и youtube-канал. Если вы уже знакомы с базовыми техниками векторизации, эта часть поможет глубже понять, как устроены продвинутые способы ускорения Go-кода и на что стоит обратить внимание при работе с архитектурно-зависимыми оптимизациями.

Читать далее

Я портировала знаменитую утилиту Fetch на ReactOS

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

Да, я действительно написала Fetch-подобную утилиту для ReactOS. В этой статье я расскажу, как написание приложения для ReactOS стало моим первым опытом. При этом я не умею программировать.

Читать далее

Как проверить в C, является ли выражение константой

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

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

Читать далее

Необходимость статического анализа для РБПО на примере 190 багов в TDengine

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

РБПО


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

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

MSYS2, GDB и управление памятью

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

Эта история началась с того, что мне захотелось поработать с интерпретатором одного очень экзотического языка программирования, а закончилась тем, что я освоил не менее экзотические (для меня) нюансы работы с памятью в С в Windows и POSIX, и того, как работает отладчик gdb в Windows.

ну очень экзотического

std::vector в C?

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

Во время разработки одного из своих проектов я обнаружил, что мне нужен контейнер, способный менять свой размер по мере необходимости. Так как я большую часть времени разрабатываю на С++, а не на С, я очень хотел получить что-то похожее на std::vector<T> из С++. Я начал искать в интернете реализации, но они мне не подходили по разным причинам. Тогда я решил разработать свой вариант.

Читать далее

Обработка аудио на ESP32

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

В этой статье я хочу поделиться своим опытом портирования проекта распознавания музыкальных жанров аудиозаписей на ESP32-C3. Исходный проект взят из репозитория книги TinyML-Cookbook_2E.
При анализе речи или других звуков важно выделить такие характеристики, которые отражают строение сигнала, но при этом не зависят от конкретных слов, громкости и других мешающих факторов. Для этого используют cepstrum, mel-cepstrum и MFCC - это шаги преобразования, которые переводят звук в удобную для анализа форму.

Читать далее

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

Настройка ToolChain-а Cборки Прошивок для MIK32 (MIK32 + C+ GCC + GNU Make + OpenOCD)

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

В этом тексте я написал про то, как настроить рабочее окружение для разработки на российском микроконтроллере MIK32 (K1948BK018).

Читать далее

Научный редактор о книге «Алгоритмы? Аха!»

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

Уже пару лет мы сотрудничаем с экспертами и энтузиастами из Read IT Club. Но сейчас мы хотели бы спросить у научных редакторов — а как им книги, к выходу которых они приложили руку?



Привет! Меня зовут Женя Войнов, в настоящее время работаю тимлидом и разработчиком на Java. Я участвовал в качестве научного редактора в подготовке русскоязычного издания книги «Алгоритмы? Аха!», которая изначально была написана на китайском языке. Это был мой первый подобный опыт, о котором я ничуть не жалею, а на момент написания данной статьи успел отредактировать еще две книги. Передо мной стояла задача адаптации материала для ИТ-аудитории и проверки его технической точности. Книга позиционируется как учебное пособие для начинающих разработчиков, студентов и всех, кто хочет систематизировать знания по алгоритмам и структурам данных, поэтому крайне важно убедиться в корректности перевода поданной авторами информации.

Рецензия этой книги появилась благодаря Read IT Club – сообществу рецензентов ИТ-литературы от КРОК, в котором я состою. Мы помогаем издательствам корректировать переводные книги и делать их понятнее русскоязычному читателю. Мы приглашаем друзей из других компаний и мечтаем сделать нашу инициативу глобальной. Подробнее можно прочитать на сайте.
Читать дальше →

Сборка на CMake для новичка

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

Сборка проектов на CMake вызывает множество вопросов у новичка. Так как это ударило непосредственно по мне, я решил показать и рассказать о том, как быстро создать универсальные скрипты для сборки на CMake.

Читать далее

Процессоры ARM: смешиваем NEON с SVE — и забава, и польза

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

Большинство мобильных устройств используют 64‑битные ARM‑процессоры. Однако они все заметнее и на серверах. Их число неуклонно растет, и все больше компаний, включая таких гигантов, как Amazon и Microsoft, также переходят на 64‑битные ARM.

У этих процессоров есть специальные инструкции — ARM NEON. Они обеспечивают параллелизм, известный как SIMD — Single Instruction, Multiple Data, то есть «Инструкция одна, данных множество». Например, можно сравнить шестнадцать одних значений с шестнадцатью других с помощью всего одной такой инструкции.

Некоторые из самых последних процессоров ARM также поддерживают еще более продвинутый набор команд — SVE, Scalable Vector Extension, или «Масштабируемое векторное расширение». Прогресс не останавливается — и вот уже появились спецификации SVE 2 и SVE 2.1.
Читать дальше →

Реализация ГОСТ 32.12. Симметричный шифр Кузнечик

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

Доброго времени суток.

В качестве первой статьи решил выбрать разбор реализации отечественного шифра «кузнечик». Постараюсь объяснить сложные вещи простым языком.

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

Читать далее

Восстановление раритетного аналогового синтезатора Alpha Juno-1 фирмы Roland

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

Одно время  на прогулках по блошиным рынкам я увлеченно высматривал винтажные музыкальные инструменты, особенно синтезаторы 70x-80x годов. Я нахожу их звуки очень красочными и разнообразными, а так же эти устройства интересны с точки зрения схемотехники.

И вот однажды по счастливой случайности и благодаря алгоритму поиска на основе AI на одном из самых популярных интернет-сервисов для купли-продажи подержанных вещей, который предложил мне объявление по моим интересам.

И это оказалась не «пиликалка» с пластиковым звуком и не кондовый электроорган, - а очень даже продвинутый для середины 80ых и актуальный по сей день аналоговый полифонический синтезатор с цифровым управлением, выпущенный компанией Roland.

После приобретения музыкальный инструмент не подавал ни каких признаков жизни кроме подсветки дисплея. Вскрытие и сверка со схемой из документации показали то, что хоть разработчики и использовали Poka Yoke для предотвращения неправильного подключения межплатных кабелей, но или не досмотрели или ассортимента не хватило и установили на главной плате два разъёма с одинаковым количеством контактов и невнимательный настройщик который обслуживал синтезатор перепутал местами те единственные два кабеля в которых можно было ошибиться. В таком вот состоянии инструмент мне и достался. Уcтранив ошибку сначала я очень обрадовался, - основные функции заработали, но к сожалению вышли из строя два входа микросхемы IC7 “Gate Array“, которая выполняет роль IO интерфейса для CPU, в частности для функций клавиатуры. Из Рис. 1 и Рис. 3-4 видно как происходит обработка нажатия клавиш.

Прочесть

RISC-V: векторное расширение и алгоритм Витерби

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

Недавняя публикация о векторном расширении RISC-V архитектуры, подтолкнула меня к мысли написать небольшую заметку об использовании данного расширения в задаче, имеющей практическое применение. После появления векторного расширения, в сети начали публиковаться статьи о применении RISC-V ядер с данным расширением в задачах, ранее в которых безальтернативно использовались только процессоры ЦОС. В данной статье рассматривается тест, в котором используется алгоритм декодирования Витерби - задача, требующая значительных вычислительных ресурсов.

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