Обновить
165.33

Программирование микроконтроллеров *

Учимся программировать микроконтроллеры

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

Про открытость АСУ ТП по мотивам дискуссий в комментариях

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

В этой статье я изложил своё видение, что такое открытая автоматизированная система управления технологическими процессами (АСУ ТП), почему этой теме уделяется так много внимания со стороны промышленных заказчиков и ведущих мировых вендоров. Разобрал несколько наиболее распространенных критических аргументов от скептиков из профессионального сообщества.

Читать далее

Новости

Структуры данных на практике. Глава 5: Связанные списки — убийцы кэша

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели8.5K

«Связанные списки — это goto структур данных.», — авторство приписывают разным системным программистам.

История из учебника

Все студенты, изучающие computer science, узнают о связанных списках на первом курсе по структурам данных. Их описание звучит привлекательно:

Преимущества (согласно учебникам):

- Вставки и удаления за O(1) в известных позициях

- Динамический размер: увеличиваются и уменьшаются согласно необходимости

- Пространство не тратится впустую: можно распределять ровно столько, сколько нужно

- Гибкость: простота реализации стеков, очередей и других структур

Недостатки (согласно учебникам):

- Поиск за O(n): необходим обход, начиная с головы списка

- Лишняя память: указатели добавляют оверхед

- Невозможность произвольного доступа: нельзя выполнять переходы в произвольные позиции

Вывод из учебника: «Используйте связанные списки, когда требуются частые вставки/удаления и не нужен произвольный доступ».

Вроде бы звучит разумно?

Проверка реальностью

А вот, чего учебники нам не говорят: связанные списки — это почти всегда плохой выбор.

Не потому, что ошибочен анализ «О» большого, в нём всё правильно, а потому, что он неполон. Он забывает про оборудование.

Читать далее

Типовая разметка памяти STM32

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

Как Вы могли заметить, у микроконтроллеров STM32F4 секторы NOR Flash памяти обладают разным размером: 16kByte(4 шт), 64kByte (1 шт), 128kByte ( 7+ шт.).

Это накладывает определенную специфику на программирование микроконтроллеров STM32F4.

Из каких секций обычно состоит Flash память микроконтроллерной программы?

В этом тексте я предлагаю решение проблемы разметки памяти для случая работы с микроконтроллерами STM32F4.

Читать далее

ESPB — брат WASM. JIT всемогущий

Время на прочтение7 мин
Охват и читатели7.7K

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

Со времени первой публикации прошло ровно 3 месяца. За это время переработал многое: добавил полноценный JIT для Xtensa и RISC-V, внедрил кучу оптимизаций в транслятор. Все это старательно тестировал на чипах ESP32, ESP32-C3 и ESP32-C6 (последний — по остаточному принципу, запустил только основной тест, главная отладка шла на первых двух).

Встречайте главные нововведения.

Читать далее

Незаконченный полёт — часть 2: biDshot, или Как я разговорил регулятор

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

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

Читать далее

Реальный Real-time: управление ориентацией без фазовых задержек на быстрых МК

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

В задачах стабилизации и высокоточного наведения присутствуют постоянные проблемы — классические алгоритмы (вроде PID-регуляторов) на высоких скоростях либо начинают звенеть из-за шумов дифференциальной составляющей, либо безнадежно отстают от динамики цели из-за фазового лага. С другой стороны, попытки внедрить туда тяжелые нейросети разбиваются о нехватку ресурсов микроконтроллера и неприемлемые задержки вычислений (latency).

Я разработал алгоритм управления, в основе которого лежит легковесное рекуррентное нейро-алгебраическое ядро. Оно работает напрямую с матрицами вращения в топологическом пространстве SO(3), что позволяет избежать множества проблем классической аппроксимации.

Читать далее

Незаконченный полёт

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

Ровно полгода назад, 18 августа 2025 года, я опубликовал здесь свою первую статью о портировании прошивки AM32 на отечественный микроконтроллер К1946ВК035.

Ссылка на статью - https://habr.com/ru/articles/938128/

Те, кто читал ту статью (а таких людей, уверен, немного), помнят: не весь функционал удалось портировать с сохранением исходной производительности из-за некоторых ограничений в работе периферийных модулей отечественного микроконтроллера.
Напомню суть проблемы: микроконтроллер слишком часто уходит в прерывания для обработки входящих сигналов DSHOT, которые мы пытались обрабатывать сугубо софтварно, без применения DMA (но с небольшими хитростями). Отсюда и проблемы со своевременной обработкой сигналов других частей программы.

Читать далее

Шестибитный процессор без единой картинки

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели5.1K

Всем привет, всем крепких нервов, решительности, смелости, силы воли и упорства. Ощущение «что-то страшное грядёт» довлеет всем настолько, что любая креативность убивается на корню. Однако, наш рептильный мозг редко бывает прав. Давайте скажем кортизолу решительное «нет» и не будем самоубивать тот участок жизни, который у нас есть здесь и сейчас. Рептильный мозг не знает, что мы давно уже не в пустыне среди шушпанчиков и никакой потенциальной пользы «в случае чего» от тех решений, которые он навязывает, не будет — а будет один только вред.

Итак, встречайте: ядро микроконтроллера с шестибитными байтами. Глава первая: описание «на словах».

Это обычный «школьный процессор», на котором студентам показывают базовые принципы работы железа. Fetch, Sum, Jump… В принципе, это роднит его как с древнейшими процами, имевшими 8-16 команд, так и с современными, разной степени эзотеричности (вплоть до Single Instruction Set Computer, имеющий всего одну команду типа «инверсия указанного бита и затем безусловный переход на указанный адрес»). Но я решил вдруг, ХЗ с какого перепугу, придать ему практический смысл в нашем странном веке, когда даже в одноразовые вейпы лепят грошовые 32-битники, которые потом летят в помойку.

Дело в том, что проц, имеющий сложность уровня «за пригоршню КМОП-транзисторов», обладает одним свойством, которым эти девайсы обладать не могут ни с каким развитием технологий, потому что технологии уводят их всё дальше и дальше от обладания этим свойством: его можно реализовать зацело с устройством, которым он управляет. Да-да, на одном кристалле. Минус корпус, минус пайка, минус разводка и… минус питание.

Да я всё равно и на нём Doom запущу!

Программист микроконтроллеров: что спрашивают на собеседованиях

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели24K

В интернете есть много разных статей по решению задач с IT-собеседований, но на русском языке по программированию микроконтроллеров я видел только одну статью на Хабре. Недавно я менял работу: посещал много компаний и отвечал на вопросы по поводу различных аспектов моей профессии. По итогам этих и более ранних встреч решил написать о том, чем на собеседованиях могут озадачить программиста микроконтроллеров.

Дисклеймер: эта статья размещена в блоге YADRO, но список вопросов, выделенных в тексте, — это компиляция моего многолетнего опыта и десятков собеседований в разные компании. С наймом в конкретную компанию текст не связан.

Читать далее

Система функционального контроля для микросхем ADV7180BCPZ & ADV7343BSTZ

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

В данной статье я описал, как мы разрабатываем систему для функционального контроля микросхем ADV7180BCPZ (SDTV Video Decoder) и ADV7343BSTZ (Multiformat Video Encoder). Показана архитектура системы, общий алгоритм и сценарии тестирования.

Читать далее

Распознавание речи и голосовое управление на Repka Pi 4, автономная работа, real-time, нейросеть Vosk на базе Kaldi

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

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

В статье рассказано, как настроить локальное (автономно работающее) распознавание речи в реальном времени на микрокомпьютере отечественного Российского производства Repka-Pi 4 Optimal, на борту у которого есть всего 2 Гбайт оперативной памяти.

Рассмотрим такую работу на конкретных примерах и разберём подробно, как это работает. Дальше простор для фантазии и создания своих проектов открывается безграничный.

Читать далее

PID без математики: как просто понять P, I и D

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

PID-регулятор — частая проблема для начинающих в робототехнике: математика отпугивает. Но саму идею понять можно без формул. В этой статье я объясню P, I и D простыми словами и с визуализацией

Читать далее

Как компании закладывают риск провала ERP-проекта на этапе выбора платформы и интегратора

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

Когда речь заходит о выборе ERP-платформы и системного интегратора, почти всегда звучит слово «конкурс». Формально процесс выглядит структурированным: несколько поставщиков, демо, презентации, референсы, коммерческие предложения.

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

Не потому, что компании «не умеют выбирать».
А потому, что процесс выбора нередко начинается с инструмента, а не с методологии.

Иногда стартовая точка — это демо.
Иногда — список потенциальных вендоров.
Иногда — внутреннее ощущение, что «эти ребята выглядят сильнее».

Недавно я обсуждал проект с партнёром, который предложил:
«Давайте сделаем серию демо и на основе впечатления выберем».

В разговоре выяснилось, что на старте отсутствовали:

Читать далее

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

Обзор утилиты STM32CubeMonitor

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

У ST есть утилита STM32CubeMonitor , которая позволяет по SWD/JTAG следить за конкретными переменными в физической памяти (REG, RAM, ROM) микроконтроллера.

Передаешь STM32CubeMonitor *.elf файл и подключаешь по SWD Target. Причем эта Tool(а) позволяет строить графики по значениями переменных в памяти. Это как утилита ArtMoney в случае с взломом компьютерных игр на PC, только для микроконтроллера.

STM32CubeMonitor удобна при отладке систем автоматического управления (ПИД регуляторы), цифровых фильтров, триггеров Шмитта и прочей DSP обработки.

Читать далее

pineTERM — минималистичный, но мощный веб-терминал для UART

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

Перепробовал кучу софта для UART. Все бесит. Решил завайбить запилить свой.

pineTERM — минималистичный веб-терминал для UART, который не тормозит на длинных сессиях и не требует установки. Работает через Web Serial API: открыл браузер, подключился к порту, работаешь.

Основная боль существующих решений — они начинают фризиться, когда в логе сотни тысяч строк. pineTERM решает это батчингом DOM-обновлений и yield в main thread. Можно держать сессии часами с плотным потоком данных — интерфейс остаётся отзывчивым.

Ключевая фича — JSON-сценарии. Загружаешь файл с последовательностью команд, задаёшь задержки и повторы, выполняешь автоматом. Удобно для отладки протоколов и стресс-тестов.

Другие фичи: динамические поля ввода HEX/ASCII, автоформатирование hex-строк, тайминг пакетов с настраиваемым порогом, переключение HEX/ASCII на лету, экспорт полного лога без ограничений, тёмная/светлая тема.

Написан на чистом JS без фреймворков. Работает в Chrome, Edge, Opera.

Читать далее

STM32: Виртуальный COM порт на USB (Serial Over USB)

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели9.9K

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

Реализовать USB Virtual Com Port . Наладить двусторонний обмен текстом через TeraTerm между PC и STM32 по USB. Надо сделать так, чтобы при соединении электронной платы с STM32 и PC по USB lapTop-PC увидел на своей стороне в диспетчере устройств виртуальный последовательный порт.

Читать далее

Тип данных Real и его расхождение с реальностью при определении расстояния с помощью инкрементального энкодера

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

В этой статье описан наш опыт выявления причин ошибки в расчете положения подъемного сосуда в шахтном стволе по сигналам с инкрементальных энкодеров, который может быть полезен другим разработчикам, наладчикам и инженерам АСУТП, работающим не только с подъемным оборудованием, но и с любым другим, где малые приращения используются для расчета больших величин.

Начнем с небольшого погружения в предметную область. Наша организация специализируется на наладке шахтных подъемных установок, это, выражаясь совсем простым языком, «как лифт, только для шахты». Принцип действия подъемной установки, в целом, как у лифта — привод вращает барабан, на который наматывается канат, на который подвешен подъемный сосуд — бадья, клеть или скип, в зависимости от производственной задачи — проходка ствола или тоннеля, добыча полезных ископаемых или подъем/спуск людей. Основная часть подъемной установки — подъемная машина, это барабан с редуктором и приводом (их может быть два), тормозная система, а также системы управления, контроля и защиты.

На одной из таких подъемных машин, которую мы ввели в эксплуатацию и обслуживаем, положение подъемного сосуда для большей надежности контролируется одновременно двумя устройствами — САУ (Система автоматизированного управления) и АЗКД (Аппарат защиты и контроля движения). Для этого с каждого из двух датчиков углового положения вала — инкрементальных энкодеров, установленных на левом и правом редукторе (машина двухприводная), сигнал дублируется на счетные модули двух ПЛК (программируемых логических контроллеров), в САУ и в АЗКД, соответствующего канала, левого или правого. То есть, и в САУ, и в АЗКД установлено по два отдельных ПЛК, контролирующих так называемые левый и правый канал управления, относящиеся, соответственно, к левому и правому приводам подъемной машины, всего четыре ПЛК, из которых два ПЛК левого канала и в САУ, и в АЗКД получают данные с энкодера левого привода, а два ПЛК правого канала, соответственно, с правого.

Читать далее

Структуры данных на практике. Глава 4: Массивы и локальность кэша

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

«Массив — самая важная структура данных в computer science», — Дональд Кнут (вольное изложение цитаты)

Простейшая структура данных

Массивы настолько просты, что мы иногда воспринимаем их, как нечто само собой разумеющееся. Смежная память, доступ за O(1): что тут ещё оптимизировать?

Всё.

Я работал над конвейером обработки пакетов сетевого коммутатора. Код был простым: считываем пакеты из кольцевого буфера (массива), обрабатываем их и записываем результаты в другой массив. Всё просто, правда?

Но производительность была ужасной. Мы обрабатывали 100 тысяч пакетов в секунду, хотя оборудование должно было справляться с 1 миллионом.

Профилировщик показал нечто странное:

$ perf stat -e cache-misses,instructions ./packet_processor

Performance counter stats:

450,000 cache-misses

1,000,000 instructions

450000 промахов кэша на 1000000 команд? То есть промах происходил раз в 2-3 команды. При простых операциях с массивами это не имело никакого смысла.

Проблема заключалась не в самих массивах, а в том, как мы их использовали.

Читать далее

Робот Xiaozhi: беседа двух роботов

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

Дополнение к моей предыдущей мини-статье по роботу Xiaozhi. Я заказал детали и комплектующие, чтобы собрать такого робота самостоятельно. Сборка данного робота не доставляет существенных проблем.

Читать далее

Отладка STM32 программатором J-LINK по SWD

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

В разработке на микроконтроллерах широко распространены J-link программаторы-отладчики. Также доступно клиентское ПО для них Ozone. У J-link есть 20 пиновый разъём. На нем заложены пины для шины SWD и UART. SWD это - двухпроводной полудуплексный интерфейс для программирования микроконтроллеров.

В этой заметке я расскажу как прошить микроконтроллер STM32 по SWD шине при помощи программатора J-link.

Читать далее
1
23 ...