avr-fw-modules/core/include/sys/arch/atomic.h

18 lines
369 B
C

#pragma once
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <cpu/cpu.h>
#include <sys/dbg.h>
extern intptr_t _dbg_atomic_ip;
#define ATOMIC \
inline void __restoresreg(uint8_t *sr) { SREG = *sr; rt_dbg->atomic_ip = 0; }; \
uint8_t __sreg __attribute__((__cleanup__(__restoresreg))) = SREG; \
cli(); \
rt_dbg->atomic_ip = getPC();