avr-libc
2.0.0
Standard C library for AVR-GCC
|
AVR Libc Home Page |
AVR Libc Development Pages |
||||
Main Page |
User Manual |
Library Reference |
FAQ |
Example Projects |
関数 | |
static __inline__ uint16_t | _crc16_update (uint16_t __crc, uint8_t __data) |
static __inline__ uint16_t | _crc_xmodem_update (uint16_t __crc, uint8_t __data) |
static __inline__ uint16_t | _crc_ccitt_update (uint16_t __crc, uint8_t __data) |
static __inline__ uint8_t | _crc_ibutton_update (uint8_t __crc, uint8_t __data) |
static __inline__ uint8_t | _crc8_ccitt_update (uint8_t __crc, uint8_t __data) |
このヘッダファイルは、一般的な多項式を用いた巡回冗長検査(CRC:cyclic redundancy checks)計算のために最適化されたインライン関数を提供します。
Dallas Semiconductorの、8051アセンブラ例と一般的なCRC最適化提案であるアプリケーションノート27を参照してください。アプリケーションノートの最後のページの表は、これらの実装を理解するうえで重要となります。
Jack Crenshawの"Implementing CRCs" Embedded Systems Programming1992年1月号の記事。これを見つけるのは難しいかもしれないですが、とても明確かつ簡潔な用語で、CRCを説明しています。コピーを入手するための努力の価値があります。
典型的なアプリケーションは、次のようになります。
最適化されたCRC-16計算
多項式: x^16 + x^15 + x^2 + 1 (0xa001)
初期化値: 0xffff
このCRCは、通常ディスクドライブコントローラで用いられます。
次は、Cで書かれた同等の関数です。
最適化されたCRC-8-CCITT計算
多項式: x^8 + x^2 + x + 1 (0xE0)
シンプルなCRC-8で使用
初期値: 0x0
CRC-8-ROHCで使用
初期値: 0xff
参考: http://tools.ietf.org/html/rfc3095#section-5.9.1
CRC-8-ATM/ITUで使用
初期値: 0xff
最終XOR値: 0x55
参考: http://www.itu.int/rec/T-REC-I.432.1-199902-I/en
C言語の同等のオリジナルは、Dave Hylandsにより書かれました。アセンブラコードは、_crc_ibutton_update最適化をベースにしています。
次は、Cで書かれた同等の関数です。
最適化されたCRC-CCITT計算
多項式: x^16 + x^12 + x^5 + 1 (0x8408)
初期値: 0xffff
このCRCは、PPPやIrDAで使用されています。
RFC1171(PPPプロトコル)やIrDA IrLAP 1.1を参照してください。
次は、Cで書かれた同等の関数です。
最適化されたDallas(現Maxim) iButton 8-bit CRC計算
多項式: x^8 + x^5 + x^4 + 1 (0x8C)
初期値: 0x0
http://www.maxim-ic.com/appnotes.cfm/appnote_number/27を参照してください。
次は、Cで書かれた同等の関数です。
最適化されたCRC-XMODEM計算
多項式: x^16 + x^12 + x^5 + 1 (0x1021)
初期値: 0x0
このCRCは、Xmodem-CRCプロトコルで使用されています。
次は、Cで書かれた同等の関数です。