hpdell 发表于 2017-12-10 20:12:00

请教下,使用st官网的 lwip_iap 历程,更新固件?

本帖最后由 hpdell 于 2017-12-10 22:09 编辑

请教下,使用st官网的 lwip_iap 历程,更新固件?

目前可以使用 http 进行更新固件,tftp 貌似还不行,

现在想先解决 http 的,问题如下:

1、我的bin文件大小为 338709 byte


2、图片如下:


图片里面的右边的 第 446 行是st 官网提供的判断条件,但是安装官网的条件,貌似不行,
需要使用 第 447 行的判断条件才行,那么 我想问一下, 这个 size 为何需要增加 54 字节才行啊 ??

目前我的这个增加的 54 字节是 使用 http iap TotalReceived 338968数据 -http iap size = 338914   == 54 来的,但是我不知道这个54是怎么来的 ?

程序中的第 439 行计算最终实际接收到的数据 是对的,也就是 TotalData 最终是等于 338709 byte的

3、接收固件更新完成后程序貌似没有重新启动 :


我已经在 第 496 行加入了程序自动跳转,但是最终是 程序没有执行 ,是何故啊 ????


请教下,使用 iap 跳转功能时,貌似判断的值不对 ?

#defineUSER_FLASH_FIRST_PAGE_ADDRESS      0x08080000
void j2a(void)
{
//检测APP地址是否合法
   // Check if valid stack address (RAM address) then jump to user application
/*
// 根据不同的 用户 app 的地址,仿真得到的结果值 这个地方为何会不同啊 ???????????
JumpAddress = ((*(__IO uint32_t*) 0x08080000 ) & 0x2FFE0000 );   // = 0x20020000

JumpAddress = ((*(__IO uint32_t*) 0x08060000 ) & 0x2FFE0000 );   // = 0x2FFE0000

JumpAddress = ((*(__IO uint32_t*) 0x08040000 ) & 0x2FFE0000 );   // = 0x2D700000

JumpAddress = ((*(__IO uint32_t*) 0x08020000 ) & 0x2FFE0000 );   // = 0x2F3E0000
*/

if (((*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS ) & 0x2FFE0000 ) == 0x20020000)
{
    // Jump to user application
    JumpAddress = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4);
    Jump_To_Application = (pFunction) JumpAddress;

    //设置APP程序堆栈指针
    __set_MSP(*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS);//跳转到APP.程序最终跳转后不能够运行,但是 app 程序如果单独下载运行是没有问题的
    Jump_To_Application();//跳转到APP.
}
else
{
    printf("jump uaer app run error ??\r\n");
    for(;;)
    {}

}
}





风语者1991 发表于 2018-4-12 18:06:07

不知道你网页是怎么写的啊,能给我参考下吗 455925291@qq.com 谢谢
页: [1]
查看完整版本: 请教下,使用st官网的 lwip_iap 历程,更新固件?