• 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-03-07
  • 这泼猴,物理。古文,哲学,基础语文,那一项没出丑?看着就想笑 2019-02-20
  • 云南理发店老板涉嫌杀害女演员因办卡纠纷起杀心 2019-02-20
  • 1至5月我区为企业和社会减负4200余万元 2019-02-09
  • 【学习时刻】参会专家盛小云:坚定文化自信,用高尚的作品引领社会风尚 2019-01-28
  • 绘就生态文明新画卷—甘南州造林绿化工作纪实 2019-01-28
  • 某些人总是用“客观事实”来为自己壮胆,实际上根本不懂什么是“客观事实。 2019-01-12
  • 圣洁的雪山文章中国国家地理网 2018-11-22
  • 崇尚英雄 精忠报国——我们家的报国故事 2018-11-22
  • 618史上最壕“买家”现身 Google以 5.5亿美元投资京东 2018-11-21
  • 看好啦!是时候表演真正的技术了 2018-11-21
  • 日本大阪6.1级地震已致4人死亡 370多人受伤 2018-11-20
  • 打印

    广东11选5 推荐: 关于内部eeprom读取数据死机的问题。

    [复制链接]
    346|5
    跳转到指定楼层
    楼主
     楼主 | 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));
            }


    }
    沙发
     楼主 | 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 的数值范围 
    板凳
    | 2018-11-15 10:01 | 只看该作者
    数组处理这么多,会不会是计算出了问题,导致溢出了,在写函数之前打印输出每一个i的值,看看在哪里死机了。
    地板
    | 2018-11-16 16:27 | 只看该作者
    i是个char,怎么也到不了512吧
    5
    | 2018-11-18 21:39 | 只看该作者
    楼上正解
    扫描二维码,随时随地手机跟帖
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    我要发帖 投诉建议 创建版块 申请版主

    快速回复

    您需要登录后才可以回帖
    登录 | 注册
    高级模式

    论坛热帖

    关闭

    热门推荐上一条 /2 下一条

    快速回复 广东快乐十分走势图 返回列表
  • 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-03-07
  • 这泼猴,物理。古文,哲学,基础语文,那一项没出丑?看着就想笑 2019-02-20
  • 云南理发店老板涉嫌杀害女演员因办卡纠纷起杀心 2019-02-20
  • 1至5月我区为企业和社会减负4200余万元 2019-02-09
  • 【学习时刻】参会专家盛小云:坚定文化自信,用高尚的作品引领社会风尚 2019-01-28
  • 绘就生态文明新画卷—甘南州造林绿化工作纪实 2019-01-28
  • 某些人总是用“客观事实”来为自己壮胆,实际上根本不懂什么是“客观事实。 2019-01-12
  • 圣洁的雪山文章中国国家地理网 2018-11-22
  • 崇尚英雄 精忠报国——我们家的报国故事 2018-11-22
  • 618史上最壕“买家”现身 Google以 5.5亿美元投资京东 2018-11-21
  • 看好啦!是时候表演真正的技术了 2018-11-21
  • 日本大阪6.1级地震已致4人死亡 370多人受伤 2018-11-20