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

C *

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

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

Как Составить Функцию Инициализации Микроконтроллера (Топологическая Сортировка Графов)

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

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

Дело в том, что прошивка состоит из набора программных компонентов. Каждый компонент вызывает функции из других программных компонентов. Так происходит пере использование кодовой базы.

Чтобы всё это работало надо соблюдать правильный порядок инициализации.

В этом тексте я представил формальный алгоритм определения этого порядка.

По сути это топологическая сортировка графа зависимостей программных компонентов.

Читать далее
Рейтинг0
Комментарии0

Новости

Руководство по межпроцессному взаимодействию (IPC) в Linux — Часть 1

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

Представляю вашему вниманию перевод работы A guide to inter-process communication in Linux. Объём данной работы большой, поэтому перевод будет выполнен в виде нескольких отдельных статей:

Читать далее
Всего голосов 1: ↑1 и ↓0+2
Комментарии0

Краткое сравнение популярных функций измерения времени

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

Какую реальную точность можно ожидать от функции возвращающей время, а сколько времени она выполняется сама? Попытка замерить и сравнить несколько десятков функций, доступных программисту на C++.

Вот что получилось
Всего голосов 25: ↑25 и ↓0+28
Комментарии13

Все числа равны, но некоторые равнее. Как в Python сравниваются Int и Float

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

Ещё одна причуда Python, исследование её подноготной и попытка понять, почему так случается.

Недавно в сети X был популярен этот твит (см. скриншот), и я обратил внимание. Это очередной сюрприз в Python, связанный с характерными для него уникальными деталями реализации.

Читать далее
Всего голосов 38: ↑36 и ↓2+42
Комментарии31

Как делать бинарно-совместимые API на компилируемых языках

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


При разработке продукта на компилируемом языке (таком как C или Rust) рано или поздно может наступить момент, когда нужно разделить продукт на несколько компонентов, развивающихся независимо, или дать возможность расширять функциональность плагинами, разрабатываемыми отдельными коллективами или сообществом.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+13
Комментарии8

Объявляю ошибку вида if (x = 42) вымирающей и заношу её в Красную книгу C и C++ багов

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

Редкий вид бага
Если спросить программиста, какие баги чаще всего можно встретить в C и C++ коде, он назовёт разыменование нулевого указателя, неопределённое поведение, выход за границу массива и другие, на его взгляд, типовые паттерны ошибок. Скорее всего, он назовёт и случайное присваивание в условии. Но действительно ли эта ошибка распространена в наше время?

Читать дальше →
Всего голосов 58: ↑57 и ↓1+77
Комментарии87

Архитектура Xорошего Кода Прошивки (Массив-Наше Всё)

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

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

Основная идея - массив наша основная скрепа.

Главные достоинства представленной архитектуры - это простота поддержки, сопровождения и масштабирования кодовой базы.

Читать далее
Всего голосов 11: ↑9 и ↓2+11
Комментарии30

Как я реализовывал алгоритм маскирования для протокола WebSocket на Wolfram Language и подключал Си-библиотеку

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

Всем привет! Эта статья - про очень простой алгоритм маскирования данных при пересылке по протоколу WebSocket. Но рассказать я хочу не про сам алгоритм, а про путь оптимизации, который я прошел, чтобы сделать его эффективным. Я до сих пор уверен, что можно еще лучше и если так, то надеюсь уважаемые читатели мне подскажут! Приступим...

Читать далее
Всего голосов 5: ↑5 и ↓0+6
Комментарии1

Идеальный алгоритм шифрования? HASH-CRYPT (1 часть)

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

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

> ENCRYPT <
Всего голосов 8: ↑4 и ↓4+3
Комментарии30

КодоГенератор Линейных Отображений (как ускорить создание ASIC драйвера)

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

В программировании микроконтроллеров на Си часто приходится писать драйверы для умных и навороченных ASIC чипов с управлением по I2C/SPI/MDIO интерфейсам.

Обычно перед запуском эти чипы надо правильным образом сконфигурировать.

Такие чипы всегда оперируют с реальными физическими величинами. Одновременно с этим ячейки памяти этих ASIC чипов - дискретные, двоичные. Поэтому все производители микросхем кодируют эти переменные бинарными кодами разной разрядности.

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

Читать далее
Всего голосов 6: ↑4 и ↓2+2
Комментарии23

Дневник альтруиста. dfu-util

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

В данной статье я рассмотрю подключение утилиты dfu‑util, написанную на языке С, к С++ проекту на CMake в виде сабмодуля.

Одна из главных целей статьи — это подключение старого и типового кода на С к своему проекту. Здесь приведены проблемы генерируемых файлов, борьба с кодом незнакомого разработчика (особенно если это разработчик на Си), особенности портирования окружения на Windows и т. д.

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

* Превью сгенерировано с помощью Adobe Firefly

Читать дальше ->
Всего голосов 6: ↑5 и ↓1+6
Комментарии7

Мощный инструмент для работы с GCOV покрытием кода C/C++

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

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

Скорее всего то, о чем я сейчас расскажу, уже было реализовано и не единожды.

Но пусть это все равно лежит здесь, возможно эта статья будет кому-то полезна в качестве методического материала или HOWTO. Все, сказанное ниже является продуктом моего текущего опыта разработки и не претендует на идеальное решение.

Читать далее
Всего голосов 6: ↑6 и ↓0+9
Комментарии15

Разработка вредоносного ПО для MacOS: инъекция и закрепление шелл-кода на конечном устройстве

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

Мы продолжаем тему о проектировании и разработке вредоносного ПО для macOS. Первую часть публикации вы можете прочитать здесь. 

В этой статье мы:

- Изучим методики инъецирования кода и то, как он применяется в вредоносном ПО;

- Затронем способы обеспечения постоянства хранения;

- В конце мы покажем простой процесс инъецирования шелл-кода и его постоянного хранения. 

Читать далее
Всего голосов 20: ↑20 и ↓0+24
Комментарии0

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

Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Разработка вредоносного ПО для MacOS: создание заготовки

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

В этой статье мы погрузимся в мир проектирования и разработки вредоносного ПО для macOS, которая по сути является операционной системой на основе Unix. При исследовании внутренностей системы Apple мы воспользуемся классическим подходом с опорой на базовые знания эксплойтов, программирования на C и Python, а также знакомство с низкоуровневым языком ассемблера. Хотя представленные в статье темы могут быть сложными, я постараюсь изложить их понятным языком.

Читать далее
Всего голосов 12: ↑12 и ↓0+15
Комментарии2

11 мгновений ReactOS: user mode становится лучше?

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

ReactOS — это проект, где победу над регрессией, появление новой фичи или её рабочего прототипа празднуют так громко, что FOSS‑сообществу приходится отвлекаться от переписывания всего на Rust и полемик о systemd. В последний раз мы проверяли ReactOS в 2013 году, почти одиннадцать лет назад. Проверка была неточной ввиду неполного понимания структуры папок, из‑за чего в поле видимости PVS‑Studio оставались компоненты Wine. Пришло время освежить память и провести новую проверку, учитывая опыт предыдущей недоработки.

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

regexp — большие гонки

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

Так или иначе сталкиваться с регулярными выражениями приходилось большинству разработчиков. Мое первое знакомство произошло с реализацией regex в STL std::regexp. Чаще всего регулярки используются в проверке входных данных, что-то вроде проверки корректности введенного пользователем URL, адреса IPv4, адреса IPv6, телефонного номера и при этом скорость выполнения операции regex не сильно влияет на время отклика от приложения. Но, что если вам приходится проверять сотни, тысячи или даже десятки тысяч правил и все это на постоянно меняющихся наборах входных данных в реальном времени? В этой ситуации вам не просто нужен быстрый алгоритм, вам понадобится лучший из них, вам понадобиться чемпион!

Участвовать в заезде!
Всего голосов 18: ↑17 и ↓1+23
Комментарии27

IBM i: системные очереди данных

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

IBM i (AS/400) является "объектной" системой, построенной на концепции "все есть объект". У каждого объекта есть имя (может меняться в течении его жизненного цикла), тип (устанавливается единожды при создании и далее не меняется) и, в некоторых случаях, атрибуты ("подтип", аналогично типу, устанавливаются при создании и не могут быть изменены). Также объект может иметь текстовое описание (необязательное) - строка до 50-ти символов, которое может быть задано как при создании, так и после.

Действия, разрешенные над данным конкретным объектом, определяются его типом. Простейший пример - тут нельзя открыть программу в hex редакторе и поправить пару байтиков - такая операция просто не предусмотрена для объекта типа *PGM.

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

Цитата из предисловия к книге Френка Солтиса "Основы AS/400":

Читать далее
Всего голосов 5: ↑5 и ↓0+6
Комментарии15

Контроллер управления аттенюаторами Agilent/Keysight 8494H и 8496H

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

Приветствуем!

Так получилось, что нам достались два аттенюатора Agilent 8494H и 8496H. Они долго лежали без дела, поскольку отсутствовал контроллер управления. Конечно, четыре простых переключателя справились бы с этой задачей, но хотелось реализации с дисплеем показывающий текущее значение затухания и программное управление. Проект сделан в EasyEDA и Atmel Studio.

Читать далее
Всего голосов 10: ↑10 и ↓0+12
Комментарии4

Standard Time как его видит IBM

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

Более 6-ти лет занимаюсь разработкой под IBM i (бывшая AS/400). В основном, конечно, это работа с БД и разная бизнес-логика, но иногда приходится и что-то низкоуровневое писать.

Не так давно занимался разработкой удобного и простого в использовании API для работы с User Queue (есть на АС-ке такой системный объект - очередь *USRQ). И в заголовке извлекаемого из очереди сообщения есть такой параметр - message enqueue time (время размещения сообщения в очереди). Который описан как _MI_Time. Которое, в свою очередь, определено как

Читать далее
Всего голосов 18: ↑17 и ↓1+23
Комментарии29

PHP/FI 1. Personal Home Page Tools/Forms Interpreter

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

История зарождения PHP

История PHP начинается не с полноценного языка программирования, а с набора CGI-скриптов на C, известного как PHP/FI 1. В этой статье мы возвращаемся к истокам PHP, рассматривая его первую версию, её компиляцию и функциональность.

Читать далее
Всего голосов 22: ↑22 и ↓0+26
Комментарии8
1
23 ...

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

Работа

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