小编pur*_*tii的帖子

使用 ARM GCC 时,什么是“nosys”、“nano”、“rdimon”术语?

我正在学习使用 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。这是否意味着我可以打印到主机控制台?我找不到有关如何实际使用它的文档。

如果我没有找到所有这些的真相来源,请告诉我。

感谢您对澄清的任何帮助。

gcc arm bare-metal stm32

12
推荐指数
1
解决办法
4621
查看次数

在构建thumbv7m-none-eabi时如何避免“E0463:找不到‘test’的板条箱找不到板条箱”?

在处理具有 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问题。它导致我的编辑器显示错误并且代码不完整等。

embedded arm rust rust-language-server

10
推荐指数
1
解决办法
4992
查看次数

为什么在实现基于类型的宏时需要在 <$a> 中使用尖括号?

我可以实现一个采用如下类型的宏:

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。我很困惑为什么宏代码需要与非宏代码不同。

操场

macros rust

9
推荐指数
1
解决办法
1445
查看次数

如何在匹配语句中使用 const 范围?

这有效:

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,我必须使用文字范围吗?

pattern-matching rust

8
推荐指数
1
解决办法
9731
查看次数

如何在不分配的情况下读取跳过 N 个字节?

我想在使用实例时跳过任意数量的字节Read而不进行任何分配。跳过之后,我需要继续阅读后面的数据。

字节数在编译时未知,因此我无法创建固定数组。Read也没有跳过,所以我似乎需要阅读一些内容。我不想使用BufReader和分配不必要的缓冲区,也不想逐字节读取,因为这样效率低下。

还有其他选择吗?

rust

4
推荐指数
1
解决办法
2720
查看次数

Rust 编译器抱怨在代码不存在时在循环中使用移动的值

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)

rust

3
推荐指数
1
解决办法
97
查看次数

enum 和 Option&lt;enum&gt; 的内存表示是什么?

鉴于以下(操场):

enum A { A = 0, B, C }
enum B { A = 1, B, C }
Run Code Online (Sandbox Code Playgroud)

如何锈代表类型AOption<A>BOption<B>在内存中?Rust 如何将所有这四个作为单字节表示?这是有道理的,Option<B>但我希望Option<A>是两个字节。

memory rust

2
推荐指数
1
解决办法
387
查看次数

将 false/true 转换为 -1/+1 的无分支方法?

进行以下映射的无分支方式是什么?

true -> +1
false -> -1
Run Code Online (Sandbox Code Playgroud)

一个简单的方法是,if b then 1 else -1但我正在寻找一种避免分支的方法,即如果。

如果相关,我正在使用 Python。

python data-conversion

-1
推荐指数
2
解决办法
596
查看次数