ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
215306 Топик полностью
Скрипач, пророк (12.10.2010 23:16 - 23:27, просмотров: 184) ответил mazur на Здравствуйте, уважаемые! Такой вопрос. Допустим нужно написать такую программу, в которой, бывает, нужно одновременно запустить несколько таймеров, задержек. Я когда-то использовал флаги. Потом, до недавнего времени, простенькую таймерную службу,
Уже отвечал на этот вопрос Один таймер и "машины состояний" Примерно так: void RoomCtrl(uint8_t i){ uint16_t in,out; do{ char x = eeprom_read(IN_EEPROM_ROOM_IN +i); char y = eeprom_read(IN_EEPROM_ROOM_OUT+i); if(x == 0xFF || y == 0xFF) return; in = _BV(x); out = _BV(y); }while(0); if((byMaster & out)==0) return; // Инверсное управление if((IOPort & in)==0){ // Инверсный датчик сработал minutes[i] = SysTime_1min; Light_On(out); }else if((IOPort & out)==0){ // Инверсный включен if(Delay(minutes[i], SysTime_1min) >= eeprom_read(IN_EEPROM_DELAY)) Light_Off(out); } } int main(void){ static uint8_t dio_t1; byMaster = 0xFFFF; while(1){ sleep_cpu(); wdt_reset(); net_process_data(); if( Delay(dio_t1, SysTime_4ms) > 0 ){ dio_dt++; sys_DIO(); RoomCtrl(0); RoomCtrl(1); } } }
... но не любой ценой.