原子哥串口IAP例程的小问题。

2019-07-20 04:54发布

最近在做bootloader的在线升级,设备芯片是K60的芯片,但是K60没找到例程,就借用了原子个串口IAP的历程。
if(Anyindex == 1 | UPnum==0)
    {
            if(((*(__IO uint32_t*)(0X20001000+4))&0xFF000000)==0x0)
        {
              iap_write_appbin(FLASH_APP1_ADDR + (wirtindex)*2048,UPdata,2048);//更新FLASH代码
              wirtindex++;
              UART_printf(2,"success ");
              memset(UPdata,0,2048);
            }
            Anyindex=0;
            if(UPnum == 0)
            {
               if(((*(__IO uint32_t*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x00000000)//判断是否为0X000000
        {
              iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
        }
              wirtindex=0;
            UPnum=0x00ff;
    }
}


自己的函数就是这个,大致是通过协议下发到设备上每2k的数据进行一次写入,但是在最后Upnum=0 也就是升级数据下发完成以后开始跳转APP的时候  那句if判断是错误的,
得到FLAS_APP1_ADDR+4这个地址上的数值是0xffffffff   打断点调试的时候,第一次2k写入后,数据政策 判断也是对的,但是第二次写入2k数据的时候就变成了0xfffffff  有没有大佬
告诉一下,这句话判断的意义在哪里,附图是原子哥的历程,我也很想不明白判断是为什么。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。