关于内部eeprom读取数据死机的问题。

[复制链接]
 楼主| yzcook 发表于 2018-11-15 09:29 | 显示全部楼层 |阅读模式
stc12c5a32s2的eeprom 64个扇区,而每个扇区在写入新数据前需要将其他位置的数据取出,在擦除,在写入,
于是我便将其中一个扇区当做一个缓存扇区,用来写入数据时,将其他数据保存,写入完成之后,在写回原来的扇区。目前的问题是根据这样的思路写的代码,机器死机了,我是配合一块屏幕做的,运行到这个函数时,机器怎么操作也不能运行了。

希望解答一下。
void cmd1b53()
{
        uchar temp[8]={0};
        uchar i = 0;
        for(i=0;i<8;i++)
        {
                temp[i] = RBuf[4+i];        
        
        }
        //擦除缓存扇区
        IapEraseSector(0x4400);

        //将原扇区 除了工作密钥的位置拷贝至缓存扇区
        for(i = 0;i<(RBuf[3]-1)*8;i++)
        {
                IapProgramByte(0x4400+i,IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
        }
        
        for(i = RBuf[3]*8;i<512;i++)
        {
                IapProgramByte(0x4400+i,IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
        }
        //擦除原扇区        
        IapEraseSector(0+((RBuf[2]-1)*0x200));
        //将解密后的工作密钥写入至目标扇区的目标区域
        DES_FUN(temp,datt,workkey,0);
        for(i = 0;i<8;i++)
        {
                IapProgramByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200)),datt[i]);
        }
        //打印
        for(i = 0;i<8;i++)
        {
                SendByte(IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
        }
        
        //写回原扇区
                for(i = 0;i<(RBuf[3]-1)*8;i++)
        {
                IapProgramByte(i+((RBuf[2]-1)*0x200),IapReadByte(0x4400));
        }
        
        for(i = RBuf[3]*8;i<512;i++)
        {
                IapProgramByte(i+((RBuf[2]-1)*0x200),IapReadByte(0x4400));
        }


}
 楼主| yzcook 发表于 2018-11-15 09:31 | 显示全部楼层
代码写得不好什么的勿喷= =   我现在找到的结果是 如果将下面的代码屏蔽掉就不会死机了。
        //将原扇区 除了工作密钥的位置拷贝至缓存扇区
        for(i = 0;i<(RBuf[3]-1)*8;i++)
        {
                IapProgramByte(0x4400+i,IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
        }
        
        for(i = RBuf[3]*8;i<512;i++)
        {
                IapProgramByte(0x4400+i,IapReadByte(((BYTE)((RBuf[3]-1)*8)+i+((RBuf[2]-1)*0x200))));
        }

评论

注意 i 的数值范围  发表于 2018-11-18 21:39
xyz549040622 发表于 2018-11-15 10:01 来自手机 | 显示全部楼层
数组处理这么多,会不会是计算出了问题,导致溢出了,在写函数之前打印输出每一个i的值,看看在哪里死机了。
vrgood 发表于 2018-11-16 16:27 | 显示全部楼层
i是个char,怎么也到不了512吧
ningling_21 发表于 2018-11-18 21:39 | 显示全部楼层
楼上正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

84

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

28

主题

84

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部