Скрипач, пророк (15.09.2015 10:30 - 10:37, просмотров: 490) ответил Make_Pic на ВЫ можете дать полное описание макросов, которыми вы пользуетесь в этой "головоломке", многим незнакомым с protothreads интересно будет?
Без проблем (внутри). Если не достаточно - задавайте вопросы.
struct pt *pt; // На самом деле, struct pt это int16, в котором хранится
// номер строки, на котором вышли из процедуры
// полный аналог состояния у Шатыло, только "безымянный" и спрятанный в макросах.
PT_BEGIN(pt); // На самом деле switch по состоянию pt
PT_END(pt); // Внутри PT_BEGIN(pt) стоит метка case 0, поэтому
// инициализированный нулем pt приведет в выполнению
// следующей за PT_BEGIN(pt) команды.
PT_RESTART(pt) // сбрасывает pt в ноль.
PT_WAIT_UNTIL(pt, <bool>); // Внутри макроса ставится метка case и проверяется условие <bool>.
PT_WAIT_WHILE(pt, <bool>); // До выполнения (не выполнения) условия, из PT_BEGIN(pt)
// будем получать управление сюда и сразу выходить
// из функции через return PT_WAITING;
... но не любой ценой.