问题标签 [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 投票
3 回答
494 浏览

rust - 如何用重复的 u16 值填充 [u8] 数组?

我正在寻找一个将被复制到 RAM 中并发送到 LCD 驱动程序的数组。我希望能够传入一个颜色值 ( color: u16) 并使用它来填充数组。请注意,我正在使用#![no_std]它,因为它适用于嵌入式应用程序。

显而易见的简单方法如下:

由于我更多的个人经验来自 C,我想知道是否有任何更好的使用类型转换和转换的解决方案。例如,使用 Rust 初始化一个 u16 数组并转换为 u8 数组:

作为参考,目标函数原型为:

0 投票
1 回答
220 浏览

arrays - 范围内的常量数组

如何生成一个长 const 数组,其中的值取自一个范围?奖励:1) 使用 no_std,2) 不使用任何 crate

我想做的事:

到目前为止,我得到的最远的是:

至少有一个问题似乎是在范围表达式扩展为文字列表之前对宏进行了评估。

0 投票
0 回答
84 浏览

rust - 有没有办法在没有标准库的情况下在 rust 中加入 char 和 &str

我目前正在按照 Philipp Opperman 的 rust 内核教程制作一个 rust 操作系统。我已经完成了教程,现在我正在尝试制作一个嵌入式 shell,但是我找不到如何在没有标准库的情况下将 char 和 &str 连接在一起,我已经尝试解决这个问题将近 2 个晚上了。你们中的任何人都可以帮助我吗?

0 投票
1 回答
74 浏览

rust - 在文件中获取 itm.txt 输出的方法?

我是嵌入式开发的新手。目前,我正在使用发现书在发现板上工作。我几乎已经完成了这本书,现在我想在这方面取得更多成就。我想做什么?我最近研究传感器,我从 itmdump(itm.txt) 文件中的传感器获得读数。现在我希望这些数据发布在(HTTP 请求)上。我的计划??

  1. 将数据写入文件。
  2. 从该文件中获取数据。
  3. 将数据发布到提供的链接。

我正在使用 no_std 环境,但没有发现如何将数据直接输出到文件或从 itmdump 输出到文件。 这是我的仓库,我想把这个 hello 发现写到一个文件中。谁能帮我解决这个问题?我是否正确地完成了我的任务?

no_std 代码:

0 投票
1 回答
192 浏览

arrays - 使用 #[!no_std] 通过 FFI 将数组从 C 传递到 Rust

这个关于将数组从 C 传递到 Rust 的问题的所有答案都std::slice::from_raw_parts用于将原始 C 指针和一些长度信息转换为 Rust。在嵌入式上下文中(在我的情况下为MOS 6502),可能没有可用的std库。因此,在#![no_std]上下文中,将数组从 C 传递到 Rust 以进行(潜在可变的)处理的最佳方式是什么?

0 投票
0 回答
120 浏览

llvm - 将所有代码(包括依赖项)编译为 LLVM IR

我有一个 Rust 板条箱A,它依赖于另一个 Rust 板条箱B;它们都是 STD-clean(即都使用#![no_std])并且没有其他依赖项。我想掌握将它与lld.

为了从 just 中获取 LLVM IR A,我目前正在传递--emit=llvm-ircargo rustc. 这导致target/debug/deps/A-someKindOfHash.ll我可以消费——在我的例子中,通过使用 Clang 将它与一些调用(未损坏的)Rust 函数的 C 代码链接。

但是,该.ll文件不包含所有传递依赖项,因此一旦A实际开始使用 from 的函数B,就会崩溃。

我如何告诉 Cargo 从所有依赖项创建 LLVM IR 并将它们放在下面的某个位置target/

0 投票
1 回答
133 浏览

rust - 如何手动向 lld 提供 core::panicking::panic*?

我正在将 rlib 的 Rust 代码编译为 LLVM IR,然后使用 Clang 编译并将其与 C 程序链接。这一直有效,直到我的代码包含恐慌,此时我得到链接器错误:

我尝试了两件事来缓解这种情况:

  1. panic_handler在我的库中添加了一个:

  2. 我已将panic模式设置abortCargo.toml

单独或组合都不能解决问题。

更多细节

在评论中,@Solomon Ucko 要求提供有关整个编译管道的更多详细信息。正如我在标签中所写,这是与no_std; 此外,编译目标是MOS 6502。这是要编译和(尝试)链接的命令的完整列表:

0 投票
1 回答
401 浏览

rust - 如何编写一个 crate 使 std 和 no_std 可以在不同的模块中共存?

我想写一个库,有的模块需要支持no_std,有的模块需要支持std

我尝试参考其他库来编写它,但它似乎仍然是错误的。

货物.toml:

lib.rs:

Rust Analyzer 告诉我:

如何正确控制featurein lib.rs

此外,我想写一个依赖于rayoncrate 的模型。我怎样才能通过添加它feature

0 投票
1 回答
83 浏览

rust - 从没有堆分配的 fmt::Arguments 获取数据

我想write!在我自己的结构实现上进行工作fmt::Write,并且我没有任何堆分配。为此,我需要实施fmt::Write::write_fmt(&mut self, args: fmt::Arguments<'_>) -> fmt::Result

但是,这意味着我需要在fmt::Arguments<'_>不使用的情况下访问数据&args.to_string(),因为.to_string()没有堆分配就不存在。

Arguments::as_str,但是一旦我需要将元素格式化为i32.

有没有办法在不使用的情况下获取参数的字符串.to_string()

0 投票
1 回答
78 浏览

rust - 静态变量的初始值甚至可能与源代码中指定的不匹配

我正在从事一个围绕嵌入式系统的项目。所以我必须实现一个 alloc 方法来分配一个新的内存段,并实现一个 dealloc 来将过去的分配返回给分配器以供重用。

以下段落摘自 Book Rust for Rustaceans:

在跳转到定义的开始符号之前真正不运行代码的平台上,像大多数嵌入式设备一样,静态变量的初始值甚至可能与源代码中指定的值不匹配。在这种情况下,您的初始化函数将需要使用程序二进制文件中指定的初始数据值显式初始化各种静态内存段。

我有与上面段落完全相同的问题。在运行时,Rust 分配了一个非常大的堆内存。有没有人可以解决这个问题?

此代码适用于 Linux,但不适用于我的设备。因为 Rust 对内存的请求远大于我设备的容量。

您可以在下面看到分配器的实现: