ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
427615 Топик полностью
Скрипач, пророк (25.07.2013 22:26, просмотров: 419) ответил rezident на А операцию вычитание в еще одни скобки взять не хотите? :)
Тогда и YIELD'у нужно ссылку на контекст передать. А еще, готовый PT_WAIT_UNTIL есть. Реальный код выглядит вот так: static char Fans2Fd(struct pt *pt){ static uint8_t TL = 0; PT_BEGIN(pt); L_IDLE: while(1){ PT_YIELD(pt); _Off(FD1); _Off(KM1); _Off(KM2); if(B1_Button()) goto L_RUN_1; if(B2_Button()) goto L_RUN_2; }; L_RUN_1: _On(KM1); _On(FD1); PT_WAIT_WHILE(pt, B1_Button()); while(1){ PT_YIELD(pt); if(B1_Button()){ _Off(FD1); _Off(KM1); PT_WAIT_WHILE(pt, B1_Button()); goto L_IDLE; }; if(B2_Button()){ _Off(FD1); _Off(KM1); TL = SysTime_1s; PT_WAIT_WHILE(pt, (Delay(TL, SysTime_1s) < 15)); goto L_RUN_2; } }; L_RUN_2: _On(KM2); _On(FD1); PT_WAIT_WHILE(pt, B2_Button()); while(1){ PT_YIELD(pt); if(B2_Button()){ _Off(FD1); _Off(KM2); PT_WAIT_WHILE(pt, B2_Button()); goto L_IDLE; }; if(B1_Button()){ _Off(FD1); _Off(KM2); TL = SysTime_1s; PT_WAIT_WHILE(pt, (Delay(TL, SysTime_1s) < 15)); goto L_RUN_1; } }; PT_END(pt); }
... но не любой ценой.