15818564352 发表于 2024-1-2 16:36:22

关于32位加法问题




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,&RX1_Buff,15);   //转化提取升级包序号
        IAPnum=(u8)atoi(IAP_num);
        pbuf=&RX1_Buff;                        //接收指令转赋值       
               
        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=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);   //最后写入中断向量文件,防止断电时无法回到基础版
                                                                                                  //if(m%0x10==0) {printf("Buftem[%d]=0x%02X - \r",m,Buftem);        }
                                                                                                        if(Buftem==IapRead(IAPadd+m))
                                                                                                                {
                                                                                                                                B_lag=0;
                                                                                                                          //if(m%0x10==0)printf("IapRead[%d]=0x%02X - \r",m,Buftem);       
                                                                                                                }
                                                                                                }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,IAPnum+1);
}




页: [1]
查看完整版本: 关于32位加法问题