/** * \file Atomic.hpp * \project EFC_PlatformC28x * \date 10 мая 2024 г. * \author leonidTitov * * \brief Проба пера использования ассемблерного кода для atomic */ #ifndef ATOMIC_HPP_ #define ATOMIC_HPP_ #include namespace umlib { namespace imp { class AtomicFlag { volatile uint16_t * flag; public: AtomicFlag(); AtomicFlag(const AtomicFlag &) = delete; AtomicFlag & operator=(const AtomicFlag &) = delete; AtomicFlag & operator=(const AtomicFlag &) volatile = delete; bool test_and_set() volatile; bool test_and_set(); void clear() volatile; void clear(); ~AtomicFlag(); }; }} extern "C" { extern uint16_t _test_and_set_bit( volatile uint16_t * p ); extern void _clear_bit( volatile uint16_t * p ); } inline bool umlib::imp::AtomicFlag::test_and_set() volatile { return _test_and_set_bit( flag ); } inline bool umlib::imp::AtomicFlag::test_and_set() { return _test_and_set_bit( flag ); } inline void umlib::imp::AtomicFlag::clear() volatile { _clear_bit( flag ); } inline void umlib::imp::AtomicFlag::clear() { _clear_bit( flag ); } #endif /* ATOMIC_HPP_ */ // end file Atomic.hpp