一开始怀疑FM24C64和FM24C64B是不是有区别,但是换了,也还是一个结果。
void Box_History_Clear(uchar box)//BOX赋值时已减1 {
uint add;
uchar i;
uchar clear[7];
for(i=0;i<7;i++)
{
clear = 0;
}
add = BOX_HISTORY_ADD + (unsigned int)box*107;
FRAM_Single_Data_Write(add,0);
add++;
FRAM_Single_Data_Write(add,0);
add++;
for(i=0;i<15;i++)
{
add = add + 7*i;
FRAM_Multi_Data_Write(add,7,&clear[0]);
}
}
对应箱子的存储片段,能全部擦除清0,读取后上传显示出来的也都为0,
问题来了,关于存储记录的写,特意写的测试程序,但是明明知道问题出在那里,但就是解决不了
void Box_History_Save(uchar box,uchar store_take)
{
//uint add;
uchar recorder_num;
uchar over;
uint x;
uchar i;
x = box-1;
ADD = BOX_HISTORY_ADD + x*107;//其实地址从0X0400,0X0900等换了好几个,都没用,箱号也随机换了几个,诡异现象依旧
recorder_num = FRAM_Single_Data_Read(ADD);
over = recorder_num;
recorder_num++;
FRAM_Single_Data_Write(ADD,recorder_num);//记录的次数,从0,1,2,3.。。。100%顺序递增,也是完全正确的。
ADD = ADD + 2;
if(over==2)
{
LED_RED_ON();第三次时,灯闪了一下,说明100%执行的
}
/*for(i=0;i<15;i++)//如果连续写15条7个连续字节的数据,100%没问题,读取出来的数据和想写入的完全符合,
{
ADD = ADD + 7*i;
Open_Time[0] = store_take;
Open_Time[1] = ADD>>8;
Open_Time[2] = ADD;
Open_Time[3] = over;
Open_Time[4] = over;
Open_Time[5] = over;
Open_Time[6] = over;
//add = add + 7*over;
FRAM_Multi_Data_Write(ADD,7,&Open_Time[0]);//如果用单独写一个字节的子程序,连着写7个字节,也没问题,
}*/
ADD = ADD + 7*over;//2013年最诡异的现象出现在这里,OVER=0,OVER=1,读取出来后的数据与设想的完全一致,但是OVER
=2时,本来的那7个字节数据全部为0了,该记录的字节根本没有写进去,OVER=3时,所记录的地址ADD
也是符合的,但内容却占据了本该写在OVER=2时的那个位置上,诡异的一B。OVER=4,5,不行,OVER
=6时,所记录的数据覆盖在OVER=3的那个位置,但所写入的数据内容完全正确,无法解释这个诡异现象
Open_Time[0] = store_take;
Open_Time[1] = ADD>>8;
Open_Time[2] = ADD;
Open_Time[3] = over;
Open_Time[4] = over;
Open_Time[5] = over;
Open_Time[6] = over;
FRAM_Multi_Data_Write(ADD,7,&Open_Time[0]);
}
反复调整,颠来倒去的,弄了不下上百遍了,怎么改都无法解决这个诡异现象。如果记录数据不行,那一开始就要不行的,
|