⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crctable.c

📁 crc算法讲解文档以及通用算法模型的建立例程
💻 C
字号:
/******************************************************************************//*                             Start of crctable.c                            *//******************************************************************************//*                                                                            *//* Author  : Ross Williams (ross@guest.adelaide.edu.au.).                     *//* Date    : 3 June 1993.                                                     *//* Version : 1.0.                                                             *//* Status  : Public domain.                                                   *//*                                                                            *//* Description : This program writes a CRC lookup table (suitable for         *//* inclusion in a C program) to a designated output file. The program can be  *//* statically configured to produce any table covered by the Rocksoft^tm      *//* Model CRC Algorithm. For more information on the Rocksoft^tm Model CRC     *//* Algorithm, see the document titled "A Painless Guide to CRC Error          *//* Detection Algorithms" by Ross Williams (ross@guest.adelaide.edu.au.). This *//* document is likely to be in "ftp.adelaide.edu.au/pub/rocksoft".            *//*                                                                            *//* Note: Rocksoft is a trademark of Rocksoft Pty Ltd, Adelaide, Australia.    *//*                                                                            *//******************************************************************************/#include <stdio.h>#include <stdlib.h>#include "crcmodel.h"/******************************************************************************//* TABLE PARAMETERS                                                           *//* ================                                                           *//* The following parameters entirely determine the table to be generated. You *//* should need to modify only the definitions in this section before running  *//* this program.                                                              *//*                                                                            *//*    TB_FILE  is the name of the output file.                                *//*    TB_WIDTH is the table width in bytes (either 2 or 4).                   *//*    TB_POLY  is the "polynomial", which must be TB_WIDTH bytes wide.        *//*    TB_REVER indicates whether the table is to be reversed (reflected).     *//*                                                                            *//* Example:                                                                   *//*                                                                            *//*    #define TB_FILE   "crctable.out"                                        *//*    #define TB_WIDTH  2                                                     *//*    #define TB_POLY   0x8005L                                               *//*    #define TB_REVER  TRUE                                                  */#define TB_FILE   "crctable.out"#define TB_WIDTH  4#define TB_POLY   0x04C11DB7L#define TB_REVER  TRUE/******************************************************************************//* Miscellaneous definitions. */#define LOCAL staticFILE *outfile;#define WR(X) fprintf(outfile,(X))#define WP(X,Y) fprintf(outfile,(X),(Y))/******************************************************************************/LOCAL void chk_err P_((char *));LOCAL void chk_err (mess)/* If mess is non-empty, write it out and abort. Otherwise, check the error   *//* status of outfile and abort if an error has occurred.                      */char *mess;{ if (mess[0] != 0   ) {printf("%s\n",mess); exit(EXIT_FAILURE);} if (ferror(outfile)) {perror("chk_err");   exit(EXIT_FAILURE);}}/******************************************************************************/LOCAL void chkparam P_((void));LOCAL void chkparam (){ if ((TB_WIDTH != 2) && (TB_WIDTH != 4))    chk_err("chkparam: Width parameter is illegal."); if ((TB_WIDTH == 2) && (TB_POLY & 0xFFFF0000L))    chk_err("chkparam: Poly parameter is too wide."); if ((TB_REVER != FALSE) && (TB_REVER != TRUE))    chk_err("chkparam: Reverse parameter is not boolean.");}/******************************************************************************/LOCAL void gentable P_((void));LOCAL void gentable (){ WR("/*****************************************************************/\n"); WR("/*                                                               */\n"); WR("/* CRC LOOKUP TABLE                                              */\n"); WR("/* ================                                              */\n"); WR("/* The following CRC lookup table was generated automagically    */\n"); WR("/* by the Rocksoft^tm Model CRC Algorithm Table Generation       */\n"); WR("/* Program V1.0 using the following model parameters:            */\n"); WR("/*                                                               */\n"); WP("/*    Width   : %1lu bytes.                                         */\n",    (ulong) TB_WIDTH); if (TB_WIDTH == 2) WP("/*    Poly    : 0x%04lX                                           */\n",    (ulong) TB_POLY); else WP("/*    Poly    : 0x%08lXL                                      */\n",    (ulong) TB_POLY); if (TB_REVER) WR("/*    Reverse : TRUE.                                            */\n"); else WR("/*    Reverse : FALSE.                                           */\n"); WR("/*                                                               */\n"); WR("/* For more information on the Rocksoft^tm Model CRC Algorithm,  */\n"); WR("/* see the document titled \"A Painless Guide to CRC Error        */\n"); WR("/* Detection Algorithms\" by Ross Williams                        */\n"); WR("/* (ross@guest.adelaide.edu.au.). This document is likely to be  */\n"); WR("/* in the FTP archive \"ftp.adelaide.edu.au/pub/rocksoft\".        */\n"); WR("/*                                                               */\n"); WR("/*****************************************************************/\n"); WR("\n"); switch (TB_WIDTH)   {    case 2: WR("unsigned short crctable[256] =\n{\n"); break;    case 4: WR("unsigned long  crctable[256] =\n{\n"); break;    default: chk_err("gentable: TB_WIDTH is invalid.");   } chk_err(""); {  int i;  cm_t cm;  char *form    = (TB_WIDTH==2) ? "0x%04lX" : "0x%08lXL";  int   perline = (TB_WIDTH==2) ? 8 : 4;  cm.cm_width = TB_WIDTH*8;  cm.cm_poly  = TB_POLY;  cm.cm_refin = TB_REVER;  for (i=0; i<256; i++)    {     WR(" ");     WP(form,(ulong) cm_tab(&cm,i));     if (i != 255) WR(",");     if (((i+1) % perline) == 0) WR("\n");     chk_err("");    } WR("};\n"); WR("\n"); WR("/*****************************************************************/\n"); WR("/*                   End of CRC Lookup Table                     */\n"); WR("/*****************************************************************/\n"); WR(""); chk_err("");}}/******************************************************************************/main (){ printf("\n"); printf("Rocksoft^tm Model CRC Algorithm Table Generation Program V1.0\n"); printf("-------------------------------------------------------------\n"); printf("Output file is \"%s\".\n",TB_FILE); chkparam(); outfile = fopen(TB_FILE,"w"); chk_err(""); gentable(); if (fclose(outfile) != 0)    chk_err("main: Couldn't close output file."); printf("\nSUCCESS: The table has been successfully written.\n");}/******************************************************************************//*                             End of crctable.c                              *//******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -