Кооперативная многозадачность такая кооперативная!
Я подозреваю это связано чисто с тем, что норот использует эту функцию чисто в виде: while ( ! wifi->available() ) delay(1); // ждем данных wifi->read();
В более нормальных системах этой проблемы просто не возникает, потому что там и select() и read() являются сисколлами, yield'ящими за тебя.
Похоже, ты прав. И хорошо, если используется while ( ! wifi->available() ) delay(1);, ведь delay() делает внутри себя yield().
Намного хуже, если кто-то сделает while (! wifi->available() ) ; // как бы do nothing, а это гарантированно вгонит систему в вотчдог. Поэтому сделать вызовы available() тоже "yield'ящими за тебя" оказывается меньшим из зол.
Comments 8
Reply
Reply
Я подозреваю это связано чисто с тем, что норот использует эту функцию чисто в виде:
while ( ! wifi->available() ) delay(1); // ждем данных
wifi->read();
В более нормальных системах этой проблемы просто не возникает, потому что там и select() и read() являются сисколлами, yield'ящими за тебя.
Reply
Намного хуже, если кто-то сделает while (! wifi->available() ) ; // как бы do nothing, а это гарантированно вгонит систему в вотчдог. Поэтому сделать вызовы available() тоже "yield'ящими за тебя" оказывается меньшим из зол.
Reply
PS. А под delay я и имел в виду busy loop. Просто busy loop с yield'ом обычно называется sleep или как-то еще заковыристее.
Reply
Reply
Reply
Reply
Leave a comment