原子哥串口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  有没有大佬
告诉一下,这句话判断的意义在哪里,附图是原子哥的历程,我也很想不明白判断是为什么。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
路人曦
1楼-- · 2019-07-20 08:34
 精彩回答 2  元偷偷看……
wuboaini23
2楼-- · 2019-07-20 14:06
FLAS_APP1_ADDR+4 这是说你APP的复位地址 也就是确保你的程序是flash程序 位置对, FLAS_APP1_ADDR开头是堆栈地址
路人曦
3楼-- · 2019-07-20 15:35
 精彩回答 2  元偷偷看……
正点原子
4楼-- · 2019-07-20 15:54
路人曦 发表于 2018-6-12 17:28
有一个新问题,是我进行Flash擦写的时候,(擦写程序用的原子哥的代码修改的)。擦写都是成功但是擦写会影 ...

是不是你对它内部FLASH的处理机制理解有误?
路人曦
5楼-- · 2019-07-20 16:08
正点原子 发表于 2018-6-13 00:28
是不是你对它内部FLASH的处理机制理解有误?

原子哥,呃。。。。指点一下

一周热门 更多>