This module implements C11 stdatomic.h simplified API. At this point only Cortex-M3/M4 cores are supported (LDREX/STREX instructions). Atomic types are limited to nrf_atomic_u32_t and nrf_atomic_flag_t. More...
Modules | |
Atomic operations internals | |
Typedefs | |
typedef volatile uint32_t | nrf_atomic_u32_t |
Atomic 32 bit unsigned type. | |
typedef volatile uint32_t | nrf_atomic_flag_t |
Atomic 1 bit flag type (technically 32 bit) | |
Functions | |
uint32_t | nrf_atomic_u32_fetch_store (nrf_atomic_u32_t *p_data, uint32_t value) |
Stores value to an atomic object. More... | |
uint32_t | nrf_atomic_u32_store (nrf_atomic_u32_t *p_data, uint32_t value) |
Stores value to an atomic object. More... | |
uint32_t | nrf_atomic_u32_fetch_or (nrf_atomic_u32_t *p_data, uint32_t value) |
Logical OR operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_or (nrf_atomic_u32_t *p_data, uint32_t value) |
Logical OR operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_fetch_and (nrf_atomic_u32_t *p_data, uint32_t value) |
Logical AND operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_and (nrf_atomic_u32_t *p_data, uint32_t value) |
Logical AND operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_fetch_xor (nrf_atomic_u32_t *p_data, uint32_t value) |
Logical XOR operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_xor (nrf_atomic_u32_t *p_data, uint32_t value) |
Logical XOR operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_fetch_add (nrf_atomic_u32_t *p_data, uint32_t value) |
Arithmetic ADD operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_add (nrf_atomic_u32_t *p_data, uint32_t value) |
Arithmetic ADD operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_fetch_sub (nrf_atomic_u32_t *p_data, uint32_t value) |
Arithmetic SUB operation on an atomic object. More... | |
uint32_t | nrf_atomic_u32_sub (nrf_atomic_u32_t *p_data, uint32_t value) |
Arithmetic SUB operation on an atomic object. More... | |
bool | nrf_atomic_u32_cmp_exch (nrf_atomic_u32_t *p_data, uint32_t *p_expected, uint32_t desired) |
If value at pointer is equal to expected value, changes value at pointer to desired. More... | |
uint32_t | nrf_atomic_u32_fetch_sub_hs (nrf_atomic_u32_t *p_data, uint32_t value) |
Arithmetic SUB operation on an atomic object performed if object >= value. More... | |
uint32_t | nrf_atomic_u32_sub_hs (nrf_atomic_u32_t *p_data, uint32_t value) |
Arithmetic SUB operation on an atomic object performed if object >= value. More... | |
uint32_t | nrf_atomic_flag_set_fetch (nrf_atomic_flag_t *p_data) |
Logic one bit flag set operation on an atomic object. More... | |
uint32_t | nrf_atomic_flag_set (nrf_atomic_flag_t *p_data) |
Logic one bit flag set operation on an atomic object. More... | |
uint32_t | nrf_atomic_flag_clear_fetch (nrf_atomic_flag_t *p_data) |
Logic one bit flag clear operation on an atomic object. More... | |
uint32_t | nrf_atomic_flag_clear (nrf_atomic_flag_t *p_data) |
Logic one bit flag clear operation on an atomic object. More... | |
This module implements C11 stdatomic.h simplified API. At this point only Cortex-M3/M4 cores are supported (LDREX/STREX instructions). Atomic types are limited to nrf_atomic_u32_t and nrf_atomic_flag_t.
uint32_t nrf_atomic_flag_clear | ( | nrf_atomic_flag_t * | p_data | ) |
Logic one bit flag clear operation on an atomic object.
[in] | p_data | Atomic flag memory pointer |
uint32_t nrf_atomic_flag_clear_fetch | ( | nrf_atomic_flag_t * | p_data | ) |
Logic one bit flag clear operation on an atomic object.
[in] | p_data | Atomic flag memory pointer |
uint32_t nrf_atomic_flag_set | ( | nrf_atomic_flag_t * | p_data | ) |
Logic one bit flag set operation on an atomic object.
[in] | p_data | Atomic flag memory pointer |
uint32_t nrf_atomic_flag_set_fetch | ( | nrf_atomic_flag_t * | p_data | ) |
Logic one bit flag set operation on an atomic object.
[in] | p_data | Atomic flag memory pointer |
uint32_t nrf_atomic_u32_add | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Arithmetic ADD operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand ADD operation |
uint32_t nrf_atomic_u32_and | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Logical AND operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand AND operation |
bool nrf_atomic_u32_cmp_exch | ( | nrf_atomic_u32_t * | p_data, |
uint32_t * | p_expected, | ||
uint32_t | desired | ||
) |
If value at pointer is equal to expected value, changes value at pointer to desired.
Atomically compares the value pointed to by p_data with the value pointed to by p_expected, and if those are equal, replaces the former with desired. Otherwise, loads the actual value pointed to by p_data into *p_expected.
p_data | Atomic memory pointer to test and modify. |
p_expected | Pointer to test value. |
desired | Value to be stored to atomic memory. |
true | *p_data was equal to *p_expected |
false | *p_data was not equal to *p_expected |
uint32_t nrf_atomic_u32_fetch_add | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Arithmetic ADD operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand ADD operation |
uint32_t nrf_atomic_u32_fetch_and | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Logical AND operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand AND operation |
uint32_t nrf_atomic_u32_fetch_or | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Logical OR operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand OR operation |
uint32_t nrf_atomic_u32_fetch_store | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Stores value to an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value to store |
uint32_t nrf_atomic_u32_fetch_sub | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Arithmetic SUB operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand SUB operation |
uint32_t nrf_atomic_u32_fetch_sub_hs | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Arithmetic SUB operation on an atomic object performed if object >= value.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand SUB operation |
uint32_t nrf_atomic_u32_fetch_xor | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Logical XOR operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand XOR operation |
uint32_t nrf_atomic_u32_or | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Logical OR operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand OR operation |
uint32_t nrf_atomic_u32_store | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Stores value to an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value to store |
uint32_t nrf_atomic_u32_sub | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Arithmetic SUB operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand SUB operation |
uint32_t nrf_atomic_u32_sub_hs | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Arithmetic SUB operation on an atomic object performed if object >= value.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand SUB operation |
uint32_t nrf_atomic_u32_xor | ( | nrf_atomic_u32_t * | p_data, |
uint32_t | value | ||
) |
Logical XOR operation on an atomic object.
[in] | p_data | Atomic memory pointer |
[in] | value | Value of second operand XOR operation |