📄 eepromportect.c
字号:
//-----------------EEPROM数据保护(大数判决)-------------------//
void eeprom_data_protect(void)
{
unsigned char compare_data; //存放假定正确的数据
unsigned char data_block; //数据块数
unsigned int byte_sum; //一页数据的字节数
unsigned char ok_sum=0; //认为正确的数据数
unsigned char next_page=0; //当假定正确的数据不正确时,用下一页的数据作为假定正确的数据
unsigned int save_address;
for(byte_sum=0;byte_sum<page_length;byte_sum++) //一页数据循环
{
next_page=0;
ok_sum=0;
compare_data=XBYTE[start_address+byte_sum]; //将第一页的数据暂定为假定正确的数据
next:
for(data_block=0;data_block<block_sum;data_block++) //重写的数据块循环
{
if(XBYTE[start_address+(data_block*page_length)+byte_sum]==compare_data)
ok_sum++; //统计认为正确的数据个数
}
if((ok_sum>=ok_line)&&(ok_sum<block_sum)) //认为该页的数据正确,且有不正确的重写数据
{
save_address=(start_address+byte_sum);
save_data(save_address,compare_data); //用该页的数据重写所有数据
}
else if(ok_sum<ok_line) //认为该页的数据错误
{
if(next_page<=ok_line) //如果,假定正确的数据在认定数据正确界线的前几页,则采用下一页作为假定正确的数据
{
next_page++;
compare_data=XBYTE[start_address+(next_page*page_length)+byte_sum];
ok_sum=0;
goto next;
}
else //如果,假定正确的数据所在页超出认定数据正确界线,则该位置数据用默认数据代替
{
save_address=start_address+byte_sum;
save_data(save_address,default_data[byte_sum]); //重写默认数据
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -