Arbeiten mit Rust am ESP32

19

Ich möchte ein Gateway-Gerät bauen, das den ESP32 verwendet. Dieser sollte mit dem ModBus-TCP-Port eines Sensors verbunden sein. Zu diesem Zweck möchte ich die bereits vorhandene Modbus Rust-Implementierung verwenden. Es gibt jedoch nur sehr wenige Informationen darüber, wie ich Rust-Code auf dem ESP32 zum Laufen bringen kann.

Kann jemand etwas Licht in dieses Thema bringen?

sparkr
quelle
Schauen Sie sich github.com/emosenkis/esp-rs
Francesco Frassinelli

Antworten:

12

Rust verwendet die LLVM-Toolchain , eine Reihe von Programmen, die zum Kompilieren der Intermediate Representation (IR) von LLVM in plattformspezifischen Code verwendet werden. Der Prozess funktioniert ungefähr so:

Rust Code -> Rust Compiler -> LLVM IR -> Back-end -> Platform-specific code
             (Front-end)

Derzeit gibt es kein Backend für die vom ESP32 verwendete Xtensa-Architektur. Dies bedeutet leider, dass Sie keinen Rust-Code für den ESP32 kompilieren können . Sie haben in Ihrer Frage install gesagt , aber ich nehme an, Sie haben das nicht so gemeint - Sie möchten Rust-Code auf dem ESP32 ausführen, nicht den Rust-Compiler dort installieren.

Wenn Sie unbedingt Rust verwenden möchten, können Sie theoretisch das LLVM C-Backend verwenden , das LLVM IR -> C konvertiert. Verwenden Sie dann die von Espressif bereitgestellte Toolchain , um den ESP32-Maschinencode zu kompilieren. Dies wird jedoch schwierig und funktioniert möglicherweise überhaupt nicht. Sie werden feststellen, dass es in diesem Fall viel einfacher ist, in die Kugel zu beißen und C zu verwenden, was eine Schande ist, da Rust eine großartige Sprache ist, aber die eingebettete Unterstützung ist im Moment nicht so gut wie die von C.

Aurora0001
quelle
Kennen Sie andere Hardware-Boards, die Rust unterstützen? Ja, wie Sie sagten, ich möchte nur Rust-Programme auf dem Gerät ausführen, und ich möchte dort auf keinen Fall einen Compiler!
Sparkr
@sparkr Die Liste der von Rust unterstützten Plattformen und Architekturen finden Sie hier . Die meisten dieser Plattformen sind entweder x86-, x86-64- oder verschiedene ARM-Architekturen. Ich stelle mir vor, dass all das weitaus leistungsfähiger (und teurer) ist, als Sie es möchten. Daher schränkt es Ihre Möglichkeiten bei Rust wirklich ein. Bemerkenswert ist jedoch der TI MSP430 wird als ‚Tier 3‘ unterstütztes Gerät aufgelistet, so Rust könnte nur über Arbeit. Ich kann jedoch aus eigener Erfahrung nicht sprechen, da ich Rust noch nicht für eingebettete Anwendungen verwendet habe.
Aurora0001
Es gibt jetzt eine von der Community unterstützte Rustc-Abzweigung, um den Xtensa-Bogen zu unterstützen. Mabez.dev/blog/posts/esp32-rust
Tim McNamara
12

Xtensa hat soeben ein offizielles ESP32 / Espressif LLVM-Backend veröffentlicht und das Frontend geklirrt. Die Ankündigung finden Sie hier: https://esp32.com/viewtopic.php?p=38466 Repos: https://github.com/espressif/llvm-xtensa & https://github.com/espressif/clang-xtensa As rust basiert auf LLVM. Dieses neue LLVM-Backend für ESP32 soll dazu beitragen, dass Rust den ESP32 mit größerer Wahrscheinlichkeit unterstützt. Die Ankündigung deutet sogar auf diese zukünftige Rust-Unterstützung hin.

NickBroon
quelle
Hey, willkommen bei IoT.SE! Ich würde Sie ermutigen , diese Antwort zu bearbeiten , um sie vollständiger zu machen. So wie es aussieht, handelt es sich im Grunde genommen nur um eine Reihe von Links mit minimalen Erklärungen und sieht eher aus wie ein Kommentar als eine vollständige Antwort. Es wäre weitaus besser, die Antwort detaillierter zu erläutern, wobei die Links nur als Referenz dienen. Vielen Dank!
anonymous2
8

Wie Aurora0001 bereits sagte, können Sie Rust derzeit nicht auf einem ESP32 (oder dem älteren ESP8266) ausführen.

Es gibt einen sehr ähnlichen Chip, den RTL8710, der für Situationen empfohlen wird, in denen Sie einen ESP32 verwenden würden, aber Rust verwenden möchten.

Hier ist eine Website, auf der jemand durch das Setup geht.

Theodore Nordsieck
quelle