我試圖創建一個生成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:你能否更具體地說'&'? –