ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
6 мая
610666 Топик полностью
Скрипач, пророк (23.07.2015 09:58, просмотров: 483) ответил =AlexD= на Что сохранить?
Адрес входа или выхода.  #define FD1_Fault (IOPort & _BV(0)) #define FD2_Fault (IOPort & _BV(1)) #define Fault 10 #define FD1 8 #define FD2 9 enum{ Off=0, _1=1, _2=2, Auto=3 } Fd_Mode; static char Fd2(void){ static uint8_t T, run; static struct pt proc, *const pt = &proc; if(FD1_Fault || FD2_Fault) _On(Fault); else _Off(Fault); PT_BEGIN(pt); PT_WAIT_UNTIL(pt, Fd_Mode != Off); if(Fd_Mode == _1) run = FD1; if(Fd_Mode == _2) run = FD2; if(Fd_Mode > Auto) Fd_Mode = Off; if(run != FD1 && run != FD2) run = FD1; _On(run); while(Fd_Mode != Off){ PT_YIELD(pt); if(run == FD1 && (Fd_Mode == _2 || FD1_Fault)) break; if(run == FD2 && (Fd_Mode == _1 || FD2_Fault)) break; }; _Off(run); run = (run == FD1? FD2: FD1); T_RST(&T); PT_WAIT_WHILE(pt, T_SECS(T) < 2); PT_END(pt); }
... но не любой ценой.