185 lines
4.4 KiB
C
185 lines
4.4 KiB
C
/*
|
|
* Copyright (c) CompanyNameMagicTag 2021-2022. All rights reserved.
|
|
* Description: OS Abstract Layer.
|
|
*/
|
|
|
|
/**
|
|
* @defgroup osal_atomic osal_atomic
|
|
*/
|
|
#ifndef __OSAL_ATOMIC_H__
|
|
#define __OSAL_ATOMIC_H__
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
#endif
|
|
|
|
typedef struct {
|
|
volatile int counter;
|
|
} osal_atomic;
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief read atomic variable
|
|
*
|
|
* @par Description:
|
|
* This API is used to implement the atomic read and return the value read from the input parameter @atomic.
|
|
*
|
|
* @par Support System:
|
|
* linux liteos freertos.
|
|
*/
|
|
int osal_atomic_read(osal_atomic *atomic);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief set atomic variable
|
|
*
|
|
* @par Description:
|
|
* This API is used to implement the atomic setting operation.
|
|
*
|
|
* @par Support System:
|
|
* linux liteos freertos.
|
|
*/
|
|
void osal_atomic_set(osal_atomic *atomic, int i);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief increment atomic variable and return
|
|
*
|
|
* @par Description:
|
|
* This API is used to implement the atomic self-addition and return the self-addition result.
|
|
*
|
|
* @par Support System:
|
|
* linux liteos freertos.
|
|
*/
|
|
int osal_atomic_inc_return(osal_atomic *atomic);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief Adds the given value to the atomic variable and returns the increased result.
|
|
*
|
|
* @par Description:
|
|
* Adds the given value to the atomic variable and returns the increased result.
|
|
*
|
|
* @param atomic [in] The atomic to be change.
|
|
* @param count [in] Number of atomic variables to be add.
|
|
*
|
|
* @par Support System:
|
|
* freertos.
|
|
*/
|
|
int osal_atomic_add_return(osal_atomic *atomic, int count);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief decrement atomic variable and return
|
|
*
|
|
* @par Description:
|
|
* This API is used to implement the atomic self-decrement and return the self-decrement result.
|
|
*
|
|
* @par Support System:
|
|
* linux liteos freertos.
|
|
*/
|
|
int osal_atomic_dec_return(osal_atomic *atomic);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief increment atomic variable
|
|
*
|
|
* @par Description:
|
|
* This API is used to implement the atomic self-addition.
|
|
*
|
|
* @par Support System:
|
|
* linux liteos freertos.
|
|
*/
|
|
void osal_atomic_inc(osal_atomic *atomic);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief Reduce a fixed number of atomic variables.
|
|
*
|
|
* @par Description:
|
|
* Reduce a fixed number of atomic variables
|
|
*
|
|
* @param atomic [in] The atomic to be change.
|
|
* @param count [in] Number of atomic variables to be reduced.
|
|
*
|
|
* @par Support System:
|
|
* freertos.
|
|
*/
|
|
void osal_atomic_sub(osal_atomic *atomic, unsigned int count);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief decrement atomic variable
|
|
*
|
|
* @par Description:
|
|
* This API is used to implement the atomic self-decrement.
|
|
*
|
|
* @par Support System:
|
|
* linux liteos freertos.
|
|
*/
|
|
void osal_atomic_dec(osal_atomic *atomic);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief Add a fixed number of atomic variables.
|
|
*
|
|
* @par Description:
|
|
* Add a fixed number of atomic variables
|
|
*
|
|
* @param atomic [in] The atomic to be change.
|
|
* @param count [in] Number of atomic variables to be add.
|
|
*
|
|
* @par Support System:
|
|
* freertos.
|
|
*/
|
|
void osal_atomic_add(osal_atomic *atomic, int count);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief decrement atomic variable and test
|
|
*
|
|
* @par Description:
|
|
* This API is used to subtract 1 atomically from the variable @atomic of the atomic type and
|
|
* checks whether the result is 0. If yes, true is returned. Otherwise, false is returned.
|
|
*
|
|
* @par Support System:
|
|
* linux.
|
|
*/
|
|
int osal_atomic_dec_and_test(osal_atomic *atomic);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief increment atomic variable and test
|
|
*
|
|
* @par Description:
|
|
* This API is used to add 1 atomically from the variable @atomic of the atomic type and checks whether the result is 0.
|
|
* If yes, true is returned. Otherwise, false is returned.
|
|
*
|
|
* @par Support System:
|
|
* linux.
|
|
*/
|
|
int osal_atomic_inc_and_test(osal_atomic *atomic);
|
|
|
|
/**
|
|
* @ingroup osal_atomic
|
|
* @brief increment unless the number is zero
|
|
*
|
|
* @par Description:
|
|
* Atomically increments @atomic by 1, if @atomic is non-zero.
|
|
*
|
|
* @return Returns true if the increment was done.
|
|
*
|
|
* @par Support System:
|
|
* linux.
|
|
*/
|
|
int osal_atomic_inc_not_zero(osal_atomic *atomic);
|
|
|
|
#ifdef __cplusplus
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|
|
#endif /* __OSAL_ATOMIC_H__ */
|