#atomic #polyfill #target #deprecated #level #portable-atomic #they-re

no-std atomic-polyfill

原子填充,用于那些不支持它们的目标

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 65972/week @ 2024-03-14 63451/week @ 2024-03-21 62133/week @ 2024-03-28 68444/week @ 2024-04-04 73835/week @ 2024-04-11 64830/week @ 2024-04-18 57168/week @ 2024-04-25 63163/week @ 2024-05-02 62073/week @ 2024-05-09 73736/week @ 2024-05-16 72307/week @ 2024-05-23 77192/week @ 2024-05-30 86458/week @ 2024-06-06 115082/week @ 2024-06-13 102205/week @ 2024-06-20 85416/week @ 2024-06-27

每月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