找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6374|回复: 5
收起左侧

最诡异的铁电数据读写FM24C64B,折磨了三晚还没解决

[复制链接]
ID:68618 发表于 2014-11-22 14:46 | 显示全部楼层 |阅读模式
一开始怀疑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]);
          
   }  
反复调整,颠来倒去的,弄了不下上百遍了,怎么改都无法解决这个诡异现象。如果记录数据不行,那一开始就要不行的,


回复

使用道具 举报

ID:19715 发表于 2014-11-27 21:59 | 显示全部楼层
主程序安排有错误吗
回复

使用道具 举报

ID:399111 发表于 2021-6-19 16:32 | 显示全部楼层
没什么诡异的,写程序方法对了,就OK,,,
回复

使用道具 举报

ID:399111 发表于 2021-7-9 14:43 | 显示全部楼层
FM铁电没有那些人说的那么牛,多少有些不如意的地方,,你这一看就是没理解铁电读写规律,并不是你想写想读就能正确的,
回复

使用道具 举报

ID:395741 发表于 2021-7-11 19:56 | 显示全部楼层
没有什么问题
回复

使用道具 举报

ID:23640 发表于 2021-9-28 17:32 | 显示全部楼层
是不是要按字读写,不能按字节读写
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表