Interessante ... magari per cose più sostanziose ... comunque, appena ho tempo, provo a sistemarci anche questa
Una cosa non mi è chiara ...
... "dependencies - a list of other libraries that are needed by this one, optionally including version numbers" ... in questo caso, la avr/pgmspace.h ci deve essere se compili per UNO, ma non ci deve essere se compili per DUE ... cosa si mette in dependencies ?
PaoloP:
EDIT:
Qui un codice per il CRC32 ricorsivo --> Arduino CRC-32
...è però più lenta perché calcola alcuni valori della lookup-table a runtime
PaoloP:
Guglielmo puoi aggiungere gli ifndef agli .h per escludere la doppia inclusione della libreria?
Inoltre il file .ino va spostato nella sottocartella examples.
Dove Paolo ? ... a me non segnala doppie inclusioni ... quale è la libreria inclusa due volte ? la avr/pgmspace.h ?
Si, avevo visto che c'era una CRC16, ma in realtà a me serviva una CRC32 e così ... mi sono divertito a farle tutte e due
Invece io ho un problema ...
... dato che la cartella si chiama crc, mentre i due moduli si chiamano crc16.c e crc32.c, anche se metto il .ino in examples/ , spostando il tutto sotto arduino/libraries ... nell'IDE, tra gli esempi, NON mi appare nulla ...
E' corretto ? converrebbe fare un'unica crc che contiene sia la funzione crc16 che la crc32 ? ed in tal caso, quando fa il linker, se a me serve solo la crc32, non è che comunque lui si porta dentro tutto il modulo oggetto e quindi tutte e due le funzioni (... con conseguente occupazione inutile di memoria) ?
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?
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
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 ?
... ... 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
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
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?
... 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) ...
Per gli unsigned char ... usali pure e passali con un bel cast davanti XD
Se ben ricordo NON avevo strutturato la cosa come una vera libreria, ma come due moduli C separati dei quali includevi solo quello che ti serviva direttamente nel tuo progetto (copiando il .h ed il .c nella cartella dove hai il tuo .ino)