Таблетка от жадности для производителей струйных принтеров
kayo — Чт, 15/03/2018 - 16:18
Пожалуй, трудно найти более капризные периферийные устройства, чем струйные принтеры. Мало того, что они ввиду принципа работы и специфичности конструкции сами по себе нуждаются в постоянном внимании и кропотливом уходе, так ещё и производители хорошенько постарались усложнить жизнь пользователям, создав им как можно больше неприятностей. Этот опус будет посвящён второму роду проблем, которые взялись из ниоткуда стараниями производителей.
Продвинутая оптимизация исполняемого кода с GCC
kayo — Пт, 16/06/2017 - 16:33
Под оптимизацией компилируемых программ можно понимать два аспекта. Первый важный аспект - это труд самого разработчика над совершенствованием реализаций алгоритмов в программе. Второй не менее важный - возможности инструментария разработки генерировать более оптимальный исполняемый код. В этом посте речь пойдёт о втором аспекте, поскольку он не требует особых усилий от разработчика и позволяет получать хороший результат прямо здесь и сейчас.
Формируем дескрипторы отчётов HID по-человечески
kayo — Пнд, 01/05/2017 - 01:19
Разрабатывая USB или Bluetooth периферию, довольно часто требуется реализовать интерфейс HID. В этом посте мы будем делать это по-человечески, а не так, как все…
Простой декларативный DSL средствами GNU Make
kayo — Сб, 11/06/2016 - 09:15
Мы, программисты, всегда стремимся к простоте, краткости и лаконичности нашего кода. Это связано с тем, что чаще приходится его именно читать, а не писать. Именно по этой причине мы предпочитаем декларативные языки императивным, если постановка задачи даёт нам такую возможность. А если же нет? И всё непременно должно быть написано на языке C? Тогда мы изобретаем различные прикладные языки, так называемые DSL. В этой статье мы реализуем один из таких прикладных декларативных языков для генерации низкоуровневого кода на языке C.
ARM CMSIS SVD + GDB + Python
kayo — Вс, 08/05/2016 - 01:36
Настало время научить отладчик GDB на платформе ARM исследовать периферию. Да-да, мы будем потрошить регистры устройств ввода-вывода на уровне отдельных полей, в том виде, как они представлены в документации.
Симуляция схем на ОУ в ngSpice
kayo — Втр, 22/03/2016 - 18:29
Симуляторы электронных схем незаменимы в разработке железа, поскольку позволяют верифицировать предварительные расчёты с использованием моделей электронных компонентов, которые ведут себя подобно железным экземплярам. Традиционно для симуляции применяют программы, подобные симулятору Spice. Мы уже коснулись работы с ним в одной из прошлых статей, теперь же попробуем сотворить более сложные вещи.
Простой способ генерации бинарных файлов с GNU toolchain
kayo — Ср, 06/01/2016 - 15:26
В разработке для встраиваемых систем зачастую возникает необходимость в создании бинарных файлов с произвольным содержимым. Например, это могут быть образы EEPROM с начальными настройками или образы файловых систем, хранимые в выделенной области Flash памяти. С первого взгляда задача тривиальная, но почему-то для её решения все пишут свои велосипеды на C или Python. Не знаю, с чем это связано, но я всегда ратовал за использование уже имеющихся инструментов пусть и не совсем в устоявшейся манере.
Сказ про GCC и продвинутые вычисления во время компиляции
kayo — Чт, 17/12/2015 - 04:02
Вычислениями во время компиляции сегодня уже никого не удивишь, большинство известных компиляторов умеют вычислять константные выражения. И эта весьма полезная оптимизация может быть использована для немного более продвинутых вещей, чем принято считать.
Постойте, речь же идёт не о продвинутых языках типа C++, D или Haskell, а всего-навсего о языке C! Да-да, нет никакой ошибки, в этот раз мы будем рушить стереотипы. Мы заставим известный компилятор языка C из коллекции GNU извиваться змеёю, и вычислять функции с циклами во время компиляции.
Организуем индексы на движке LMDB
kayo — Втр, 24/11/2015 - 16:40
Системы управления каталогами, вроде LDAP, и прочие иерархические СУБД нуждаются в хранилищах значений по ключу с быстрой выборкой и транзакционностью. Традиционно для организации встроенных баз данных использовалась Berkeley Database (BDB). Однако, в настоящий момент этот движок БД столкнулся с существенными ограничениями своей внутренней архитектуры, которые не могут быть преодолены эволюционным путём. В этой заметке мы коснёмся нового движка баз данных LMDB, который может послужить серьёзной альтернативой BDB во многих проектах.
Скриптуем под OpenWRT
kayo — Вс, 22/11/2015 - 02:24
Не смотря на некоторую свою специфичность, встраиваемый дистрибутив OpenWRT — вещь достаточно универсальная. Возможности его вовсе не ограничиваются организацией сетевого маршрутизирующего устройства, а ограничиваются они только потребностями пользователя и фантазией разработчика. Мы попытаемся совместить полезное с приятным: реализовать специфичные варианты использования с помощью скриптов на языке Lua.
