31#ifndef _UTIL_ATOMIC_H_
32#define _UTIL_ATOMIC_H_ 1
36#include <bits/attribs.h>
38#if !defined(__DOXYGEN__)
40static __ATTR_ALWAYS_INLINE__
uint8_t __iSeiRetVal(
void)
46static __ATTR_ALWAYS_INLINE__
uint8_t __iCliRetVal(
void)
52static __ATTR_ALWAYS_INLINE__
void __iSeiParam(
const uint8_t *__s)
58static __ATTR_ALWAYS_INLINE__
void __iCliParam(
const uint8_t *__s)
64static __ATTR_ALWAYS_INLINE__
void __iRestore(
const uint8_t *__s)
67 __asm__ __volatile__ (
"" :::
"memory");
202#if defined(__DOXYGEN__)
203#define ATOMIC_BLOCK(type)
205#define ATOMIC_BLOCK(type) for ( type, __ToDo = __iCliRetVal(); \
206 __ToDo ; __ToDo = 0 )
223#if defined(__DOXYGEN__)
224#define NONATOMIC_BLOCK(type)
226#define NONATOMIC_BLOCK(type) for ( type, __ToDo = __iSeiRetVal(); \
227 __ToDo ; __ToDo = 0 )
241#if defined(__DOXYGEN__)
242#define ATOMIC_RESTORESTATE
244#define ATOMIC_RESTORESTATE uint8_t sreg_save \
245 __attribute__((__cleanup__(__iRestore))) = SREG
263#if defined(__DOXYGEN__)
264#define ATOMIC_FORCEON
266#define ATOMIC_FORCEON uint8_t sreg_save \
267 __attribute__((__cleanup__(__iSeiParam))) = 0
281#if defined(__DOXYGEN__)
282#define NONATOMIC_RESTORESTATE
284#define NONATOMIC_RESTORESTATE uint8_t sreg_save \
285 __attribute__((__cleanup__(__iRestore))) = SREG
303#if defined(__DOXYGEN__)
304#define NONATOMIC_FORCEOFF
306#define NONATOMIC_FORCEOFF uint8_t sreg_save \
307 __attribute__((__cleanup__(__iCliParam))) = 0
#define cli()
Definition: interrupt.h:88
#define sei()
Definition: interrupt.h:74
unsigned char uint8_t
Definition: stdint.h:88