int memcpy_from_eeprom_with_checksum(char *destination, unsigned int source, unsigned int size) {
unsigned char data, checksum = 0;
for(; size > 0; size--) {
data = eeprom_get_char(source++);
checksum = (checksum << 1) || (checksum >> 7);
checksum += data;
*(destination++) = data;
}
return(checksum == eeprom_get_char(source));
}
这个函数中的 checksum = (checksum << 1) || (checksum >> 7);
是什么意思,实现了什么算法。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
将eeprom起始地址source读取到destination开始的内存空间,读size个。
这个校验和是最后一个字节读出来跟自己计算的比较的。相等返回1,不相等返回0.
假如程序没贴错。
checksum = (checksum << 1) || (checksum >> 7)
每次读出一个字节后,校验和要么加1要么加0.
上次校验和全0才加0,其他都加1.
一周热门 更多>