ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
619111 Топик полностью
Скрипач, пророк (12.09.2015 13:26, просмотров: 506) ответил LightElf на Coroutine или protothreads
Может кому будет интересно: использование protothreads в функциональном стиле программирования.  #include "OS_base.h" #include "pt.h" uint8_t cmd, fault; // могут быть записаны-прочитаны по сети char Splash(uint8_t in, char out){ static uint8_t old, T[8]; // память под восемь таких задач static struct pt proc[8]; struct pt *pt = proc+in; // номер входа использован как индекс PT_BEGIN(pt); PT_WAIT_UNTIL(pt, (cmd ^ old) & _BV(in)); _On(out); T_RST(T+in); while(1){ PT_YIELD(pt); if(cmd & IOPort & _BV(in)){ fault &= ~_BV(in); old |= _BV(in); break; }; if(~cmd & ~IOPort & _BV(in)){ fault &= ~_BV(in); old &= ~_BV(in); break; }; if(T_SECS(T[in]) > 5){ fault |= _BV(in); break; } }; _Off(out); T_RST(T+in); PT_WAIT_WHILE(pt, T_SECS(T[in]) < 5); PT_END(pt); }; int main(void){ while(1){ sleep_cpu(); wdt_reset(); net_process_data(); os_dio(); Splash(0, 8); Splash(1, 9); Splash(2,10); Splash(3,11); Splash(4,12); Splash(5,13); Splash(6,14); Splash(7,15); } }
... но не любой ценой.