我正在学习使用 GCC 工具链编写 ARM 代码。我遇到了一些找不到文档的 GCC 选项。有人可以帮忙解释一下他们是做什么的吗?
-specs=nosys.specs-specs=nano.specs-specs=rdimon.specs-lnosys怎么做-specs=nosys.specs和-lnosys关联?你是一起使用它们,还是它们相互排斥,或者其他什么?
和 nano,我收集到暗示使用 newlib-nano 库。我已经看到 this 与-lmand结合使用-lc。这是否只是为您提供标准的 libc 和 libm 函数?
代表什么rdimon?我知道它是用于“半主机”,这意味着以某种方式使用主机 IO。这是否意味着我可以打印到主机控制台?我找不到有关如何实际使用它的文档。
如果我没有找到所有这些的真相来源,请告诉我。
感谢您对澄清的任何帮助。
在处理具有 ARM 目标的项目时,RLS 给出以下错误消息:
E0463:找不到板条箱,因为
test找不到板条箱
再生产:
cargo new --bin app
cd app
mkdir .cargo
echo '[build]' > .cargo/config
echo 'target = "thumbv7m-none-eabi"' >> .cargo/config
echo '#![no_std]' > src/main.rs
rls --cli
Run Code Online (Sandbox Code Playgroud)
我相信这是因为 ARM 目标没有测试箱。
有没有办法避免这个错误?
E0463 上还有其他几个 SO 帖子,但似乎这些都是配置错误。以上纯粹是RLS问题。它导致我的编辑器显示错误并且代码不完整等。
我可以实现一个采用如下类型的宏:
trait Boundable<A> {
fn max_value() -> A;
}
impl Boundable<u8> for u8 {
fn max_value() -> u8 { u8::MAX }
}
Run Code Online (Sandbox Code Playgroud)
当我将 转为impl宏时,为什么需要用尖括号将类型本身括起来,如下所示?
macro_rules! impl_boundable {
($a:ty) => {
impl Boundable<$a> for $a {
fn max_value() -> $a { <$a>::MAX }
}
};
}
impl_boundable!(i8);
Run Code Online (Sandbox Code Playgroud)
尤其,<$a>::MAX。没有它,编译器会给我错误missing angle brackets in associated item path。我很困惑为什么宏代码需要与非宏代码不同。
这有效:
match 0 {
0..=9 => (),
_ => (),
}
Run Code Online (Sandbox Code Playgroud)
但这并没有:
const R: std::ops::RangeInclusive<u8> = 0..=9;
fn main() {
match 0 {
R => (),
_ => (),
}
}
Run Code Online (Sandbox Code Playgroud)
游乐场。
如果我想将范围与 一起使用match,我必须使用文字范围吗?
我想在使用实例时跳过任意数量的字节Read而不进行任何分配。跳过之后,我需要继续阅读后面的数据。
字节数在编译时未知,因此我无法创建固定数组。Read也没有跳过,所以我似乎需要阅读一些内容。我不想使用BufReader和分配不必要的缓冲区,也不想逐字节读取,因为这样效率低下。
还有其他选择吗?
Rust 抱怨在循环中使用移动的值:
#[derive(PartialEq, Eq)]
enum Animal {
Dog,
Cat,
}
fn dedup(animals: Vec<Animal>) -> Vec<Animal> {
let mut stage = None;
let mut outs = vec![];
for x in animals {
match stage {
None => stage = Some(x),
Some(a) => {
if a != x {
outs.push(a);
stage = Some(x);
}
}
}
}
if let Some(a) = stage {
outs.push(a);
}
outs
}
Run Code Online (Sandbox Code Playgroud)
错误信息是:
error[E0382]: use of moved value
--> src/lib.rs:14:18
|
14 | Some(a) => {
| …Run Code Online (Sandbox Code Playgroud) 鉴于以下(操场):
enum A { A = 0, B, C }
enum B { A = 1, B, C }
Run Code Online (Sandbox Code Playgroud)
如何锈代表类型A,Option<A>,B并Option<B>在内存中?Rust 如何将所有这四个作为单字节表示?这是有道理的,Option<B>但我希望Option<A>是两个字节。
进行以下映射的无分支方式是什么?
true -> +1
false -> -1
Run Code Online (Sandbox Code Playgroud)
一个简单的方法是,if b then 1 else -1但我正在寻找一种避免分支的方法,即如果。
如果相关,我正在使用 Python。