#msp430 #atomic #operations #microcontrollers #instructions #load #value

无 std msp430-atomic

MSP430 微控制器的原子操作

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 包

MIT/Apache

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 也提供了这些操作的内联汇编(addsub 等)。

然而,标准 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.16portable-atomic提供了与该crate公共API相对应的addsub等原语(且不会禁用中断)。

atomic-polyfill的关系

atomic-polyfill使用critical-section crate来实现所有原子操作。对于msp430,critical-section实现通常意味着禁用中断。截至本文写作时间(2022年11月6日),在atomic-polyfill中没有提供避免禁用中断的优化。

许可证

根据以下任一许可证授权:

由您选择。

贡献

除非您明确声明,否则您有意提交并包含在作品中的任何贡献(根据Apache-2.0许可证定义),应如上所述双重许可,而不附加任何额外条款或条件。

无运行时依赖