SDFM_CONTROL/EFC_PlatformC28x/Atomic.hpp

76 lines
1.2 KiB
C++
Raw Normal View History

/**
* \file Atomic.hpp
* \project EFC_PlatformC28x
* \date 10 мая 2024 г.
* \author leonidTitov
*
* \brief Проба пера использования ассемблерного кода для atomic
*/
#ifndef ATOMIC_HPP_
#define ATOMIC_HPP_
#include <stdint.h>
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