我正在尝试在Rust中编程裸机嵌入式系统。通常在C启动代码中完成的一件事是为任何全局或静态未初始化的变量初始化BSS段。如何编写将全局/静态放置在填充BSS段中的Rust代码?
但是,在Rust中,我无法弄清楚如何创建任何全局或静态未初始化的变量(即使使用unsafe
代码)。换句话说,我不知道如何编写任何Rust代码,以便编译器用某些东西来填充BSS段。
我想...
static BSS_Data: i32 = unsafe { core::mem::uninitialized() };
....但是编译器拒绝了。
有什么办法可以编写Rust代码(unsafe
或其他),这会导致填充的BSS段?在任何完全由Rust编写的程序中,BSS段是否保证始终为空?
**零初始化** BSS段的任何全局或静态初始化** **变量 - 你要哪个?如果你想让它初始化为零,那么*将它初始化为零*。这就是说,*你*将不得不编写任何代码将数据从闪存复制到RAM中。这就是裸机的意思。 – Shepmaster
我对Rust没有任何了解,但是不能只声明一个静态变量并将其初始化为零?这应该强制它在.bss中分配。 – Lundin
@Lundin如果您在代码中初始化为零,它将进入数据段。 – Verax