diff --git a/include/nuttx/atomic.h b/include/nuttx/atomic.h index 79d475f0189..2a6ff228a12 100644 --- a/include/nuttx/atomic.h +++ b/include/nuttx/atomic.h @@ -29,6 +29,13 @@ #include +#define NEED_ATOMIC_MACROS +#if defined(__has_include) +# if __has_include() && defined(__cplusplus) +# undef NEED_ATOMIC_MACROS +# endif +#endif + #if defined(__has_include) && !defined(CONFIG_LIBC_ARCH_ATOMIC) # if __has_include() && defined(__cplusplus) extern "C++" @@ -98,6 +105,8 @@ typedef volatile int64_t atomic64_t; * Pre-processor Definitions ****************************************************************************/ +#ifdef NEED_ATOMIC_MACROS + #define atomic_set(obj, val) ATOMIC_FUNC(store, 4)(obj, val, __ATOMIC_RELAXED) #define atomic_set_release(obj, val) ATOMIC_FUNC(store, 4)(obj, val, __ATOMIC_RELEASE) #define atomic64_set(obj, val) ATOMIC_FUNC(store, 8)(obj, val, __ATOMIC_RELAXED) @@ -198,6 +207,8 @@ typedef volatile int64_t atomic64_t; #define atomic64_try_cmpxchg_relaxed(obj, expected, desired) \ ATOMIC_FUNC(compare_exchange_weak, 8)(obj, (FAR int64_t *)expected, desired, __ATOMIC_RELAXED, __ATOMIC_RELAXED) +#endif + /**************************************************************************** * Public Function Prototypes ****************************************************************************/