找回密码
 立即注册
查看: 220|回复: 0

关于32位加法问题

[复制链接]
  • TA的每日心情
    开心
    2024-1-4 09:46
  • 签到天数: 2 天

    [LV.1]初来乍到

    16

    主题

    26

    回帖

    236

    积分

    中级会员

    积分
    236
    发表于 2024-1-2 16:36:22 | 显示全部楼层 |阅读模式



    void Updata_data()
    {
            u8 *pbuf;
            u32 tchar;
            u16 m=0,n=0; u8 temchar=0;
            static u8 Hchar=0,Lchar=0;          //临时字高位 //临时字低位
            static bit Saveflag=0;                                        // 存储标志
            static bit B_lag=0;                                        // 标志
            ET0=0;
            BeatTimescnt=0;                                                          //收到指令,将心跳时间复位       
            RestTimes=0;       
           
            StorageArray(&IAP_num[0],&RX1_Buff[0],15);   //转化提取升级包序号
            IAPnum=(u8)atoi(IAP_num);
            pbuf=&RX1_Buff[0];                          //接收指令转赋值       
                   
            for(n=0;n<RX1_MAX;n++)
            {
                                     temchar=*(pbuf+n);
                                    if(temchar=='\"')                      //判断“号的数量,
                                            m++;
                                    if(m==19&&temchar!='\"')   //提取数据包数据,存入EEPARM中
                                    {                       
                                            if(Saveflag==0)
                                            {
                                                     Saveflag=1;                         //数据保存标志取反                               
                                                    if(temchar>='0'&&temchar<='9'){ Hchar=temchar-0x30;}                    //如果接收到的是数字, 转化16进制高位                                                             
                                                     else{ Hchar=temchar-87;}          //如果接收到的是字母, 转化16进制高位                                                                                                               
                                            }
                                            else
                                            {
                                                            Saveflag=0;                                                                                                                                                                 //数据保存标志取反                       
                                                    if(temchar>='0'&&temchar<='9'){ Lchar=temchar-0x30;} //如果接收到的是数字, 转化16进制高位                                                     
                                                            else{ Lchar=temchar-87;}                                                                                                 //如果接收到的是字母, 转化16进制高位                                                                                                                       
                                                    temchar=(Hchar<<4|Lchar);                        //高低四位合并       
                   
                                                            if(IAP_cnt<0x0200)
                                                                    {
                                                                            Buftem[IAP_cnt]=temchar;
                                                                            //if(IAP_cnt==0||IAP_cnt==0x200-1) {printf("(%d)=0x%02X *** ",IAP_cnt,temchar);delay_ms(5);}                       
                                                                    }                //中断向量表临时保存                                                                               
                                                             else {
                                                                                                    B_lag=1;
                                                                                                    do{
                                                                                                                    IapProgram(IAP_cnt, temchar);     //写入实际数据内存地址                                                                                       
                                                                                                                    if(IapRead(IAP_cnt)==temchar){B_lag=0;}
                                                                                                            }while(B_lag);                                                                       
                                                                                    }       
                                                                    IAP_cnt++;
                                                                    tchar=(u32)temchar;                       
                                                                    IAP_ChecksumAcc=        tchar+IAP_ChecksumAcc;       
                                                                            delay_ms(1);
                                                                            if(IAP_cnt==IAPLen)
                                                                            {
                                                                                     printf("data_len=%d****\r",IAP_cnt);
                                                                                     printf("data_ACC=%ld****\r",IAP_ChecksumAcc);
                                                                            }
                                                                    if(IAP_cnt==IAPLen&&IAP_ChecksumAcc==IAPChecksum)  //写入长度和校验和都相同
                                                                    {       
                                                                             printf("data_len=%d****\r",IAP_cnt);
                                                                             printf("data_ACC=%ld****\r",IAP_ChecksumAcc);
                                                                                    for(m=0;m<0x0200;m++)
                                                                                    {
                                                                                            B_lag=1;
                                                                                            do{
                                                                                                            IapProgram(IAPadd+m, Buftem[m]);     //最后写入中断向量文件,防止断电时无法回到基础版
                                                                                                        //if(m%0x10==0) {printf("Buftem[%d]=0x%02X - \r",m,Buftem[m]);        }
                                                                                                            if(Buftem[m]==IapRead(IAPadd+m))
                                                                                                                    {
                                                                                                                                    B_lag=0;
                                                                                                                              //if(m%0x10==0)printf("IapRead[%d]=0x%02X - \r",m,Buftem[m]);       
                                                                                                                    }
                                                                                                    }while(B_lag);
                                                                                                                                           
                                                                                    }                                                       
                                                                                    printf("\r\n***********The driver upgrade is successful!*************\r\n");                                                                                                                                                                                                                          
                                                                                    IAP_CONTR |= 0x60;                                       
                                                                    }
                                                                   
                                            }                                       
                                    }                       
                            }
                                    ET0=1;       

                                    //        printf("data_ACC=%ld****\r",IAP_ChecksumAcc);
                                    //        printf("data_len=%d****\r",IAP_cnt);       
                             // delay_ms(200);                
            printf("{\"com\":\"update\",\"did\":\"%s\",\"res\":\"1\",\"softid\":\"%s\",\"num\":\"%bd\"}",AT_SIMID,&IAP_softid[0],IAPnum+1);
    }


    截图202401021636101869.jpg

    截图202401021633297816.jpg
    回复 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-3 13:52 , Processed in 0.055035 second(s), 33 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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