5 个版本 (稳定)
1.0.3 | 2023年7月11日 |
---|---|
1.0.2 | 2023年3月12日 |
1.0.1 | 2022年8月12日 |
0.1.11 | 2022年11月29日 |
0.1.2 |
|
#2066 in 嵌入式开发
每月403,787次下载
用于 747 个包 (20 直接)
22KB
487 行
⚠️ 此包已弃用 ⚠️
请使用 portable-atomic
代替。 它支持更多架构和更高效的原子操作模拟方式。
portable-atomic
具有具有 critical-section
功能,是一个直接替换选项。它使用 critical-section
包来确保锁定,就像 atomic-polyfill
一样。
但是,如果你的芯片是单核的,你可能希望启用 unsafe-assume-single-core
功能。它通过禁用中断来模拟 portable-atomic
的原子操作。它比使用禁用中断的 critical-section
实现更快,因为它只允许在 CAS 操作上禁用它们,而不是在加载/存储操作上。
如果你正在编写库,请添加对 portable-atomic
的依赖,但不要在上面启用任何功能。让库的最终用户为他们自己的目标启用正确的功能。如果你启用了功能,你将剥夺他们的选择权。
atomic-polyfill
该包在不可用的情况下使用临界区填充原子,旨在作为 core::sync::atomic::AtomicXX
的直接替换。
有两种“级别”的填充
- 本地:不执行填充,重新导出本地的
core::sync::atomic::AtomicXX
。 - 完整:同时填充加载/存储和比较并设置操作。
填充需要当前目标的 critical-section
实现。有关详细信息,请参阅 critical-section
的 README。
目标支持
根据目标和原子宽度自动选择正确的填充级别
目标 | 级别 | u64/i64 的级别 |
---|---|---|
thumbv4t | 完整 | 完整 |
thumbv6m | 完整 | 完整 |
thumbv7*, thumbv8* | 原生 | 完整 |
riscv32imc | 完整 | 完整 |
riscv32imac | 原生 | 完整 |
xtensa-*-espidf | 原生 | 原生 |
xtensa-esp32-* | 原生 | 完整 |
xtensa-esp32s2-* | 完整 | 完整 |
xtensa-esp32s3-* | 原生 | 完整 |
xtensa-esp8266-* | 完整 | 完整 |
AVR | 完整 | 完整 |
对于上述未列出的目标,atomic-polyfill
假设没有任何东西,并重新导出 core::sync::atomic::*
。不执行任何填充。欢迎提交为更多目标填充的多重填充的PR :)
最低支持的Rust版本(MSRV)
当前MSRV为 Rust 1.54。只要支持最新稳定版Rust,MSRV可以在任何新补丁版本中升级。
许可证
本作品受以下任一许可证的许可
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确表示,否则根据Apache-2.0许可证定义的您有意提交的任何贡献,均应以上述双许可,不附加任何额外条款或条件。
依赖关系
~32KB