也就是不能用性质!!!!
/*看看是不是0即可*/
uint32_t check_appcrc(G_SPIFlash_Type *sflash,uint32_t len)//len是全部的len 已经包含了狗尾续貂的4+4
{
const uint32_t dwPolynomial = 0x04c11db7;//STM32内置的多项式
uint32_t xbit;
uint32_t data;
uint32_t CRC32 = 0xFFFFFFFF,CRC32saved=0;
uint32_t bits;
uint32_t i,binlen;
sflash->read(W25Q64_APPBINSAVED_ADR+(len-4),(uint8_t* )&data,4);//最后4个是len
printf("bin data len =%d\r\n",data);
if(data == len)
{
printf("len ok\r\n");
}
else
{
printf("len fail\r\n");return 0;
}
data=0;
sflash->read(W25Q64_APPBINSAVED_ADR+(len-8),(uint8_t* )&data,4);//再来4个是CRC
printf("bin data crc =0X%08X\r\n",data);//只是看看 意义不大
CRC32saved=data;
binlen = (len-8);
while(binlen%4)
{
printf("################lSize/4!=0###########\r\n");
--binlen;
}
printf("lSize/4 --> binlen = %d\r\n",binlen);
#if 1//可以的 我现在用性质 把CRC带入 应该是0 [也就是#else 其实又bug 除非你脚本控制长度是4倍数]
for(i = 0;i < binlen;i+=4)
{
xbit = (uint32_t) (1 << 31);
sflash->read(W25Q64_APPBINSAVED_ADR+i,(uint8_t* )&data,4);//这里需要换掉!
for (bits = 0; bits < 32; bits++)
{
if (CRC32 & 0x80000000) {
CRC32 <<= 1;
CRC32 ^= dwPolynomial;
}
else
CRC32 <<= 1;
if (data & xbit)
CRC32 ^= dwPolynomial;
xbit >>= 1;
}
}
printf("crc =%08X--",CRC32);
if(CRC32==CRC32saved)
return 1;
else
return 0;
#else //惊天bug 如果原来文件为8 是OK的 正好连续异或 如果不是呢?比如10 你前面已经丢弃了一些HEX 你这里+4不是正好衔接的CRC 而是不丢弃的链接了
for(i = 0;i < binlen+4;i+=4)
{
xbit = (uint32_t) (1 << 31);
sflash->read(W25Q64_APPBINSAVED_ADR+i,(uint8_t* )&data,4);//这里需要换掉!
for (bits = 0; bits < 32; bits++)
{
if (CRC32 & 0x80000000) {
CRC32 <<= 1;
CRC32 ^= dwPolynomial;
}
else
CRC32 <<= 1;
if (data & xbit)
CRC32 ^= dwPolynomial;
xbit >>= 1;
}
}
printf("crc =%08X--",CRC32);
if(CRC32==0)
return 1;
else
return 0;//失败
#endif
}
脚本
if(lSize/4) printf("################lSize/4!=0###########\r\n");
CRC = Gcrc32((uint32_t *)buffer,lSize/4);//CRC是明文的明文
printf("BIN CRC=0X%08X\r\n",CRC);
for(int i=0;i<lSize;i++)
{
buffer[i] ^= loop[j];
j=(j+1)%16; //[0--1--2---15]--0
};
fwrite(buffer, sizeof(char), lSize, fp2);/*后面是密文*/
fwrite(&CRC, sizeof(char), 4, fp2);/*最后U32 也就是4个HEX是标识CRC*/
lSize+=8;
但是好像。。。。。又没有问题。。。。
也就是一个前置条件:BIN文件 是不是100%是4的倍数
以后留意下