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

关于32位加法问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2024-07-02 10:09:53

17

主题

29

回帖

299

积分

中级会员

积分
299
发表于 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, 2025-7-5 01:47 , Processed in 0.104327 second(s), 49 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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