Go Down

Topic: Librerie per il calcolo del CRC16 e CRC32 (Read 6329 times) previous topic - next topic

erpomata

Ok compila anche per attiny85, non l'ho ancora provato.
http://www.paologiammarco.it
http://www.valentinamagni.it

gpb01


Ok compila anche per attiny85, non l'ho ancora provato.


Mah ... sai, l'unico problema è sulle piattaforme dove NON è (ancora) rilasciata la avr/pgmspace.h , perché, per il resto, è C puro ... ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

erpomata

#17
Apr 18, 2013, 07:50 pm Last Edit: Apr 18, 2013, 08:06 pm by erpomata Reason: 1
Un paio di domande.

Inserendo questa libreria nel mio sketch mi sono sorti un paio di dubbi:


  • Il primo è un pò OT, ho scoperto, forse copiato involontariamente, che utilizzavo un tipo di dato "unsigned char", e per questo non compilava, ma che differenza c'è tra un "unsigned char" ed un "char", lo capisco con i tipi di dato numerici ma con i char...;

  • Il secondo invece riguarda questa libreria, ma come mai gli devo dare la lunghezza come secondo parametro? Di che lunghezza parliamo?

http://www.paologiammarco.it
http://www.valentinamagni.it

gpb01

1. Bé, come dice il nome, il "char" è segnato e va da -128 a +127, mentre l' "unsigned char" non è segnato e va da 0 a 255, comunque ... sempre un byte occupa ;)

2. Il primo parametro è il puntatore a ciò di cui vuoi calcolare il CRC, il secondo indica quanti bytes è lungo ciò di cui vuoi calcolare il CRC ... semplice no ? :)

Guglielmo
Search is Your friend ... or I am Your enemy !

erpomata

Ok grazie.
Ma la lunghezza non può ricavarsela dalla stringa passata in ingresso?
http://www.paologiammarco.it
http://www.valentinamagni.it

gpb01

... :) ... e mica serve solo a calcolare CRC di stringhe ... le funzioni vedono solo sfilze di bytes, che poi siano array di char[], byte[], di int[], di double[] o di float[] ... "nun glié ne po' fregà de meno" ... basta che gli dici quanti bytes sono e quella calcola :D
Search is Your friend ... or I am Your enemy !

erpomata

Ottimo  :D ma mi ci vorrà un pò per capirlo  :smiley-eek-blue:
http://www.paologiammarco.it
http://www.valentinamagni.it

gpb01

ma guarda è semplice ... immaginalo come una "firma" di un qualche cosa che un blocco di byte. Se tu vuoi essere sicuro che quel blocco di dati è proprio lui, confronti il CRC prima e dopo ... se è uguale, e sicuramente (... va bé ... diciamo con molta, molta probabilità) lui.

Esistono ovviamente algoritmi molto più complessi e sicuri (es. MD5), ma sono molto più pesanti e il CRC32 è già una bella sicurezza :)
Search is Your friend ... or I am Your enemy !

erpomata

ahah si scusa non ci siamo capiti.
Lo so cosa è il crc(16/32) o l'md5, quello che mi rimane difficile è capire quanti byte occupa ciò di cui  voglio il crc.

Ancora qualche domanda:
ma per la lunghezza non si potrebbe usare la funzione "sizeof"?
se volessi continuare ad usare gli "unsigned char" dovrei riscrivermi le funzioni? o sbaglio qualcosa?
http://www.paologiammarco.it
http://www.valentinamagni.it

PaoloP

Si è possibile, ma poi per ogni tipo passato dovresti crearti una funzione apposita con overloading o utilizzare un template.

gpb01

... si, forse si potrebbe anche usare il sizeof() ... ma così al volo ... non ricordo se è applicabile a tutti, tutti i casi (comprese le strutture e quant'altro) ...  :smiley-roll:

Per gli unsigned char ... usali pure e passali con un bel cast davanti  XD

Guglielmo
Search is Your friend ... or I am Your enemy !

erpomata

Ok grazie per ora basta domande e domani all'opera.
Preparatevi  :D
http://www.paologiammarco.it
http://www.valentinamagni.it

ard2011

Ciao scusate, ma da dove scarico la libreria e gli esempi?

Ho l'ide 1.0.5 e non la trovo!  =(

gpb01

... i due moduli sono in uno zip allegato al primo post di questo thread ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

ard2011

ok, trovata.
Ho copiato la cartella in arduino/libraries ma quando vado a compilare l'esempio mi da tanti warning? Dove sbaglio?

Go Up