临界断宏: #define CRITICAL() for(uint8 __flags=CriticalEnter(),__ToDo=1;__ToDo;__ToDo=0,CriticalExit(__flags))
uint8 __get_primask(void);
void __set_primask(uint8 flags);
static inline uint8 CriticalEnter(void) { uint8 flags=__get_primask(); __disable_interrupt(); return flags; }
static inline void CriticalExit(uint8 flags) { __set_primask(flags); }
使用: CRITICAL() { ………………//临界断 }
|