[MCU] crc32

Publisher:梦中的额吉Latest update time:2022-09-20 Source: csdnKeywords:MCU  crc32 Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

// Referenced from http://www.w3.org/TR/PNG/#D-CRCAppendix


#ifdef MAKE_CRC32_TABLE


static unsigned long crc_table[256];

static int crc_table_computed = 0;


static void make_crc_table(void)

{

    unsigned long c;

    unsigned long n, k;


    for (n = 0; n < 256; n++) {

        c = n;

        for (k = 0; k < 8; k++) {

            if (c & 1)

                c = 0xedb88320L ^ (c >> 1);

            else

                c = c >> 1;

        }

        crc_table[n] = c;

    }

}


#else


static const unsigned long crc_table[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,

};


#endif


unsigned long crc32(unsigned long crc, const unsigned char *buf, unsigned int len)

{

    unsigned long c;


#ifdef MAKE_CRC32_TABLE

    if (crc_table_computed == 0) {

        make_crc_table();

        crc_table_computed = 1;

    }

#endif


    c = crc ^ 0xffffffffL;


    while (len) {

        c = crc_table[(c ^ (*buf++)) & 0xff] ^ (c >> 8);

        only--;

    }


    return c ^ 0xffffffffL;

}


/***************************************************************

#ifndef __CRC32_H__

#define __CRC32_H__


unsigned long crc32(unsigned long crc, const unsigned char *buf, unsigned int len);


#endif


Keywords:MCU  crc32 Reference address:[MCU] crc32

Previous article:[MCU] x_strtok, safe segmentation function
Next article:[MCU] crc16 algorithm

Recommended ReadingLatest update time:2024-11-15 14:44

Research on DLP driving circuit based on STM32 microcontroller
DLP projection technology is a technology that uses the digital micromirror device (DMD) developed by Texas Instruments as the main key processing element to realize the digital optical processing process. The color displayed by DLP is high in clarity, bright, delicate and realistic, and it is a fully digital display
[Microcontroller]
Research on DLP driving circuit based on STM32 microcontroller
51 MCU Learning Process "II" - Display of Digital Tube
Digital tubes are widely used. They have segment latches and bit latches. Segment latches are used to display the numbers you want to display, and bit latches are used to position a certain digital tube. In this way, you can control it to display various things. It's very interesting! Example 1: The eight digital tube
[Microcontroller]
51 MCU Learning Process
With the concentrated release of production capacity, the shortage of automotive MCUs is expected to ease in the second half of 2022
Touch the display screen in front of you, and the minimalist graphic style in the menu can provide the car owner with a variety of entertainment functions; acceleration from 0 to 100 km/h takes less than a few seconds, and the torque curve of the electric motor brings a light and calm acceleration performance, which m
[Automotive Electronics]
AVR MCU Voltage Meter Program
AVR voltmeter program: #include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #define setb(val,bitn) (val|=(1 (bitn)))//Set a bit of an IO port to 1 #define clr(val,bitn) (val&=~(1 (bitn)))//Set a bit of an IO port to 0 #define get(val,bitn) (val&(1 (bitn)))//Read a bit statu
[Microcontroller]
A thorough study of the STM8 microcontroller startup process--based on the IAR development environment
When you first learn STM8, you will find that the official STM8 firmware library does not provide a startup code for a .s file. So how does it start and then jump to the main function to execute? First of all, we can infer from ARM that STM8 is also started by the reset vector. Assuming that the process is completed i
[Microcontroller]
A thorough study of the STM8 microcontroller startup process--based on the IAR development environment
51 MCU beginner practice: using DS1302 module and 1.44 inch TFT display to realize electronic clock
This week, we made the following two improvements based on the electronic clock we implemented last time (51 MCU beginner practice: using DS1302 module and LCD1602 display to realize electronic clock): 1. Replace the LCD1602 screen with a 1.44-inch TFT display The main consideration is that the TFT display can use dif
[Microcontroller]
51 MCU beginner practice: using DS1302 module and 1.44 inch TFT display to realize electronic clock
Solution to the power consumption problem of PIC microcontroller
I have been working on the power consumption of PIC microcontrollers for the past week. Since the project is powered by batteries, the power consumption issue is very important. According to the data sheet and information on the Internet, the power consumption of microcontrollers is mainly affected by the following fa
[Microcontroller]
Use Python to write a simple applet to send hex to the microcontroller boot (YFW)
Burn hex to PIC microcontroller through serial port (PIC has already run boot program) down_hex.py source code #coding:utf-8 import serial import pic_hex_pars import time from threading import Timer #Serial port timing reception class PicSerial():     def __init__(self):         self.t = Timer(0.02, self.func)    
[Microcontroller]
Latest Microcontroller Articles
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号