一開始懷疑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]);
}
反復調整,顛來倒去的,弄了不下上百遍了,怎么改都無法解決這個詭異現象。如果記錄數據不行,那一開始就要不行的,
|