问题标签 [rust-no-std]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
225 浏览

io - 我如何最惯用地在 Rust 中为 no_std 平台编写异步 IO 库?

我正在构建一个在no_std平台上使用的库,它允许您执行一些常见的与网络相关的 IO,例如发出 HTTP 请求或读取/写入 Websockets。

现在,我希望这个库成为一个表现良好的公民,以便它可以轻松地包含在其他no_std应用程序中。因此,我想通过实现合理的特征等来打包库。该库将允许我不必使用alloc,因此支持非alloc no_std将是理想的。

这些是我看过的选项:

  • embedded_haland nb:这些板条箱的级别非常低(没有像ReadandWrite或任何更高级别的通用特征)并且异步模型似乎与async/await
  • genio// core_io...:这些根本不支持异步IO。
  • embrio: 看起来很有趣,但似乎使用它会将我绑定到一个特定的环境,从而使库的可移植性降低。
  • tokiov0.2.x:我很想使用它,但根本没有no_std支持。
  • futures::iov0.3.x:同样,很想使用它,但没有no_std支持。

我应该在 no_std 环境中使用哪种异步 IO 抽象?如果现在没有好的选择,我应该在未来下注/帮助哪一个?

0 投票
1 回答
215 浏览

rust - 使用 no_std 的货物测试失败,错误代码为 176、160

在 main.rs 中使用以下代码,当我运行cargo test它时,当我在 main 函数中添加测试或任何语句时,它会返回错误代码 176。它开始返回错误代码 160。

从这个链接我发现,

退出代码 176 的意思是“无法在网络驱动器上安装。在您的首选项中选择另一个安装位置,然后重试安装。”

当我试图通过 lldb 找到回溯时,它返回了

错误:无效线程

我找不到任何提到类似错误的线程,所以在这里问。任何帮助表示赞赏。

使用 nightly (nightly-x86_64-apple-darwin) 谢谢。

0 投票
0 回答
546 浏览

rust - 货物功能是否可以删除依赖项?

我希望增加在没有标准库的情况下使用我的 crate 的可能性。一些核心功能确实依赖于浮点函数,在 no-std 模式下需要由 libm 提供。

我见过的无标准设置的常用方法是拥有一个名为“std”的功能来启用标准库,但在这种情况下,我希望该功能删除 libm 依赖项。我可以将“附加”功能称为“无标准”,但这会导致我有某些功能在无标准模式下难以实现的问题,所以我希望它们依赖于启用的标准.

cargo 是否可以指定仅在未启用功能时才存在的可选依赖项?

0 投票
1 回答
132 浏览

rust - /usr/bin/link: 编译位标志时在 '\377\376"' 之后缺少操作数

在 Phillip Opperman 的博客操作系统之后,我一直在尝试使用 bitflags 和 x86_64 rust crates。最新的 x86_64 crate 版本将 bitflags 1.0.4 作为一个有意义的依赖项。但是,我完全无法使用多个编译器在任何目标上编译 bitflags 1.2.1(自 2019 年 6 月以来的每个版本每晚尝试一次,稳定)

每次我尝试时,Cargo 都会抛出这个错误:

(底部有更多输出)

对我来说,这是胡言乱语。显然,链接器失败了,但据我了解,bitflags crate 有一个自定义构建脚本(build.rs),它实际上只检查编译器兼容性。由于板条箱仅适用于 rustc 1.2+(某种东西),因此检查它是有道理的。然而,这也让我没有线索。这个问题的根源是什么?我看不到链接器被直接修改的任何地方会导致这样的混乱。

cargo build --verbose输出(与之前的本节相同):

单独运行这个过程输出几乎完全相同的东西,没有新信息。

编辑:我在 bash for windows 上尝试这个,我的 MSVC 链接器和套件的其余部分都坏了(windows 不喜欢我)。我相信这个大量的打印输出是因为终端默认使用 gnu 链接器,它不喜欢这样。重新安装构建工具并更新我的工具链和 xbuild 后,一切正常。感谢那些试图提供帮助的人!

0 投票
1 回答
429 浏览

rust - Rust #![no_std]:未解析的外部符号 _mainCRTStartup

我想开始一个 Rust no_std 项目,所以我简单地创建了一个新的 cargo 包并在 main.rs 中写了以下几行:

Cargo.toml 文件如下所示:

我跑cargo build了,链接器打印了:

该错误背后的原因可能是什么?

0 投票
1 回答
182 浏览

rust - 当我知道没有更多对其当前内容的引用时,如何对切片进行变异?

在没有堆的嵌入式设备上,我想解析输入数据并将找到的结果存储在输出切片中。我有一个阅读器,它允许我获取当前可用的数据和一个解析器,它将输入数据与预期的格式相匹配,并将结果存储在Parsed::Values 的切片中,该切片可能包含对输入数据的引用。

由于 Rust 编译器发现可能存在对输入数据的引用,因此我不能多次更改数据缓冲区。由于我可以通过手动将输出切片重置为 来确保不再有引用Parsed::Unused,我认为重用缓冲区应该是安全的。如何在循环的每次迭代中改变输入缓冲区?

以下是我的最小示例,它说明了我的问题:

操场

0 投票
0 回答
322 浏览

string - 添加 str no_std 锈

我已经开始编写 no_std Rust 代码,现在我正在尝试添加字符串。

这是我的代码:

在 no_std 程序中是否有任何好的库可以做这样的事情?

0 投票
1 回答
1316 浏览

string - 运行时构建:在此范围内找不到字符串

基板开发人员可能会遇到一个常见问题:开发自定义托盘以将映射存储到具有常见类型的存储中,例如String. 举个例子:

在构建运行时,您会收到以下错误String

为什么Strings不包括在范围内?和其他std锈类型?

0 投票
1 回答
804 浏览

rust - 在 no_std 环境中,我应该用什么替换 Vec 和 HashSet?

我正在开发一个旨在编译为 webassembly 的项目。所以我想我必须将库标记为 no_std。但由于它目前非常依赖 Vec、String 和 HashSet,这似乎是不可能的,因为我收到了这些功能的错误。

如何在不丢失 no_std 环境(如 webassembly)中的功能的情况下删除/替换这些功能。我想我可以选择 &str 而不是 String,但是其他的呢?

如果我删除#![cfg_attr(not(test), no_std)]并编译该项目,它似乎可以作为 webassembly 二进制文件工作。如果在添加行时出现错误,为什么会这样?

0 投票
2 回答
83 浏览

rust - 如何有效地从计算的部分构建一个字节数组?

我需要构建一个表示设备命令的字节数组。它可能看起来像这样:

有些命令带参数,有些不带。有些参数需要计算。每个命令的大小都是固定的,因此在编译时就知道数组需要多大。

像这样构造它会很好,我将字节组抽象为命令:

我还没有找到任何方法来使用函数或宏来做到这一点。我在no_std,所以我不使用集合。

如何在 Rust 中实现类似的东西?