|
asm("cli") - запретить прерывания (сбрасывает бит i в SREG)
asm("sei") - разрешить прерывания (устанавливает бит i в SREG)
Пример:
char m_func(void)
{
asm("cli");
.........
.........
asm("sei");
}
можно сделать более коррктно:
#define EnderCriticalSection()\
asm("push r16");\
asm("in r16,SREG");\
asm("push r16");\
asm("cli")
#define ReleaseCriticalSection()\
asm("pop r16");\
asm("out SREG,r16");\
pasm("pop r16")
пример:
char m_func(void)
{
EnderCriticalSection();
.........
.........
ReleaseCriticalSection();
}
E-mail: info@telesys.ru