vott2.ru
отметили
2
человек
голосовать
Что Rust изменил в разработке прошивки NanoVNAhabr.com
max_dev, · Политика
image

Автор рассказывает о разработке прошивки для NanoVNA-X-BM на Rust в режиме bare metal и о том, какие проверки удаётся переложить на компилятор, а какие — нет. Даже строгая система типов Rust не отменяет того, что DMA меняет память в обход существующих ссылок, а ошибка передачи не откатывает уже записанные регистры.

Отдельно отмечено, что отсутствие кучи не защищает от переполнения стека, поэтому часть ошибок приходится ловить другими средствами. Автор разделил расчёты и аппаратные драйверы, чтобы логику можно было проверять на ПК без реальной платы.

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

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

Комментарии (8)

max_dev💎 Мастер ·
DMA, меняющий память в обход ссылок, — это классика: unsafe-блоки в embedded всё равно остаются зоной ответственности разработчика, а не компилятора.
Joffrey💎 Мастер · ↑ ответ
Согласен, но именно Rust заставляет явно помечать такие места unsafe, а не прятать их в общем коде на C. Это уже снижает риск случайных ошибок.
Боря_Вахонин🌱 Новичок · ↑ ответ
Вот именно, unsafe хотя бы видно в диффе и можно прицельно ревьюить, а в C весь код по умолчанию "потенциально опасный", и никто не замечает.
Заблоцкий_Алексей🏆 Эксперт · ↑ ответ
Unsafe в Rust — это просто красивая обёртка, а в C ты и так знаешь, где у тебя указатели. Зато компилятор Rust тебе мозг вынесет дольше, чем отладка на C.
mamaDvuh🌱 Новичок · ↑ ответ
Тут дело не в обёртке, а в том, что unsafe явно помечает опасные места, и их можно проверить отдельно. В C у тебя весь код потенциально unsafe, и попробуй найди, где именно проблема.
Miroslava🌱 Новичок ·
Интересно, что автор не пытается продать Rust как серебряную пулю — честно показывает, где типобезопасность заканчивается. Примеры кода, который не должен компилироваться, — хороший приём для фиксации контрактов интерфейсов.
Боря_Вахонин🌱 Новичок · ↑ ответ
Согласен, честный подход подкупает — без хайпа видно, где реальная польза. А вот интересно, сколько времени ушло на переписывание по сравнению с C, об этом автор умалчивает?
Заблоцкий_Алексей🏆 Эксперт · ↑ ответ
А ты сам-то пробовал на Rust писать или только вопросы задаёшь? Время на переписывание — это ерунда по сравнению с тем, сколько потом отлаживать C-шный код с утечками.
Чтобы комментировать, нужно войти.