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

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

Близятся Новый год и Рождество, а значит, ёлки и всё связанное с ними: гирлянды, украшения и, разумеется, игрушки. Праздник слишком уж весёлый, и я решил, что ему не хватает мрачной игры, поэтому напечатал маленькую ёлочную игрушку в виде модели IBM PC, засунул в неё самый маленький ЖК-дисплей, который смог найти, добавил туда процессор и логику, а также аккумулятор. Это устройство может висеть на ёлке и показывать демонстрационный режим Doom со звуком и музыкой. Но и это ещё не всё: если подключить ней любую BLE-клавиатуру или джойстик, то можно будет самому убивать миллиметровых зомби, какодемонов и импов.

Представьте заголовок: “Китай запускает новую архитектуру RISC-X - ответ на санкции США”. Хороший кликбейт: есть драма, геополитика и слово "архитектура". Но если выключить кликбейт-режим, остаётся классический рецепт жареной утки: берём "а вдруг?", вырываем из контекста, добавляем три щепотки паники - и подаём как "уже решили!".
Спойлер: блокировать RISC‑V нельзя так же, как нельзя «отозвать» таблицу умножения. Это открытый стандарт (ISA), тексты опубликованы и лицензированы так, чтобы ими мог пользоваться любой, кто умеет читать и проектировать железо. Данная организация представляет собой швейцарскую ассоциацию RISC‑V International, что в значительной степени снижает геополитические риски. Хотите — форкните, назовите хоть RISC‑XXL, но экономически это как «играть в хоккей на льду в роликах с мячом, которого нет»: красиво звучит, играть неудобно, выиграть невозможно.
И этот миф мы разберем более подробно в нашем следующем материале. Всем заинтересованным - добро пожаловать под кат!

С моей точки зрения большинство разрабатываемых электронных плат работают под управлением микроконтроллера STM32. Если обобщить их схемотехнику, то можно кое-что вынести за скобки. Вот об этом сейчас и поговорим. Что должно быть заложено в каждую электронную плату на основе МК STM32? Само собой надо добавить квадратные первые пины на вилках, шелкографию, тест пады, симметричные отверстия 3мм по краям для крепления платы, удобный USB для питания и т.п. Но есть кое-что еще. Некоторые особенности проектирования PCB применимы только для STM32. Но обо всём по порядку.

Приветствую, Хабр!
Перед Новым годом для поднятия настроения до праздничного, захотелось сделать что-то необычное и новое. Все мы украшаем елку, ставим на вершину звезду, вешаем на ветки игрушки и ждем Деда Мороза. Женя, 41 годик.

Я увлекаюсь авиамоделизмом, в основном радиоуправляемыми моделями на бесколлекторных двигателях, но в последние годы данная сфера престала быть нишевой, и поэтому цены на компоненты заметно выросли. Без того дорогие проверенные бренды стали еще дороже, поэтому я все чаще выбираю более бюджетные аналоги с AliExpress или от малоизвестных производителей. Но тут возникает проблема: как убедиться, что дешёвый мотор выдаст заявленные характеристики, и будет надёжным в полёте?
Конечно, есть инструменты вроде Betaflight, которые отлично справляются с настройкой полётных контроллеров и дают данные о работе мотора по обратной ЭДС. Но я бы хотел получать дополнительно независимые данные о таких харакетритиках как RPM, потребляемый ток, напряжение, тяга двигателя и его температура.

Всем привет и наступающими! Захотелось тут сделать пару гаджетов для друзей в их умные дома. И что-то вдруг подумалось - а что они все скучные такие? Давайте же сегодня сделаем датчик в таком форм-факторе, в котором точно не купишь в магазине, будет отличный подарок на Новый Год или Рождество. Ну и ещё чтобы подарить было не стыдно.

Так сложилось, что программируя микроконтроллеры, разработчик балансирует между двумя крайностями. Все ресурсы под твоим полным контролем — и это кайф (думаю, многие в embedded за этим и идут). Но платой становится сложность встраивания базовых инструментов, которые стали де-факто стандартом в других областях разработки. Сложность хотя бы в том, что они не идут из коробки.
Возьмём обычную задачу: включить фару на устройстве.
На практике наша железка должна загрузиться, зарегистрироваться в LTE-сети, поднять TLS-соединение с MQTT-брокером, синхронизировать состояние и пройти ещё кучу слоёв бизнес-логики. С другой стороны — мобильное приложение и бэкенд для управления этой лампочкой (уже целая система собралась!). Там не меньше логики: от авторизации до “да кто блин так дизайн спроектировал?”. Пока дотапаешься до кнопки, пройдёт вечность.
В итоге, любое простое действие требует либо полного рабочего стека, либо моков с тестовыми сборками и отключёнными проверками. Либо дебагера с брейкпоинтами и ручными правками памяти. Всё работает, но каждый раз жрёт уйму времени и внимания.
Хотелось бы проще. Нужен способ аккуратно вмешаться в работу устройства — без отключения основной логики, без специальных сборок и независимо от режима. Не просто физическая кнопка, а полноценный интерфейс: настраивать параметры, включать/выключать функции, забирать данные.
И стало ясно: нам не хватает shell-интерфейса. Или CLI. Или терминала — называйте как угодно (разницу можно глянуть здесь). Но не просто не хватает — его придётся писать самим. Меня зовут Сергей Шилин, я руковожу разработкой электроники и встроенного ПО в Whoosh. Почему не взяли готовое и чем наш велосипед лучше — расскажу под катом!

(Дисклеймер: Заголовок — намеренная провокация. Но если ваша рука уже потянулась к клавиатуре, чтобы написать гневный комментарий о деградации инженерной школы — добро пожаловать под кат. Там мы разберемся, почему синяя платка из Италии победила академический снобизм и создала армию инженеров).
Представьте мир до середины нулевых. Вы — школьник, студент или просто энтузиаст, и вы хотите собрать простенького робота. Ваши действия?
Сначала нужно купить микроконтроллер (PIC или AVR). Затем найти программатор ($50–100) или паять LPT-«костыль» на коленке, рискуя сжечь порт материнской платы. Потом открыть даташит на 300 страниц на английском, чтобы понять, в какой регистр нужно «плюнуть» битом, чтобы просто зажечь светодиод. И, наконец, написать код на Ассемблере или голом Си, где ошибка в одной запятой превращает устройство в кирпич.

В конце ноября Российский Альянс RISC-V при участии «Группы Астра» и Baikal Electronics, собрал на одной площадке разработчиков чипов, производителей АСУ ТП, разработчиков ОС, инструментов разработки и конечных заказчиков. Повод - круглый стол "Доверенные АСУ ТП на базе RISC-V: от технологического ядра к промышленной экосистеме".
И специально для вас мы собрали краткую выжимку самого интересного из обсуждений проходивших на мероприятии. Всем кому интересно - добро пожаловать под кат!

Для возрастных кандидатов на рынке IT действительно существует негласная планка. После 45 лет количество откликов и звонков заметно снижается, а ближе к 50 поиск работы рискует превратиться в тяжелый труд, где помогают либо связи, либо уникальная, редкая экспертиза. Это касается не только embedded разработчиков, но и любых IT специалистов.
В идеальном мире после 45 лет не вы должны «бегать по вакансиям», а рынок должен приходить к вам. Если этого не происходит, проблема чаще всего не в вашей квалификации, а в том, как упакован ваш опыт и как вы заходите в процесс найма.

Все платы Nucleo оснащены программатором, который можно пере использовать для программирования внешних устройств.
В этом тексте я написал про то как запрограммировать внешнее target устройство.

Итерационный бинарный критерий делимости: Деление без деления. Алгоритм для Big Integers и FPGA.
Деление — одна из самых ресурсоемких операций для Big Integers в криптографии и для аппаратных ускорителей (FPGA/ASIC). Что, если бы можно было проверять делимость, полностью исключив операцию деления и взятия остатка?
Представляем новый детерминированный алгоритм, который заменяет дорогой N mod d на O(logN) итераций, состоящих исключительно из сложения (X+d) и побитового сдвига.
Разбираем, как этот подход, обладающий линейно-логарифмической сложностью O(n⋅logN), обеспечивает радикальное снижение константного фактора и становится идеальным решением для многословной арифметики и низкоуровневой оптимизации железа. Экспертный уровень.

Помимо полноценных клавиатур, есть клавиатуры с несколькими кнопками, клавиши которых можно запрограммировать. Их называют еще макропадами. Макропад не сложно купить, хоть часто он стоит дороже обычной клавиатуры, но можно и сделать. Статей как его смастерить много, самый простой способ — использовать каждый вывод микроконтроллера, пока они не закончатся. Но у меня не было никакого желания делать все как у всех. Хотелось чего-то по-настоящему DIY.
Поэтому в статье пойдет подробный рассказ о разработке USB-клавиатуры на микроконтроллере CH32V003, в котором по умолчанию нет поддержки USB. Но чтобы проект был более интересным, клавиатура состоит из 9 кнопок, 3-х энкодеров и 2-х светодиодов. При этом корпус и кейкапы тоже сделаны самостоятельно (почти).
Но стоит еще добавить, что эта статья могла бы и не появится на свет, потому что когда сделал клавиатуру, то она работала с ошибками. Какое-то время я пытался их поправить, но сдался и забросил проект на месяц. Но вернулся с новыми знаниями, исправил ошибку в коде и оно заработало! Поэтому надеюсь, этот проект теперь может заслуживать вашего внимания.

Продолжение серии статей о BareMetal CI. В первой части мы рассмотрели базовый подход к автоматизации тестирования микроконтроллеров с использованием J-Link и RTT. Эта статья посвящена масштабируемому решению на базе Docker, которое поддерживает различные типы оборудования и CI-платформы.

Научить нельзя - научиться можно. Привет, меня зовут Максим Иванков, уже 9-ый год я развиваю робототехнику и программирование для детей. В статье хотел поделиться опытом ведения занятий и описать формат обучения к которому пришёл сегодня, где дети самообучаются, а преподаватель не ведёт лекции. Подход отличается от привычного лекционного формата, поэтому как минимум заслуживает внимания)

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

Подготавливая статью [1] к публикации, обратил внимание на картинку, показанную на рис. 1. Я сохранил ее, чтобы воспользоваться в будущем. И оно не заставило себя ждать, т.к. захотелось повысить наглядность решения, введя в него графику и используя именно эту картинку. К чему это привело, далее мы и поговорим.
Все, что связано с картинкой, сделать не так уж сложно. Это довольно подробно описано в цикле статей по реализации графики в ВКПа (см. [2]). Для этого, во-первых, нужно создать графическое окно, установив данную картинку в качестве фона. Во-вторых, воспользоваться существующими заготовками контролов (элементов графического интерфейса), которые необходимо будет разместить на данном фоне.

В предыдущих уроках курса схемотехники я узнал о комбинационной логике: это когда комбинация выходных сигналов зависит от входных сигналов, подаваемых только в текущий момент. Последовательностная логика же зависит от состояния входных сигналов и до текущего момента. То есть в какой последовательности что изменялось — поэтому называть логику «последовательной» будет ошибкой.
На маршруте последовательностной логики меня поджидает своего рода counter strike — два секундомера в качестве финального проекта курса схемотехники. По пути освою новые компоненты… и новые среды эмуляции. Долой трехмерность, даешь эффективность!

Размышляя на тему того, что должно быть в микроконтроллерной прошивке я проанализировал сотни проектов и десятки электронных плат. В результате вынес за скобки базовый функционал, который так или иначе нужен практически в каждом проекте. Этот функционал кристаллизировался в требования, которые я решил назвать ортодоксально каноническая форма прошивки. По аналогии с тем как в С++ есть такое понятие, как ортоодоксально каноническая форма для класса.