Обновить
117.37

C *

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

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

Mibro Watch Lite3 — тюним крутой .elf циферблат

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

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

Читать далее

Первый опыт портирования open-source прошивки на отечественный микроконтроллер К1946ВК035

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

Привет всем любителям схемотехники и программирования микроконтроллеров!
Мы начинаем цикл статей о работе с отечественным микроконтроллером К1946ВК035 — тем самым, который всё чаще мелькает в разговорах про импортозамещение, но пока ещё редко встречается «вживую» в рабочих проектах.

И начать мы решили с испытания на прочность: портирования популярной open-source прошивки AM32 для управления бесколлекторными двигателями. Здесь не обойдёшься простым «собрал и прошил» — все подробности и ещё много интересного ждут вас в этой статье.

Читать далее

Низкоуровневый АД: пишем свою ОС — Часть 1. Загрузчик и стартовое ядро

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

Всем здрасте, и сегодня мы начнем наше прохождение через низкоуровневый кодинг - написание ОС. Сегодня мы напишем загрузчик (точнее конфиг к GRUB) и простенькое ядро, которое будет выводить "Hello OSDev!"

Что нам понадобится:

Сделать ОС

MemorySanitizer (MSAN), когда он нужен и как внедрять

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

По разным оценкам, до 10% уязвимостей в коде на C и C++ являются следствием использования неинициализированной памяти (источники: 1, 2). Задача MemorySanitizer (далее, MSAN) - выявлять использование неинициализированной памяти в коде, то есть мусора, например в блоке кода типа if (uninit_var) {...}. Кроме уязвимостей, неинициализированная память даёт о себе знать при портировании приложения на другую платформу, смене компилятора (или поднятии версии используемого), изменении уровня оптимизации или изменении кода таким образом, что то, что раньше "случайно" инициализировалось нулями, стало инициализироваться мусором.

MSAN не является статическим анализатором, то есть для его работы требуется выполнение кода (нужны тесты/fuzzing/реальная нагрузка). Прежде чем переходить к самому MSAN, сначала разберемся почему недостаточно (или достаточно?) статического анализа, ведь даже компиляторы умеют предупреждать об использовании неинициализированных данных.

Читать далее

Устройства, которые мы потеряли: Как Siemens C65 стал культовым гиковским гаджетом

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

Телефоны Siemens в наших краях получили статус культовых. Если сейчас отмотать время на 2005 год и подойти к случайному школьнику или студенту, то с высоким шансом в его руках окажется какой-нибудь M65 или C65. И отнюдь неспроста: «Сименсы» славились инновациями, неплохими мультимедийными возможностями и невысокой ценой. Однако особо смышленым, но не шибко богатым ребятам всё равно хотелось большего — и толпой они накинулись изучать прошивку в дизассемблере...

В практической части мы с вами узнаем: что у C65 было внутри, изготовим кабель, пропатчим и добавим желанную поддержку MP3-мелодий.

Читать далее

Операционная система от А до Я: Планировщик

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

Планировщик — мозг операционной системы. Его задача: решать, какая задача выполняется сейчас, и по каким правилам выдавать процессор другим задачам. Для embedded систем это особенно критично: ресурсы ограничены, реальное время важно, а поведение должно быть предсказуемым.

Это вторая из цикла статей про создание микроядерной операционной системы. В прошлой статье рассматривался таймер и HAL. Для вновь пришедших необходимо сначала ознакомиться с ней: ссылка.

Читать далее

Прием и парсинг NMEA-данных от GPS-приемника

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

Прием и парсинг NMEA-данных от GPS-приемника, а также, рассмотрение работы разных типов GPS (UART и RS-232): как правильно подключить модуль к микроконтроллеру STM32.

Читать далее

ARM Cortex-M: Исполнение кода из RAM памяти

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

В программировании ARM Cortex-M микроконтроллеров обычно код исполняется из on-chip NOR Flash памяти.

Однако иной раз надо разместить Си-функции в RAM памяти.

В этом тексте я написал как запустить функцию из оперативной памяти.

Читать далее

Датчик оптического потока -MTF02

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

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

Читать далее

Операционная система от А до Я: Таймер и HAL

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

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

Читать далее

Оптический датчик PAT9125

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

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

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

Читать далее

IOCCC: Best of Show 2018

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

Продолжаю разбирать эпические работы «International Obfuscated C Code Contest», в этот раз рассказ пойдет о победителе 2018 года.

Читать далее

Небольшое ретро-программинг приключение, или как я снова полюбил кодить

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

Когда много лет руководишь командами, легко забыть, каково это — просто сесть и закодить что‑то самому.

Эта статья о том, как я сделал фэнтези‑консоль под DOS, и снова влюбился в программирование.

Читать далее

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

Резонансный регулятор

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

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

Символический метод анализа цепей

Как построить открытую АСУТП. Архитектура программного ПЛК. Демонстрация работы среды исполнения

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

Добрый день! Меня зовут Иван Ярцев, я — архитектор автоматизированных систем управления технологическим процессом (АСУ ТП) в ИТ-компании «Северсталь», занимающейся разработкой компонентов для открытой АСУТП.

В этой статье рассмотрим архитектуру программного программируемого логического контроллера (ПЛК), а также самостоятельную сборку среды исполнения из исходников и запуск её из готовых сборок. Самостоятельную сборку опишем на примере российского одноплатного компьютера Repka-pi, имеющего архитектуру aarch64.

Читать далее

GPIO — тоже интерфейс, а также QEMU GPIODEV и GUSE

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

Когда-то в отделе разработки встраиваемого ПО в YADRO мне задали вопрос: «А как с этим взаимодействовать?». Речь шла в первую очередь о I2C для QEMU, а не GPIO. И я некоторое время был одержим идеей «прозрачного» взаимодействия с устройствами внутри QEMU — использовать те же библиотеки и инструменты, как и для реальных устройств, что может быть прекраснее? Не какой-то там скрипт для посылки команды по QMP, а знакомый и целостный gpioset/gpioget из библиотеки libgpiod или поставляемые с ядром инструменты из tools/gpio.

Получилось ли это у меня? Да, но какой ценой…

Читать далее

Лифт-убийца, некомпетентность и причём здесь Ардуинщики

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

Случайно наткнулся на видео про лифт убийцу на Arduino. В этом видео автор показывает, как некая компания выполнила заказ по разработке и установке лифта для инвалидов. То , что там было сделано, это пример преступной некомпетентности разработчиков.

Читать далее

Быстрый старт контроллера шаговых двигателей SMSD–4.2CAN в режиме драйвера

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

Приводятся инструкции, которые помогут сделать первые шаги в экспериментах с контроллером в режиме драйвера шагового двигателя SMSD–4.2CAN под маркой НПО «Электропривод». Это настройка контроллера в режиме драйвера и запуск шагового двигателя с помощью программы CANopen Builder Limited v1.0, запуск двигателя из консоли, программ, написанных на языках С++ и Java, в которых потребуется библиотека CHAI для преобразователя интерфейсов USB–CAN ГКМН.468351.017-03 КБ «Марафон».

Первые две части представляют собой расшифровку лекций прочитанных Белобородовым А.В. и Харьюзовым П.Р. в 2024–2025 годах.

Читать далее

Продвинутое использование препроцессора в C и C++

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

Зачастую, в проектах ограничивается использование препроцессора по следующим причинам:

— Он не похож на весь остальной язык;
— Макросы могут возвращать неполные синтаксические конструкции, или вовсе различные, в зависимости от параметров.

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

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

Читать далее

Embedded Linux для начинающих — Часть 2

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

В первой статье мы разобрались с базовыми терминами: что такое Embedded Linux, чем он отличается от обычного дистрибутива, из чего состоит, как происходит его загрузка и с помощью каких инструментов всё это можно собрать.

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

Пришло время перейти от теории к практике!

Читать далее

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