<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Záleží na okolnostech, např. jestli je k dispozici víc nebo míň
    paměti.<br>
    <br>
    "málopaměťový" začátek je zahazovat všechno, dokud nepřijde B5 a pak
    začít ukládat do bufferu a pokračovat do doby, než je buď regulérní
    konec, nebo chyba, včetně podezřelé časové mezery. Pak buď
    zpracovat, nebo ne a znovu na čekání na začátek.<br>
    <br>
    Nebo se to dá prostě bufferovat do dostatečně velkého bufferu a až v
    něm hledat. To má výhodu, že se dají třeba i opravovat chyby.<br>
    <br>
    Další pokračování je to nějak dekódovat. Nejlepší je když má paket
    pevnou strukturu, pak stačí ji mít nadefinovanou přes struct, takže
    se k ní dá rovnou přistoupit tak jak je. Pokud to není na 8b
    jednočipu, tak jsou možné nějaké boje s optimalizací, třeba použití
    #pragma pack. Respektování ovšem není pro kompilátor povinné,
    případně to ani nejde, třeba kvůli HW nutnosti zarovnání dat v
    paměti. Alternativou je si to do tý struktury, nebo jednotlivých
    proměnných vytahat jednotlivě.<br>
    <br>
    PH<br>
    <br>
    <div class="moz-cite-prefix">Dne 12.04.2024 v 18:19 Daniel Valuch
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:f5cdfa1a-095a-49cf-b5af-b7fd6806fd6c@k-net.fr">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <p>zdravim osadenstvo,</p>
      <p>programovat viem len velmi zakladne, preto by som mal na piatok
        algoritmicku... Dokoncujem ziskavanie presneho casu z GNSS
        modulu o ktorych sme tu uz nejaky cas rozpravali. <br>
      </p>
      <p>Ten generuje dva typy vystupu po seriovej linke. Klasicky
        ascii, ktory je ukonceny \n znakom a parsovanie tohoto stringu
        je trivialne (robim v arduino ide). Prijimaju sa data, tie sa
        pridavaju do stringu a ked pride \n tak sa to rozobere a urobi
        co treba<br>
      </p>
      <pre>void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    if (inChar == '\n') {
        // sprava/retazec je hotovy, rozparsuj a urob co treba
      tempString = "";
    }
    // keep receiving until \n arrives
    else {
      // add it to the inputString and keep receiving:
      tempString += inChar;
    }
</pre>
      <p>Druhy vystup je ale binarny, prichadzaju pakety, ktore maju
        strukturu definovanu, ale paket zacina opacne. <br>
      </p>
      <pre>0000  B5 62 06 8A 18 00 00 05 00 00 01 00 76 10 01 05  
0010  00 53 10 01 7E 01 91 20 00 7F 01 91 20 01 00 B6  
</pre>
      <p>Prve dva bajty na zaciatku B5 62 vzdy oznacuju zaciatok paketu</p>
      <p>dalsie dva 06 8A oznacuju o aky paket ide</p>
      <p>nasledujuce dva 18 00 dlzku kolko byteov spravy nasleduje (v
        tomto pripade 24)<br>
      </p>
      <p>potom je samotna sprava</p>
      <p>a na konci 00 B6 su dva bajty checksum</p>
      <p>a s tymto si neviem poradit, ako to zapisat aby to pocuvalo
        kedy pride B5 62, pockalo ako dlha bude sprava a potom zapisalo
        do nejakeho stringu data. <br>
      </p>
      <p>Ako na to?</p>
      <p>dakujem,</p>
    </blockquote>
  </body>
</html>