Skip to content

Atomic operations for MSP430 MCUs

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

pftbest/msp430-atomic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

msp430-atomic

Atomic operations for MSP430 microcontrollers

Deprecated: This crate's functionality is a strict subset of portable-atomic as of v0.3.16. Use portable-atomic v0.3.16 or greater going forward.

Relationship to portable-atomic

msp430-atomic uses inline asm to implement atomic opertions without needing to disable interrupts. On MSP430, loads and stores of types up to 16-bits are single instruction operations. These are atomic because the current MSP430 instruction will run to completion before an interrupt is serviced. Adding, subtracting, and logical operations on these types are atomic in the same way, and msp430-atomic provides inline assembly for these as well (add, sub, etc).

However, the standard APIs for atomic adds, subtracts, and logical operations are also expected to return the old value before the operation (fetch_{add,sub,etc.}). MSP430 has no single instructions to also return the old value while simultaneously updating a memory location. Compare-And-Swap (CAS) or Load-Link/Store Conditional instructions can be used to implement these fetch_ instructions, but MSP430 has no such instructions either. Consequently, msp430-atomic does not provide fetch_{add,sub,etc.}.

In contrast, portable-atomic provides load and stores using inline asm, and implements fetch_{add,sub,etc.} by disabling interrupts. As of v0.3.16, portable-atomic provides add, sub, etc. primitives which mirror the public API of this crate (and don't disable interrupts).

Relationship to atomic-polyfill

atomic-polyfill uses the critical-section crate to implement all atomic operations. For msp430, the critical-section implementation usually means disabling interrupts. As of this writing (11-06-2022), no optimizations that avoid disabling interrupts are provided in atomic-polyfill.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Atomic operations for MSP430 MCUs

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages