<div>Má read ošetřený návratový kód?<br/>
L.<br/>
<br/>
<font color="#888888"><font color="#888888">Sent from </font><font color="#888888"><a href="https://goo.gl/ODgwBb">MailDroid</a></font></font><br/><br/>-----Original Message-----<br/>From: Petr Zapadlo <zapik@email.cz><br/>To: HW-news <hw-list@list.hw.cz><br/>Sent: so, 23 čvc 2022 21:28<br/>Subject: příjem NTP ESP8266/32<br/><br/></div>Zdravím, <br/>
<br/>
na většině projektů, kde je  třeba   čas, tak ho synchronizuji z NTP.   <br/>
Občas (třeba  jednou za půl roku) se stane, že ESP získá špatný čas.   <br/>
Pokusil jsem se to eliminovat  - načítám čas 3x a porovnávám - použiji  <br/>
dvě hodnoty, které mají minimální rozestup. (pokud se nesejdou, tak to  <br/>
ignoruji a zkouším znova) <br/>
<br/>
Situace se zlepšila, přesto občas k problému dojde. Zdá se, že četnost  <br/>
nějak závisí i na kvalitě internetové linky.  U mě doma se to prakticky  <br/>
neděje (Metronet, DSL, modem Terminator) , ale u známé se to děje  <br/>
poměrně často (měsíčně) (O2, DSL, modem ZTE), u syna tak jednou za půl  <br/>
roku (kabelovka Vodafone). <br/>
<br/>
Vypadá to, že za nějakých podmínek projde UDP stackem v ESP i paket,  <br/>
který není v pořádku - asi má i vadný checksum, ale vzhledem k četnosti  <br/>
to nejsem schopen nijak ověřit.  Případně projde nesmyslný paket (ale to  <br/>
by měl eliminovat požadavek na 2 stejné hodnoty). <br/>
<br/>
Jak se divám do struktury NTP paketu, tak tam už žádný kontrolní  <br/>
mechanizmus není. (dívám se dobře?) <br/>
<br/>
Základní kus kodu je vzat z mnohokrát opakovaného příkladu: <br/>
<br/>
Poslání paketu: <br/>
<br/>
  memset(packetBuffer, 0, NTP_PACKET_SIZE); <br/>
   // Initialize values needed to form NTP request <br/>
   // (see URL above for details on the packets) <br/>
   packetBuffer[0] = 0b11100011;   // LI, Version, Mode <br/>
   packetBuffer[1] = 0;     // Stratum, or type of clock <br/>
   packetBuffer[2] = 6;     // Polling Interval <br/>
   packetBuffer[3] = 0xEC;  // Peer Clock Precision <br/>
   // 8 bytes of zero for Root Delay & Root Dispersion <br/>
   packetBuffer[12]  = 49; <br/>
   packetBuffer[13]  = 0x4E; <br/>
   packetBuffer[14]  = 49; <br/>
   packetBuffer[15]  = 52; <br/>
<br/>
   // all NTP fields have been given values, now <br/>
   // you can send a packet requesting a timestamp: <br/>
   _ntp_udp.beginPacket(timeServerIP, 123); //NTP requests are to port 123 <br/>
   _ntp_udp.write(packetBuffer, NTP_PACKET_SIZE); <br/>
   _ntp_udp.endPacket(); <br/>
<br/>
<br/>
Příjem paketu: <br/>
<br/>
_ntp_udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into  <br/>
the buffer <br/>
<br/>
     //the timestamp starts at byte 40 of the received packet and is  <br/>
four bytes, <br/>
     // or two words, long. First, esxtract the two words: <br/>
<br/>
     unsigned long highWord = word(packetBuffer[40], packetBuffer[41]); <br/>
     unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]); <br/>
<br/>
<br/>
Jak zvýšit spolehlivost a eliminovat blbý čas? <br/>
<br/>
<br/>
Díky <br/>
<br/>
Petr <br/>
<br/>
<br/>
_______________________________________________ <br/>
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz">www.HW.cz</a> <br/>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a> <br/>
<a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a> <br/>