#rp2040 #multi-core #concurrency #no-std

no-std rp2040-multicore-per-cpu

启用在RP2040上使用每个核心的静态变量

5个版本

0.1.4 2024年4月22日
0.1.3 2024年4月22日
0.1.2 2024年4月22日
0.1.1 2024年4月22日
0.1.0 2024年4月22日

#288 in 嵌入式开发

MIT/Apache

11KB
109

RP2040的每个核心静态状态

RP2040是一款双核微控制器。rp2040-hal multicore模块使得在第二个核心上启动代码变得容易,但这样做会带来一些复杂性。任何static变量都在内存中共享,这会导致与多线程系统中的静态变量相同的困难。

此包允许使用不稳定的#[thread_local]属性来标记一个static变量为核心局部。每个核心都得到任何此类变量的独立实例,并可以完全独立地使用和操作它们。

因为这些变量不共享,它们的内 容不必是SendSync,因此您可以例如使用RefCell的内部可变性来管理它们。

与线程局部变量不同,它们的状 态在系统复位时初始化一次,而不是在代码在核心上启动时。因此,如果您多次在核心1上启动,则后续启动将看到前次运行留下的状态。

使用说明

实现需要链接器脚本来设置内存中每个核心状态的布局。因此,您需要将memory.x的相关部分复制到您自己的链接器脚本中。

它还需要此crate定义__aeabi_read_tp函数以读取每个“线程”的状态。您需要添加以下内容

extern crate rp2040_multicore_per_cpu;

以确保此crate被拉入,以便链接这些符号。

依赖项

~1.5MB
~35K SLoC