打印

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

[复制链接]
1324|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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))));
        }

使用特权

评论回复
评论
ningling_21 2018-11-18 21:39 回复TA
注意 i 的数值范围 
板凳
xyz549040622| | 2018-11-15 10:01 | 只看该作者
数组处理这么多,会不会是计算出了问题,导致溢出了,在写函数之前打印输出每一个i的值,看看在哪里死机了。

使用特权

评论回复
地板
vrgood| | 2018-11-16 16:27 | 只看该作者
i是个char,怎么也到不了512吧

使用特权

评论回复
5
ningling_21| | 2018-11-18 21:39 | 只看该作者
楼上正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

84

帖子

0

粉丝