我想建立一个使用ESP32的网关设备。这应该连接到Sensor的ModBus TCP端口。为此,我想使用已经存在的Modbus Rust实现。但是关于如何使Rust代码在ESP32上运行的信息很少。

谁能阐明这个话题?

评论

看看github.com/emosenkis/esp-rs

#1 楼

Rust使用LLVM工具链,该工具链是用于将LLVM的中间表示(IR)编译为特定于平台的代码的一组程序。该过程的工作原理如下:

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


当前,ESP32使用的Xtensa架构没有后端。不幸的是,这意味着您无法为ESP32编译Rust代码。您确实在您的问题中说过安装,但我想您不是那个意思,而是,您想在ESP32上运行Rust代码,而不是在那里安装Rust编译器。

如果您真的迫切需要使用Rust,从理论上讲,您可以使用LLVM C后端,它转换LLVM IR-> C,然后使用Espressif提供的工具链编译为ESP32机器代码。但是,这将很困难,甚至可能根本不起作用。在这种情况下,您会发现硬着头皮使用C容易得多,这很可惜,因为Rust是一种很棒的语言,但是其嵌入式支持目前不如C。

评论


您是否知道其他任何支持Rust的硬件板?是的,就像您说的那样,我只想在设备上运行Rust程序,并且我当然不希望在那里有编译器!

–sparkr
17年9月19日在17:37

@sparkr此处提供了Rust支持的受支持平台和体系结构的列表;这些平台大多数是x86,x86-64或各种ARM体系结构。我想所有这些功能都比您想要的要强大得多(并且价格昂贵),因此确实会限制Rust的选择。但是,值得注意的是,TI MSP430被列为“第3层”支持的设备,因此Rust可能就可以工作了。不过,从我个人的经验来看,还是不能说的,因为我还没有将Rust用于嵌入式应用程序。

–Aurora0001♦
17年9月19日在17:42

现在有一个社区支持的rustc分支来支持Xtensa拱mabez.dev/blog/posts/esp32-rust

–蒂姆·麦克纳马拉(Tim McNamara)
19年11月20日在20:53

#2 楼

Xtensa刚刚发布了正式的ESP32 / Espressif LLVM后端和clang前端。
在此处查看其公告:https://esp32.com/viewtopic.php?p=38466
回购:https:// github.com/espressif/llvm-xtensa&https://github.com/espressif/clang-xtensa
由于rust基于LLVM,因此新的ESP32 LLVM后端应有助于使Rust更支持ESP32。该公告甚至暗示了将来对Rust的支持。

评论


嗨,欢迎来到IoT.SE!我鼓励您编辑此答案以使其更完整。从目前的角度来看,它基本上只是一系列带有最少说明的链接,看起来更像是评论,而不是完整的答案。最好仅提供链接以更详细地解释答案。谢谢!

–anonymous2♦
19年2月19日在23:59

只是更新,先前的LLVM-xtensa项目已移至github.com/espressif/llvm-project

– alanionita
20年8月23日在21:41



#3 楼

就像Aurora0001所说的那样,您目前无法在ESP32(或较旧的ESP8266)上运行Rust。一个ESP32,但想使用Rust。