<h1>THE FORUM HAS MOVED,  VISIT US AT OUR NEW SITE www.picbasic.org. Access to this Archive is restricted. Visit the NEW site at www.picbasic.org.  Unless you use the url http://www.picbasic.org you will not gain access to the support forum, wiki and knowledge base. Visit WWW.PICBASIC.ORG  Do not try to log in or register here, use your keyboard and enter the url http://www.picbasic.org directly into your browser. </h1>  

Go Back  

THE FORUM HAS MOVED, VISIT US AT OUR NEW SITE www.picbasic.org. Access to this Archive is restricted. Visit the NEW site at www.picbasic.org. Unless you use the url http://www.picbasic.org you will not gain access to the support forum, wiki and knowledge base. Visit WWW.PICBASIC.ORG Do not try to log in or register here, use your keyboard and enter the url http://www.picbasic.org directly into your browser.

> Proton Development Suite > Proton Plus Compiler v3

Proton Plus Compiler v3 Coding problems and general discussion related to the Development Suite

Reply
 
Thread Tools Search this Thread Rate Thread Display Modes
Old 10th January 2010, 21:25   #1
shunt010
Licensed User
 
Join Date: Aug 2004
Posts: 104
shunt010 is on a distinguished road
Default Crc32?

Has anyone ever developed a CRC32 algorithm for the PIC?

I need to generate CRC32 checksums, and have some C code, but this is based around 32 bit microprocessors.

Rather than re-invent the wheel, I'm hoping someone may have already done this and can help me out?

The details I have are below.

Thanks!


The following is the CRC32 algorithm used. To compute a CRC, call
UTL_calc_crc32, passing a pointer to the file data, the size of the file, and an initial value of zero. For example:
uint32 fmi_crc = UTL_calc_crc32(file_data, file_size, 0);
Alternately, the CRC value can be computed one block of data at a time by calling the UTL_accumulate_crc32 function
for each block of file data sequentially, then calling UTL_complete_crc32 at the end to complete the computation. This
approach can be used when it is not feasible to keep the entire file in memory.
uint32 fmi_crc = 0;
foreach (data_block in file_data)
{
fmi_crc = UTL_accumulate_crc32(data_block, sizeof(data_block), fmi_crc);
}
fmi_crc = UTL_complete_crc32(fmi_crc);
/************************************************** *******************
*
* MODULE NAME:
* UTL_crc.c - CRC Routines
*
* DESCRIPTION:
*
* PUBLIC PROCEDURES:
* Name Title
* ----------------------- --------------------------------------
* UTL_calc_crc32 Calculate 32-bit CRC
*
* PRIVATE PROCEDURES:
* Name Title
* ----------------------- --------------------------------------
* UTL_accumulate_crc32 Accumulate 32-bit CRC Calculation
* UTL_complete_crc32 Complete 32-bit CRC Calculation
*
* LOCAL PROCEDURES:
* Name Title
* ----------------------- --------------------------------------
*
* NOTES:
*

************************************************** *******************/
/*--------------------------------------------------------------------
MEMORY CONSTANTS
--------------------------------------------------------------------*/
static uint32 const my_crc32_tbl[ 256 ] =
{
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,
};
/*--------------------------------------------------------------------
PROCEDURES
--------------------------------------------------------------------*/
/************************************************** *******************
*
* PROCEDURE NAME:
* UTL_calc_crc32 - Calculate 32-bit CRC
*
* DESCRIPTION:
*
*
************************************************** *******************/
uint32 UTL_calc_crc32
(
uint8 const * const data,
uint32 const size,
uint32 const initial_value = 0
)
{
/*----------------------------------------------------------
Local Variables
----------------------------------------------------------*/
uint32 actual_crc;
actual_crc = UTL_accumulate_crc32( data, size, initial_value );
actual_crc = UTL_complete_crc32( actual_crc );
return( actual_crc );

} /* UTL_calc_crc32() */
/************************************************** *******************
*
* PROCEDURE NAME:
* UTL_accumulate_crc32 - Accumulate 32-bit CRC Calculation
*
* DESCRIPTION:
*
************************************************** *******************/
uint32 UTL_accumulate_crc32
(
uint8 const * const data,
uint32 const size,
uint32 const accumulative_value
)
{
/*----------------------------------------------------------
Local Variables
----------------------------------------------------------*/
uint32 actual_crc;
uint32 i;
actual_crc = accumulative_value;
for( i = 0; i < size; i++ )
{
actual_crc = my_crc32_tbl[ (data[ i ] ^ actual_crc) & 255] ^ (0xFFFFFF & (actual_crc >> 8));
}
return( actual_crc );
} /* UTL_accumulate_crc32 */
/************************************************** *******************
*
* PROCEDURE NAME:
* UTL_complete_crc32 - Complete 32-bit CRC Calculation
*
* DESCRIPTION:
*
*
************************************************** *******************/
uint32 UTL_complete_crc32
(
uint32 const actual_crc
)
{
return( ~actual_crc );
} /* UTL_complete_crc32() */
shunt010 is offline   Reply With Quote
Old 10th January 2010, 22:05   #2
Tim
Super Moderator
 
Tim's Avatar
 
Join Date: Jan 2003
Location: london
Posts: 8,196
Tim is on a distinguished road
Default

Why does it have to be 32bit?

I have a fast CRC-CCITT-16 0x1021 routine
__________________
Tim
If in doubt read the manual
Tim is offline   Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On



All times are GMT +1. The time now is 22:00.



Powered by vBulletin® Version 3.8.2
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Copyright © Crownhill Associates Limited 2002 - 2009