Go Down

Topic: Librerie per il calcolo del CRC16 e CRC32 (Read 7244 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy