Crate avr_atomic

Crate avr_atomic 

Source
Expand description

§AvrAtomic

A fast atomic type for 8-bit values on AVR microcontrollers.

§Example

use avr_atomic::AvrAtomic;

static VALUE_U8: AvrAtomic<u8> = AvrAtomic::new();
static VALUE_I8: AvrAtomic<i8> = AvrAtomic::new();
static VALUE_BOOL: AvrAtomic<bool> = AvrAtomic::new();

assert_eq!(VALUE_U8.load(), 0);
VALUE_U8.store(0x42);
assert_eq!(VALUE_U8.load(), 0x42);

assert_eq!(VALUE_I8.load(), 0);
VALUE_I8.store(-42);
assert_eq!(VALUE_I8.load(), -42);

assert_eq!(VALUE_BOOL.load(), false);
VALUE_BOOL.store(true);
assert_eq!(VALUE_BOOL.load(), true);

§Implement AvrAtomic for your own type

use avr_atomic::{AvrAtomic, AvrAtomicConvert};

#[derive(Copy, Clone)]
struct MyFoo {
    inner: u8,
}

impl AvrAtomicConvert for MyFoo {
    fn from_u8(value: u8) -> Self {
        Self { inner: value }
    }

    fn to_u8(self) -> u8 {
        self.inner
    }
}

static VALUE: AvrAtomic<MyFoo> = AvrAtomic::new();

assert_eq!(VALUE.load().inner, 0);
VALUE.store(MyFoo { inner: 2 } );
assert_eq!(VALUE.load().inner, 2);

Structs§

AvrAtomic
A fast atomic type for 8-bit values on AVR microcontrollers.

Traits§

AvrAtomicConvert
Trait convert to and from the raw u8 value.