Sebbene possano esserci opzioni più rapide di CRC, se le utilizzi è probabile che finirai per sacrificare un certo grado di capacità di rilevamento degli errori. A seconda dei requisiti di rilevamento degli errori, un'alternativa potrebbe essere quella di utilizzare il codice CRC ottimizzato per l'applicazione.
Per un confronto di CRC con altre opzioni, vedere l' eccellente risposta di
Martin Thompson .
Un'opzione per aiutare con questo è pycrc che è uno strumento (scritto in Python 1 ) che può generare codice sorgente C per dozzine di combinazioni di modello crc e algoritmo . Ciò consente di ottimizzare la velocità e le dimensioni per la propria applicazione selezionando e confrontando diverse combinazioni. 1: richiede Python 2.6 o successivo.
Supporta il crc-8
modello , ma supporta anche crc-5
, crc-16
e crc-32
tra gli altri. Per quanto riguarda gli algoritmi , supporta bit-by-bit
, bit-by-bit-fast
e table-driven
.
Ad esempio (scaricando l'archivio):
$ wget --quiet http://sourceforge.net/projects/pycrc/files/pycrc/pycrc-0.8/pycrc-0.8.tar.gz/download
$ tar -xf pycrc-0.8.tar.gz
$ cd pycrc-0.8
$ ./pycrc.py --model=crc-8 --algorithm=bit-by-bit --generate c -o crc8-byb.c
$ ./pycrc.py --model=crc-8 --algorithm=bit-by-bit-fast --generate c -o crc8-bybf.c
$ ./pycrc.py --model=crc-8 --algorithm=table-driven --generate c -o crc8-table.c
$ ./pycrc.py --model=crc-16 --algorithm=table-driven --generate c -o crc16-table.c
$ wc *.c
72 256 1790 crc8-byb.c
54 190 1392 crc8-bybf.c
66 433 2966 crc8-table.c
101 515 4094 crc16-table.c
293 1394 10242 total
Puoi anche fare cose funky come specificare utilizzando ricerche a doppio nibble (con una tabella di ricerca a 16 byte) anziché una ricerca a byte singolo, con una tabella di ricerca a 256 byte.
Ad esempio (clonazione del repository git):
$ git clone http://github.com/tpircher/pycrc.git
$ cd pycrc
$ git branch
* master
$ git describe
v0.8-3-g7a041cd
$ ./pycrc.py --model=crc-8 --algorithm=table-driven --table-idx-width=4 --generate c -o crc8-table4.c
$ wc crc8-table4.c
53 211 1562 crc8-table4.c
Dati i limiti di memoria e velocità, questa opzione potrebbe essere il miglior compromesso tra velocità e dimensioni del codice. L'unico modo per essere sicuri sarebbe di confrontarlo però.
Il repository pycrc git è su github , così come il tracker dei problemi , ma può anche essere scaricato da sourceforge .