STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
atomic.h File Reference

FreeRTOS atomic operation support. More...

#include <stdint.h>
Include dependency graph for atomic.h:

Go to the source code of this file.

Macros

#define ATOMIC_ENTER_CRITICAL()
#define ATOMIC_EXIT_CRITICAL()
#define portFORCE_INLINE
#define ATOMIC_COMPARE_AND_SWAP_SUCCESS   0x1U
 Compare and swap succeeded, swapped.
#define ATOMIC_COMPARE_AND_SWAP_FAILURE   0x0U
 Compare and swap failed, did not swap.

Functions

static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32 (uint32_t volatile *pulDestination, uint32_t ulExchange, uint32_t ulComparand)
 Atomic compare-and-swap.
static portFORCE_INLINE void * Atomic_SwapPointers_p32 (void *volatile *ppvDestination, void *pvExchange)
 Atomic swap (pointers).
static portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32 (void *volatile *ppvDestination, void *pvExchange, void *pvComparand)
 Atomic compare-and-swap (pointers).
static portFORCE_INLINE uint32_t Atomic_Add_u32 (uint32_t volatile *pulAddend, uint32_t ulCount)
 Atomic add.
static portFORCE_INLINE uint32_t Atomic_Subtract_u32 (uint32_t volatile *pulAddend, uint32_t ulCount)
 Atomic subtract.
static portFORCE_INLINE uint32_t Atomic_Increment_u32 (uint32_t volatile *pulAddend)
 Atomic increment.
static portFORCE_INLINE uint32_t Atomic_Decrement_u32 (uint32_t volatile *pulAddend)
 Atomic decrement.
static portFORCE_INLINE uint32_t Atomic_OR_u32 (uint32_t volatile *pulDestination, uint32_t ulValue)
 Atomic OR.
static portFORCE_INLINE uint32_t Atomic_AND_u32 (uint32_t volatile *pulDestination, uint32_t ulValue)
 Atomic AND.
static portFORCE_INLINE uint32_t Atomic_NAND_u32 (uint32_t volatile *pulDestination, uint32_t ulValue)
 Atomic NAND.
static portFORCE_INLINE uint32_t Atomic_XOR_u32 (uint32_t volatile *pulDestination, uint32_t ulValue)
 Atomic XOR.

Detailed Description

FreeRTOS atomic operation support.

This file implements atomic functions by disabling interrupts globally. Implementations with architecture specific atomic instructions can be provided under each compiler directory.

Definition in file atomic.h.

Macro Definition Documentation

◆ ATOMIC_COMPARE_AND_SWAP_FAILURE

#define ATOMIC_COMPARE_AND_SWAP_FAILURE   0x0U

Compare and swap failed, did not swap.

Definition at line 91 of file atomic.h.

Referenced by Atomic_CompareAndSwap_u32(), and Atomic_CompareAndSwapPointers_p32().

◆ ATOMIC_COMPARE_AND_SWAP_SUCCESS

#define ATOMIC_COMPARE_AND_SWAP_SUCCESS   0x1U

Compare and swap succeeded, swapped.

Definition at line 90 of file atomic.h.

Referenced by Atomic_CompareAndSwap_u32(), and Atomic_CompareAndSwapPointers_p32().

◆ ATOMIC_ENTER_CRITICAL

◆ ATOMIC_EXIT_CRITICAL

◆ portFORCE_INLINE

Function Documentation

◆ Atomic_Add_u32()

portFORCE_INLINE uint32_t Atomic_Add_u32 ( uint32_t volatile * pulAddend,
uint32_t ulCount )
static

Atomic add.

Atomically adds count to the value of the specified pointer points to.

Parameters
[in,out]pulAddendPointer to memory location from where value is to be loaded and written back to.
[in]ulCountValue to be added to *pulAddend.
Returns
previous *pulAddend value.

Definition at line 211 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_AND_u32()

portFORCE_INLINE uint32_t Atomic_AND_u32 ( uint32_t volatile * pulDestination,
uint32_t ulValue )
static

Atomic AND.

Performs an atomic AND operation on the specified values.

Parameters
[in,out]pulDestinationPointer to memory location from where value is to be loaded and written back to.
[in]ulValueValue to be ANDed with *pulDestination.
Returns
The original value of *pulDestination.

Definition at line 344 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_CompareAndSwap_u32()

portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32 ( uint32_t volatile * pulDestination,
uint32_t ulExchange,
uint32_t ulComparand )
static

Atomic compare-and-swap.

Performs an atomic compare-and-swap operation on the specified values.

Parameters
[in,out]pulDestinationPointer to memory location from where value is to be loaded and checked.
[in]ulExchangeIf condition meets, write this value to memory.
[in]ulComparandSwap condition.
Returns
Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped.
Note
This function only swaps *pulDestination with ulExchange, if previous *pulDestination value equals ulComparand.

Definition at line 110 of file atomic.h.

References ATOMIC_COMPARE_AND_SWAP_FAILURE, ATOMIC_COMPARE_AND_SWAP_SUCCESS, ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_CompareAndSwapPointers_p32()

portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32 ( void *volatile * ppvDestination,
void * pvExchange,
void * pvComparand )
static

Atomic compare-and-swap (pointers).

Performs an atomic compare-and-swap operation on the specified pointer values.

Parameters
[in,out]ppvDestinationPointer to memory location from where a pointer value is to be loaded and checked.
[in]pvExchangeIf condition meets, write this value to memory.
[in]pvComparandSwap condition.
Returns
Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped.
Note
This function only swaps *ppvDestination with pvExchange, if previous *ppvDestination value equals pvComparand.

Definition at line 178 of file atomic.h.

References ATOMIC_COMPARE_AND_SWAP_FAILURE, ATOMIC_COMPARE_AND_SWAP_SUCCESS, ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_Decrement_u32()

portFORCE_INLINE uint32_t Atomic_Decrement_u32 ( uint32_t volatile * pulAddend)
static

Atomic decrement.

Atomically decrements the value of the specified pointer points to

Parameters
[in,out]pulAddendPointer to memory location from where value is to be loaded and written back to.
Returns
*pulAddend value before decrement.

Definition at line 290 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_Increment_u32()

portFORCE_INLINE uint32_t Atomic_Increment_u32 ( uint32_t volatile * pulAddend)
static

Atomic increment.

Atomically increments the value of the specified pointer points to.

Parameters
[in,out]pulAddendPointer to memory location from where value is to be loaded and written back to.
Returns
*pulAddend value before increment.

Definition at line 265 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_NAND_u32()

portFORCE_INLINE uint32_t Atomic_NAND_u32 ( uint32_t volatile * pulDestination,
uint32_t ulValue )
static

Atomic NAND.

Performs an atomic NAND operation on the specified values.

Parameters
[in,out]pulDestinationPointer to memory location from where value is to be loaded and written back to.
[in]ulValueValue to be NANDed with *pulDestination.
Returns
The original value of *pulDestination.

Definition at line 371 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_OR_u32()

portFORCE_INLINE uint32_t Atomic_OR_u32 ( uint32_t volatile * pulDestination,
uint32_t ulValue )
static

Atomic OR.

Performs an atomic OR operation on the specified values.

Parameters
[in,out]pulDestinationPointer to memory location from where value is to be loaded and written back to.
[in]ulValueValue to be ORed with *pulDestination.
Returns
The original value of *pulDestination.

Definition at line 317 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_Subtract_u32()

portFORCE_INLINE uint32_t Atomic_Subtract_u32 ( uint32_t volatile * pulAddend,
uint32_t ulCount )
static

Atomic subtract.

Atomically subtracts count from the value of the specified pointer pointers to.

Parameters
[in,out]pulAddendPointer to memory location from where value is to be loaded and written back to.
[in]ulCountValue to be subtract from *pulAddend.
Returns
previous *pulAddend value.

Definition at line 239 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_SwapPointers_p32()

portFORCE_INLINE void * Atomic_SwapPointers_p32 ( void *volatile * ppvDestination,
void * pvExchange )
static

Atomic swap (pointers).

Atomically sets the address pointed to by *ppvDestination to the value of *pvExchange.

Parameters
[in,out]ppvDestinationPointer to memory location from where a pointer value is to be loaded and written back to.
[in]pvExchangePointer value to be written to *ppvDestination.
Returns
The initial value of *ppvDestination.

Definition at line 146 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.

◆ Atomic_XOR_u32()

portFORCE_INLINE uint32_t Atomic_XOR_u32 ( uint32_t volatile * pulDestination,
uint32_t ulValue )
static

Atomic XOR.

Performs an atomic XOR operation on the specified values.

Parameters
[in,out]pulDestinationPointer to memory location from where value is to be loaded and written back to.
[in]ulValueValue to be XORed with *pulDestination.
Returns
The original value of *pulDestination.

Definition at line 398 of file atomic.h.

References ATOMIC_ENTER_CRITICAL, ATOMIC_EXIT_CRITICAL, and portFORCE_INLINE.