6 个版本
使用旧的 Rust 2015
| 0.1.5 | 2022 年 12 月 10 日 |
|---|---|
| 0.1.4 | 2022 年 1 月 28 日 |
| 0.1.3 | 2021 年 5 月 17 日 |
| 0.1.2 | 2020 年 6 月 8 日 |
| 0.1.0 | 2017 年 8 月 9 日 |
#512 in 嵌入式开发
用于 2 包
31KB
302 行
msp430-atomic
MSP430 微控制器的原子操作
已弃用:从 v0.3.16 开始,此包的功能是 portable-atomic 的严格子集。请使用 portable-atomic v0.3.16 或更高版本。
与 portable-atomic 的关系
msp430-atomic 使用内联 asm 实现原子操作,无需禁用中断。在 MSP430 上,16 位及以下的类型加载和存储是 单条指令 操作。这些操作是原子的,因为当前 MSP430 指令将在处理中断之前运行完成。对这些类型的加法、减法和逻辑操作也是以相同的方式原子的,并且 msp430-atomic 也提供了这些操作的内联汇编(add、sub 等)。
然而,标准 API 对于原子加法、减法和逻辑操作也期望在操作之前返回旧值(fetch_{add,sub,etc.})。MSP430 没有同时返回旧值并更新内存位置的单一指令。可以使用 比较并交换 (CAS) 或 加载-链接/存储条件 (LL/SC) 指令来实现这些 fetch_ 指令,但 MSP430 也没有这样的指令。因此,msp430-atomic 不提供 fetch_{add,sub,etc.}。
相比之下,portable-atomic使用内联汇编提供加载和存储操作,并通过禁用中断来实现fetch_{add,sub,etc.}。截至v0.3.16,portable-atomic提供了与该crate公共API相对应的add、sub等原语(且不会禁用中断)。
与atomic-polyfill的关系
atomic-polyfill使用critical-section crate来实现所有原子操作。对于msp430,critical-section实现通常意味着禁用中断。截至本文写作时间(2022年11月6日),在atomic-polyfill中没有提供避免禁用中断的优化。
许可证
根据以下任一许可证授权:
-
Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
-
MIT license (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您有意提交并包含在作品中的任何贡献(根据Apache-2.0许可证定义),应如上所述双重许可,而不附加任何额外条款或条件。