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 2021年3月28日

#2066 in 嵌入式开发

Download history • Rust 包仓库 65972/week @ 2024-03-14 • Rust 包仓库 63451/week @ 2024-03-21 • Rust 包仓库 62133/week @ 2024-03-28 • Rust 包仓库 68444/week @ 2024-04-04 • Rust 包仓库 73835/week @ 2024-04-11 • Rust 包仓库 64830/week @ 2024-04-18 • Rust 包仓库 57168/week @ 2024-04-25 • Rust 包仓库 63163/week @ 2024-05-02 • Rust 包仓库 62073/week @ 2024-05-09 • Rust 包仓库 73736/week @ 2024-05-16 • Rust 包仓库 72307/week @ 2024-05-23 • Rust 包仓库 77192/week @ 2024-05-30 • Rust 包仓库 86458/week @ 2024-06-06 • Rust 包仓库 115082/week @ 2024-06-13 • Rust 包仓库 102205/week @ 2024-06-20 • Rust 包仓库 85416/week @ 2024-06-27 • Rust 包仓库

每月403,787次下载
用于 747 个包 (20 直接)

MIT/Apache

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

Documentation

该包在不可用的情况下使用临界区填充原子,旨在作为 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-2.0许可证定义的您有意提交的任何贡献,均应以上述双许可,不附加任何额外条款或条件。

依赖关系

~32KB