----------------------------------- Sorin Sfartz 19 Oct 2018 22:51 ----------------------------------- Da, am citit si eu protocolul ala. Si nu imi place deloc. E complet neintuitiv. Parerea mea. Ce om normal ar raspunde la comanda V# (adica versiunea monturii) cu chr(major) & chr(minor) & “#”? Nemaivorbind ca pana sa verific ce trimite CGEM, eu nu mi-am dat seama ce sunt minor si major acelea. Sau de ce trebuie o banala comanda de slew sa fie asa: “P” & chr(2) & chr(16) & chr(36) & chr(rate) & chr(0) & chr(0) & chr(0)? Poate e doar o chestiune de gusturi. In fine chiar daca se trimit o gramada de NULL - uri in protocolul ala, nu e nici o problema din mai multe motive: 1. Bufferul este un array de bytes. Asignarea valorii zero in orice pozitie din array nu are nici o importanta. De altfel o buna dovada pentru lucrul asta, este ca programul merge perfect. Am testat toate slew-urile si functioneaza perfect. Daca un singur caracter in comanda aia tampita ar fi gresit, sau ar lipsi, CGEM-ul meu ar lua-o complet razna. Stiu asta pt ca am verificat. CGEM-ul in primul rand intra in asteptare mult timp, astfel ca skysafari se deconecteaza, iar apoi incepe sa verse pe portul serial sute de caractere aiurea. 2. Chiar daca bufferul ar fi un string C, adica un array de caractere, asignarea unui NULL intr-o pozitie oarecare, iarasi nu influenteaza cu nimic datele, caci imediat s-ar scrie un nou caracter in pozitia urmatoare, deci nu ar conta ca scrierea unui zero sterge tot ce urmeaza dupa el. 3. Am mari dubii ca scrierea unui NULL in momentul rularii programului are vreo influenta. Banuiesc ca trebuie sa declari explicit in program buffer[10]='\0'; pentru ca compilatorul sa anuleze tot ce ar fi dupa indexul 10. Daca array-ul este definit de la inceput de o anumita marime fixa, de unde sa stie compilatorul ce o sa puna ulterior portul serial intr-o pozitie oarecare in array? Eu cred ca array-ul va ramane cu valorile scrise din portul serial asa cum au venit. Ar putea fi intr-adevar o problema daca s-ar apela functii pentru stringuri care cauta caracterul null. 4. Nici in varianta declararii unui string cu "String sir=..." nu are importanta daca concatenam la momentul rularii programului un NULL. Sa presupunem ca sirul este: a, b, NULL, c, d. Dupa concatenare el va arata astfel: ab cd. Eu am pus array-ul acela de bytes din varianta 3 chiar in primele teste, din dorinta de a nu exista ambiguitati vizavi de cum e interpretat un caracter sau altul. Apoi am vazut ca merge si cu stringuri declarate cu String si codul e mai simplu. Insa acum daca ma gandesc mai bine, cea mai de incredere varianta e tot aceea cu array-ul de bytes. Nu e nici un dubiu vizavi de o valoare a unui numar intreg intre 0 si 255.