我试图创建一个生成CRC查找表的函数。我正在使用一个8051微控制器,我宁愿做表查找方法,但同时我宁愿让我的计算机生成值,然后我可以直接将其加载到微控制器中。 http://www.rajivchakravorty.com/source-code/uncertainty/multimedia-sim/html/crc8_8c-source.html在C中生成的CRC查找表总是给出不同的结果
我只在“主”功能添加
#include <stdio.h>
#define GP 0x107
#define DI 0x07
static unsigned char crc8_table[256];
static int made_table=0;
static void init_crc8()
{
int i,j;
unsigned char crc;
if (!made_table) {
for (i=0; i<256; i++) {
crc = i;
for (j=0; j<8; j++)
crc = (crc << 1)^((crc & 0x80) ? DI : 0);
crc8_table[i] = crc & 0xFF;
}
made_table=1;
}
}
void crc8(unsigned char *crc, unsigned char m)
{
if (!made_table)
init_crc8();
*crc = crc8_table[(*crc)^m];
*crc &= 0xFF;
}
int main()
{
unsigned char crc[1];
crc8(crc,'S');
printf("S=%x\n",crc[0]); //different hex code almost every time
crc8(crc,'T');
printf("T=%x\n",crc[0]); //different hex code almost every time
return 0;
}
当我执行该程序,我希望在屏幕上相同的价值观,但在十六进制代码后:这其中大部分源代码已经从借来的在几乎所有的程序执行中都会打印等号。
我能做些什么来纠正这个问题?我不想收集不正确的CRC值。
请记住,本地变量(包括数组)在默认* uninitialized *。他们的价值将是*不确定*。现在在'main'函数的'crc'数组的上下文中考虑一下。 –
在不相关的说明中,您应该了解运算符'&'的地址。 –
@Somepro:你能否更具体地说'&'? –