ako naprogramovat

Pavel Hudeček edizon na seznam.cz
Pátek Duben 12 18:47:03 CEST 2024


Záleží na okolnostech, např. jestli je k dispozici víc nebo míň paměti.

"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.

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.

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ě.

PH

Dne 12.04.2024 v 18:19 Daniel Valuch napsal(a):
>
> zdravim osadenstvo,
>
> 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.
>
> 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
>
> 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;
>      }
>
> Druhy vystup je ale binarny, prichadzaju pakety, ktore maju strukturu 
> definovanu, ale paket zacina opacne.
>
> 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
>
> Prve dva bajty na zaciatku B5 62 vzdy oznacuju zaciatok paketu
>
> dalsie dva 06 8A oznacuju o aky paket ide
>
> nasledujuce dva 18 00 dlzku kolko byteov spravy nasleduje (v tomto 
> pripade 24)
>
> potom je samotna sprava
>
> a na konci 00 B6 su dva bajty checksum
>
> 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.
>
> Ako na to?
>
> dakujem,
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240412/4449310e/attachment.htm>


Další informace o konferenci Hw-list