Что Rust изменил в разработке прошивки NanoVNA
momentics 18 минут назад Краткое содержание статьи Что Rust изменил в разработке прошивки NanoVNA 18 мин 229 Rust * TDD * Качество кода * Программирование микроконтроллеров * Кейс Привет, Хабр!В прошлой статье я...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. momentics 18 минут назад Краткое содержание статьи Что Rust изменил в разработке прошивки NanoVNA 18 мин 229 Rust * TDD * Качество кода * Программирование микроконтроллеров * Кейс Привет, Хабр! В прошлой статье я разбирал накопление сигнала в NanoVNA-X-BM. Сейчас хочу вернуться к другой стороне того же проекта.
Интересно не только то, как прошивка считает, но и то, как её разрабатывать и проверять, когда часть работы выполняет периферия, памяти мало, а каждый отказ не хочется разбирать с осциллографом. До этого у меня уже был NanoVNA-X на C. Его низкоуровневая часть выросла из работы DiSlord, а организацию приложения я существенно изменил.
Технические детали
Новую прошивку я решил написать на no_std Rust. Мне хотелось заново разобраться с устройством приложения, а не перевести существующие исходники с одного синтаксиса на другой. Про измерительный тракт здесь повторяться не буду.
Для дальнейшего достаточно знать, что приложению приходится одновременно обслуживать захват данных, расчёты, экран, управление и USB. Оно работает без ОС и динамического выделения памяти. Сборки предназначены для NanoVNA-H на Cortex-M0 и H4 на Cortex-M4F.
У младшей модели 16 КБ RAM, у старшей 40 КБ обычной SRAM и ещё 8 КБ CCM. На таком устройстве многие архитектурные решения быстро перестают быть вопросом вкуса. Лишний буфер может не поместиться.
Отраслевые последствия
Неудачный цикл ожидания способен остановить остальную работу. Слишком широкий доступ к периферии позволяет одному драйверу незаметно испортить состояние другого. Обычно от Rust в первую очередь ждут помощи с памятью.
Она действительно есть, но сама по себе не объясняет, как организовать приложение. Я попробую показать, что пришлось сделать с использованием языка, какие правила получилось поручить компилятору и какие проверки остались за пределами его возможностей. Почему я не оставил всю логику внутри драйверовДрайвер легко представить одной большой частью программы, которая знает устройство чипа.
Она рассчитывает параметры, собирает команды, передаёт байты, ждёт флаги и сообщает результат. Пока всё работает, разделять её вроде бы незачем. Но если тестировать такую часть только целиком, для проверки арифметики уже понадобится реальное оборудование.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




