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 嵌入式开发
11KB
109 行
RP2040的每个核心静态状态
RP2040是一款双核微控制器。rp2040-hal multicore
模块使得在第二个核心上启动代码变得容易,但这样做会带来一些复杂性。任何static
变量都在内存中共享,这会导致与多线程系统中的静态变量相同的困难。
此包允许使用不稳定的#[thread_local]
属性来标记一个static
变量为核心局部。每个核心都得到任何此类变量的独立实例,并可以完全独立地使用和操作它们。
因为这些变量不共享,它们的内 容不必是Send
或Sync
,因此您可以例如使用RefCell
的内部可变性来管理它们。
与线程局部变量不同,它们的状 态在系统复位时初始化一次,而不是在代码在核心上启动时。因此,如果您多次在核心1上启动,则后续启动将看到前次运行留下的状态。
使用说明
实现需要链接器脚本来设置内存中每个核心状态的布局。因此,您需要将memory.x
的相关部分复制到您自己的链接器脚本中。
它还需要此crate定义__aeabi_read_tp
函数以读取每个“线程”的状态。您需要添加以下内容
extern crate rp2040_multicore_per_cpu;
以确保此crate被拉入,以便链接这些符号。
依赖项
~1.5MB
~35K SLoC