LINUX.ORG.RU

Rust как язык для программирования микроконтроллеров

 , ,


0

6

Собственно сабж. А то часто вижу всякие статьи, где Rust пиарится как «убийца сишечки». Вот даже недавно ОС на Rust вышла. А программирование микроконтроллеров - как раз одна из тех областей, где C на сегодняшний день практически не имеет конкурентов.

Ну так насколько он годен для этого? Сильно ли распухнет код? А что с производительностью? Как со всякими специфичными фичами (обработчики прерываний часто требуют иных прологов/эпилогов, также нужна возможность пихать функции и переменные в не стандартные секции линкера и т. д.)?

Насколько он юзабелен без кучи рантайма? Вот попробовал простую программу кросс-компилировать под STM32 с #![no_std] - так не собралось же. Требует как минимум библиотеку core (и в стабильной версии вроде как нет возможности её отрубить). Насколько эта библиотека жирна?

А что со всякими микроконтроллерами послабее типа всяких AVR, PIC, STM8, MSP430. Как я понимаю, тут уже всё зависит напрямую от LLVM. Для AVR порт есть, для MSP430 тоже (правда, экспериментальный). Вроде как запилить в случае чего LLVM-backend не очень сложно, но есть важный вопрос - насколько оно будет хорошо работать. Есть ли какие-то проигрыши по эффективности или размеру кода, если вместо прямой компиляции (с помощью gcc или sdcc) использовать llvm?

★★★★★

Взгляни на https://zinc.rs/

Требует как минимум библиотеку core (и в стабильной версии вроде как нет возможности её отрубить). Насколько эта библиотека жирна?

Это совсем маленькая библиотека с самыми базовыми вещами. Существовать без неё, наверное, можно, но сложно, да и не нужно.

quantum-troll ★★★★★ ()
Ответ на: комментарий от quantum-troll

Быстрый вопрос (да, я ещё не читал толком документацию) - Rust умеет таки вещи как определение обработчиков прерываний, ассемблерные вставки, упакованные структуры и volatile переменные? Штатными средствами, а не костылями.

KivApple ★★★★★ ()

zinc.rs вполне можно посмотреть.

НО - это скорее PoC нежели готовое решение. До готового там пилить и пилить. Я на нём запилил небольшую поделку для stm32l1б жить можно, но надо понимать кишки вообще всего, начиная от контроллера, заканчивая настройкой компиляции и линковки.

Dark_SavanT ★★★★★ ()

А то часто вижу всякие статьи, где Rust пиарится как «убийца сишечки»

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

Esteban_Garcia ()

А программирование микроконтроллеров - как раз одна из тех областей, где C на сегодняшний день практически не имеет конкурентов.

На Go для STM32, например, вот: Emgo.

AVR, PIC

[offtop]Учитывая популярность AVR, я был ошарашен, когда их купила... Microchip. Печаль.[/offtop] Какие реальные преимущества перед STM32? Единственное, что я слышал по сравнению с AVR бОльшая латенция прерываний. Но и частота-то побольше будет.

STM8

Когда есть центовые STM32 (30 MHz), пользуются ещё STM8? Или в смысле legacy? Но тогда новые разработки маловероятны.

MSP430

Он даже в официальном gcc не развивается.

gag ★★★★★ ()

Рекомендую глянуть на https://japaric.github.io/discovery/ и https://japaric.github.io/copper/. Код в debug пухнет ощутимо, но в release проигрывает си не сильно. Хорошее сравнение есть в статье https://brage.bibsys.no/xmlui/handle/11250/2352353.

Вещи типа volatile read/write доступны в core.

Насчет опасений касательно core — это просто стандартная библиотека, никакого рантайма там нет. Там нет даже аллокации (она в отдельной liballoc). То, что не используется будет выкинуть -flto при линковке.

Про нестандартные секции — хз, не пробовал.

Но пока rust можно использовать для arm cortex-m. msp430, avr — пока в пролете (и это проблема llvm, а не rust'а, хотя положительные подвижки есть).

grossws ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.