
本帖最后由 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 跳转功能时,貌似判断的值不对 ? #define USER_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(;;) {} } } |
不知道你网页是怎么写的啊,能给我参考下吗 455925291@qq.com 谢谢 |
|