Данная статья посвящена разработке GPIO (General-Purpose Input/Output) модуля ядра Linux. Как и в предыдущей статье мы реализуем базовую структуру GPIO драйвера с поддержкой прерываний (IRQ: Interrupt Request).
Рубрика «Разработка под Linux» - 36
Пишем модуль ядра Linux: GPIO с поддержкой IRQ
2018-08-13 в 18:02, admin, рубрики: C, gpio, linux, sysfs, Разработка под LinuxМонитор заказов вместо кухонного термопринтера
2018-08-03 в 14:03, admin, рубрики: FrontOffice erp, python, периферия, Разработка на Raspberry Pi, Разработка под Linux
Небольшой квест о замене кухонного принтера заказов в ресторане на табло заказов 24" монитор с raspberryPi за вечер. Это актуально практически для любой системы erp (все современные 1С системы в торговом оборудовании поддерживают чековые принтеры, аналогично и с другими системами).
Читать полностью »
Насколько эффективна виртуальная файловая система procfs и можно ли ее оптимизировать
2018-08-01 в 17:36, admin, рубрики: containers, CRIU, file systems, linux, linux kernel, open source, procfs, virtuozzo, Блог компании Virtuozzo, Разработка под Linux, Серверная оптимизация, системное программированиеФайловая система proc (в дальнейшем просто procfs) является виртуальной файловой системой, которая предоставляет информацию о процессах. Она — “прекрасный” пример интерфейсов следующих парадигме “все является файлом”. Procfs была разработана очень давно: во времена, когда серверы в среднем обслуживали несколько десятков процессов, когда открыть файл и вычитать информацию о процессе не было проблемой. Однако время не стоит на месте, и сейчас серверы обслуживают сотни тысяч, а то и больше процессов одновременно. В таком контексте идея “открыть файл для каждого процесса, чтобы вычитать интересующие данные” уже не выглядит такой привлекательной, и первое что приходит на ум чтобы ускорить чтение — это получение информации о группе процессов за одну итерацию. В этой статье мы попробуем найти элементы procfs которые можно оптимизировать.
Основы работы с фьютексами
2018-07-30 в 15:54, admin, рубрики: C, futex, Блог компании Инфопульс Украина, параллельное программирование, Разработка под Linux, системное программированиеФьютекс (futex — сокращение от «Fast userspace mutex») — это механизм, предложенный разработчиками Linux из IBM в 2002 году и вошедший в ядро в конце 2003 года. Основной идеей было предоставить более эффективный способ синхронизации пользовательских потоков с минимальным количеством обращений к ядру ОС.
В этой статье мы сделаем обзор фьютексов, попытаемся понять принципы их работы, а также используем их в качестве кирпичиков для построения более высокоуровневых (и знакомых нам) объектов синхронизации.
Важный момент: фьютексы — это достаточно низкоуровневый инструмент, напрямую его использовать стоит лишь при разработке фундаментальных библиотек, вроде стандартной библиотеки C/C++. Очень маловероятно, что вам понадобится использовать фьютексы в обычном прикладном приложении.
Читать полностью »
GObject: инкапсуляция, инстанциация, интроспекция
2018-07-27 в 12:28, admin, рубрики: C, foss, glib, gnome, GNU, gobject, GTK+, linux, UNIX, ооп, Разработка под Linux… а также другие страшные слова! (с)
Прежде чем мы познакомимся с некоторыми продвинутыми возможностями объектной системы типов GLib, необходимо поговорить о ряде моментов, которые мы не затронули в предыдущих двух статьях. В этот раз мы познакомимся ближе с базовым типом GObject, поговорим о том, что любой наследник базового GObject представляет собой двуединство (а зачастую триединство) отдельных объектов-структур, во что раскрываются загадочные макросы в начале заголовочных файлов и файлов с исходным кодом, при помощи какого инструментария работает суровый местный RTTI, почему у GObject и его потомков два деструктора (и три конструктора), равно как и о ряде других интересных мелочей.
Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 4.3
2018-07-27 в 6:07, admin, рубрики: boost, borland c++ builder, c++, c++03, c++11, c++98, gcc, loki, open source, QNX, sfinae, Visual Studio, велосипедостроение, грязные хаки, Компиляторы, кроссплатформенная разработка, макросы, ненормальное программирование, Разработка под Linux, Совершенный код, стандартная библиотека, шаблонное программирование
Краткое содержание предыдущих частей
Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.
Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.
Настало время type_traits и всей этой «особой шаблонной магии». В предыдущих частях данной главы мы рассмотрели мою реализацию базовых шаблонов стандартной библиотеки и в данной части речь пойдет про комбинацию техники SFINAE с шаблонами и немного о кодогенерации.
Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Больше шаблонов C++ под катом.
Читать полностью »
Как разыграть соседа по комнате
2018-07-24 в 13:59, admin, рубрики: linux, Ubuntu, Настройка Linux, Разработка под Linux, розыгрышОт переводчика
Студент Университета Тафтса рассказывает, как подкалывал своего соседа по комнате. Он даже меня подколол, когда начал свою историю с того, что у них в общаге висит 4K-телевизор.
Читать полностью »
Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 4.2
2018-07-23 в 15:36, admin, рубрики: boost, borland c++ builder, c++, c++03, c++11, c++98, gcc, loki, QNX, sfinae, Visual Studio, велосипедостроение, грязные хаки, Компиляторы, кроссплатформенная разработка, макросы, ненормальное программирование, Разработка под Linux, разработка под windows, Совершенный код, стандартная библиотека, шаблонное программирование
Краткое содержание предыдущих частей
Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.
Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.
Настало время type_traits и всей этой «особой шаблонной магии». В первой части мы рассмотрели мою реализацию самых простых шаблонов стандартной библиотеки, теперь же заберемся «поглубже» в шаблоны.
Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Продолжение погружения в мир «шаблонной магии» C++.
Читать полностью »
Brain Trainer Qt (Учимся считать в уме или проект выходного дня)
2018-07-22 в 12:40, admin, рубрики: c++, linux, qt, Разработка под LinuxНаткнулся на посты, где очень бурно обсуждалась тема эффективного счета в уме
Один, Два
Тема заинтересовала и я начал искать программы и сервисы для тренировки
В скором времени пришло осознание, что быстрее написать свое приложение, под свои хотелки и с кнопками где мне удобно, + перспектива переноса на любимый Windows Phone
Для тех кому интересно посмотреть/покритиковать — добро пожаловать под кат
Читать полностью »
Доброго дня!
Недавно столкнулся с задачей ротации каналов связи, суть в том, что есть основной канал связи, есть резервный. Реальная задача, из реальной жизни, а так навеяло студенческими годами.
Приступим к делу? Задача реализовать переключение канала связи на резервный, при падении основного канала. Но при этом всем необходимо учесть возможность возврата к основному каналу (при его восстановлении).
Как говорится, глаза бояться, руки делают.
Читать полностью »