Guest cipul Posted November 2, 2007 Share Posted November 2, 2007 Salutare!Ma poate lamuri si pe mine cineva cum se calculeaza o suma de control?Am un fisier copiat de pe un eeprom si as vrea sa modific o valoare in el..Multumesc Link to comment
Laci Posted November 2, 2007 Share Posted November 2, 2007 CRC-ul se calculeaza prin sumarea pe 8 biti continutul unei linii(fara checksum) si negare(complement fata de 2, adica 256-suma).Vezi pdf-ul atasat. Link to comment
lucicop Posted November 5, 2007 Share Posted November 5, 2007 Lasand la o parte faptul ca fisierele copiate de pe niste EEPROM-uri nu-mi miros bine, o sa zic ca si sumele astea de control pot fi de mai multe tipuri Prin adunare, prin scadere, pe un octet, pe doi... ghinion. Link to comment
Guest cipul Posted November 6, 2007 Share Posted November 6, 2007 Multumesc mult Laci!dar nu am prea reusit sa calculez in fisierulmeu....atasat mai jos...Valoarea incercuita cu albastru reprezinta un itreg, adica 69667..dar imi poti spune ce reprezinta valoarea incercuita cu rosu?multumesc. Link to comment
crispus Posted December 3, 2007 Share Posted December 3, 2007 23 10 01 00 - ai 4 octeti (32 biti) care pot sa insemne orice, depinde ce s-a vrut a se scrie in respectivul fisier; valoarea lui depinde daca e little sau big endian http://en.wikipedia.org/wiki/Endianness#Big_Endian - poate reprezenta asa cum ai zis 69667 <==> 0x00011023 (LE) sau 588,251,392 <==> 0x23100100 (BE). Acuma ce e selectat cu rosu, ai 2 octeti, care pot fi interpretati in mai multe feluri: - fara semn -0xEFDB = 61403(LE); 0xDBEF = 56303 (BE); - cu semn - 0xEFDB = -4133; 0xDBEF = -9233; Link to comment
MirceaM Posted May 31, 2013 Share Posted May 31, 2013 Vad ca ultimul mesaj aici este din 2007. :)Totusi... Ma intereseaza unele chestiuni despre CRC, la mod mai general, nu neaparat legat de controllere si eproms.Anume, prima intrebare ar fi aceasta: este adevarat ca pentru calculul valorii CRC (ne gandim la 1 byte) este necesara o bucla al carei corp sa se repete de atatea ori cati bytes are fisierul de intrare? Desi raspunsul ar parea evident ca este 'da', totusi pun intrebarea cu gandul ca procesoare mai bune pot sa efectueze (cu o singura instructiune elementara) operatiuni pe mai multi bytes. Ne gandim chiar incepand cu Z80 (cu atat mai mult la procesoare de 16 biti si mai evoluate). Acele instructiuni elementare ale caror mnemonice sunt sufixate cu 'r' (ldir, lddr, cpir, cpdr, inir, indr, otir, otdr..) sunt capabile de asa ceva.Instructiunea 'ldir' ia de la adresa sursa 'hl' un byte, il depune la 'de', apoi incrementeaza ambele adrese si repeta de 'bc' ori, deci lungimea este pe 16 biti. Z80 nu suporta decat 64KB de memorie (mai mult numai in modul 'chinuit', cu pagini..) deci nu ne gandim la a muta 65536 bytes dar se pot muta (exemplu) 10000 bytes fara problema, cu 'ldir'. Pentru procesoare de 16 bits sau mai mult, considerand ca a calcula CRC se reduce la niste xor-uri, ar fi posibil sa utilizam asemenea instructiuni 'cu repetitie'? Exista XOR cu repetitie? Scopul ar fi reducerea timpului de calcul CRC pentru fisiere mari, zeci sau sute de MB. Link to comment
Guest stefaann Posted August 24, 2013 Share Posted August 24, 2013 Stie cineva concret cum se calculeaza CRC-ul fara trimiteri la C++ sau alte comentarii savante?Ma intereseaza cum se calculeaza pentru un sir de 6-8 octeti. Link to comment
crispus Posted August 26, 2013 Share Posted August 26, 2013 Care CRC? http://en.wikipedia.org/wiki/Polynomial ... ncy_checks Link to comment
one Posted August 26, 2013 Share Posted August 26, 2013 Zero teorii savante: http://ghsi.de/CRC/ Link to comment
MirceaM Posted August 27, 2013 Share Posted August 27, 2013 Stie cineva concret cum se calculeaza CRC-ul fara trimiteri la C++ sau alte comentarii savante? Ma intereseaza cum se calculeaza pentru un sir de 6-8 octeti. Cel mai simplu mod de a calcula CRC este acesta. 1. Se initializeaza o variabila V de 1 byte cu 0x00. 2. Pentru fiecare BYTE dintre cei 10 sau cati sunt ( identificati printr-un indice de la 0 la 9) se efectueaza operatia: V = V XOR BYTE; 3. Gata, in V se afla rezultatul. Se poate scrie in orice limbaj de asamblare, in C, Basic etc.. Mai spui ca e prea savant? Vei gasi multa "teorie" si alte metode mai bune dar niciuna mai simpla decat asta. Un simplu XOR cu totii bytes de intrare produce la final o buna valoare pentru CRC. Si poate fi multumitor. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now