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 或 http://www.apache.org/licenses/LICENSE-2.0)
-
MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您有意提交并包含在作品中的任何贡献(根据Apache-2.0许可证定义),应如上所述双重许可,而不附加任何额外条款或条件。