STM32 IAP更新APP不成功

2019-07-21 05:51发布

现在做一个IAP更新程序,思路是这样的--上电复位2S内串口没有接收到更新指令,则跳转到app程序;串口如果有接收到特定的更新指令,就进入更新模式,且发送一段请求数据:plase send the updata file.现在上位机就发送app文件,单片机接收数据保存起来。再进行图一55行的判断,但是判断不符合条件?数据地址在图二进行的定义。对55行我的理解是判断从0x20001300(即数组首地址) + 4地址取出数据,在与上0xff000000,判断高4位是否为08,如果是,则表示文件正确?这个为什么要等于0x08000000没理解。现在就是这一步有问题,判断这一步的前面我打印出了这个值,等于0如图3所示。想问一下问什么这里需要等于0x08000000?现在是更新不了APP程序,本来烧进去的app是能正常运行,且就以此份固件生成的bin文档也更新不了。 图1 图1
2.jpg
3.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
gosomewhere
1楼-- · 2019-07-23 09:52
gosomewhere 发表于 2019-1-14 17:36
app单独跑是没问题的,就加了中断向量偏移和keil设置。

可以尝试下先跑一个简单的demo,比如跑马灯,能正常运行么?
正点原子
2楼-- · 2019-07-23 14:10
路人曦 发表于 2019-1-14 16:46
你写个点亮LED灯的小程序,当做app,你通过你这个boot程序,跳转,查一下LED是不是按你的方式在跑。如果这 ...

简单的LED程序能跑仿真也不会出现重复运行的情况。有可能是APP过大了,APP中用到了两个USB口,会不会是因为这个?
gosomewhere
3楼-- · 2019-07-23 16:49
正点原子 发表于 2019-1-15 00:58
可以尝试下先跑一个简单的demo,比如跑马灯,能正常运行么?

简单的LED程序能跑仿真也不会出现重复运行的情况。有可能是APP过大了,APP中用到了两个USB口,会不会是因为这个?
gosomewhere
4楼-- · 2019-07-23 17:26
你检查一下你的Boot跟你的app的程序大小..然后算上你两个程序之间的偏移量,查一下内存是不是小了,如果是app过大或者boot跟app加起来过大,你可以考虑删减一些不必要的东西...尽量减少内存的使用量。
路人曦
5楼-- · 2019-07-23 19:08
 精彩回答 2  元偷偷看……

一周热门 更多>