[Перевод] Поворотный энкодер: насколько сложен он может быть

Как вы могли заметить, я давно работаю с процессором STM32 ARM при помощи Mbed. Были времена, когда Mbed был весьма прост, но многое изменилось с тех пор, как он превратился в Mbed OS. К сожалению, это означает, что многие примеры и библиотек…

arr[-1] или самые редкие конструкции в С

Топ 22 самых редких конструкций языка С. От макросов с аргументами до каламбура типов — найдётся применение каждой. tmpfile() вступает в силу! Читать далее…

Как я искал клавиатуру с нужным функционалом и в итоге решил создать свой драйвер

Сразу пишите в комментариях, что вас больше всего бесит в клавиатурах для PC. Внесу пожелания в техзадание, если это будет возможно. Какой вы видите идеальную клавиатуру для ПК? Читать далее…

Храним настройки правильно или реестр параметров для встраиваемых систем

Привет, Хабр! В нашей практике разработчиков электронных устройств и встраиваемых систем мы часто сталкиваемся с необходимостью хранить параметры устройства. Это могут быть, например, такие параметры как яркость дисплея, язык, рабочая частота радиокана…

[Перевод] Приёмы неблокирующего программирования: введение в compare-and-swap

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

EDSAC aka «Very simple machine»

Обучаясь в техническом вузе невольно сталкиваешься с такими профильными предметами, как например «низкоуровневое программирование». Первые ассоциации — конечно ассемблер, во вторую очередь — C и C++. Но не тут то было, вашему вниманию представляется эл…

EDSAC (только для самых суровых)

Что приходит Вам в голову, когда Вы слышите “низкоуровневое программирование”? Может быть, C++? Непрекращающийся контроль указателей, попытки оптимизации быстродействия, потребляемой памяти? Или, вероятно, вы представляете инструкции ассемблера какой-н…

[Перевод] Приёмы неблокирующего программирования: полные барьеры памяти

В первых двух статьях цикла мы рассмотрели четыре способа упорядочить доступ к памяти: load-acquire и store-release операции в первой части, барьеры чтения и записи в память — во второй. Теперь пришла очередь познакомиться с полными барьерами…

[Перевод] Неблокирующие паттерны: атомарные операции и частичные барьеры памяти

В первой статье цикла мы познакомились с простыми неблокирующими алгортимами, а также рассмотрели отношение “happens before”, позволяющее их формализовать. Следующим шагом мы рассмотрим понятие «гонки данных» (data race), а также примитивы, которые поз…

[Перевод] Введение в неблокирующие алгоритмы

Неблокирующие алгоритмы широко применяются в ядре Linux когда традиционные примитивы блокировки либо не могут быть использованы, либо недостаточно быстры. Эта тема многим интересна и время от времени всплывает на LWN. Из недавнего — вот эта июльская ст…