最近在做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 有没有大佬
告诉一下,这句话判断的意义在哪里,附图是原子哥的历程,我也很想不明白判断是为什么。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
是不是你对它内部FLASH的处理机制理解有误?
原子哥,呃。。。。指点一下
一周热门 更多>