1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-19 23:22:16 +03:00

Automatically call yield() in WiFiClient::available and WiFiServer::available

This commit is contained in:
Ivan Grokhotkov 2015-01-07 02:45:46 +03:00
parent 2b503977b9
commit 661c414c2a
2 changed files with 10 additions and 2 deletions

View File

@ -158,13 +158,14 @@ extern "C" uint32_t esp_micros_at_task_start();
int ICACHE_FLASH_ATTR WiFiClient::available()
{
static uint32_t lastPollTime = 0;
if (!_client)
return 0;
if (_lastPollTime > esp_micros_at_task_start())
if (lastPollTime > esp_micros_at_task_start())
yield();
_lastPollTime = micros();
lastPollTime = micros();
int result = _client->getSize();
return result;

View File

@ -74,9 +74,12 @@ void WiFiServer::begin()
tcp_arg(listen_pcb, (void*) this);
}
extern "C" uint32_t esp_micros_at_task_start();
WiFiClient WiFiServer::available(byte* status)
{
static uint32_t lastPollTime = 0;
if (_unclaimed)
{
WiFiClient result(_unclaimed);
@ -85,6 +88,10 @@ WiFiClient WiFiServer::available(byte* status)
return result;
}
if (lastPollTime > esp_micros_at_task_start())
yield();
lastPollTime = micros();
return WiFiClient();
}