有没哪位大哥弄过stm32的一个BootLoader和两个app程序的跳转啊?

2019-10-16 04:59发布

最近在弄一个程序碰到个问题,就是编译app程序的时候一定要配置IAR里的一个地址,而且这个地址就是烧写程序到flash上的地址,有没有办法就是不配置IAR的地址信息,然后app程序随便下载到flash的某块地址上,通过BootLoader进行跳转。就是在片内flash的0x08000000上烧一个BootLoader,然后在0x08005000的地方上有个app1程序,在0x08012800的地址上有个app2程序。
执行过程的话是芯片上电运行bootloader,在BootLoader中判断一个标志位决定是跳转执行0x08005000的app1还是0x08012800的app2。如果执行0x08005000的app1,在app1中实现从远程将一个app程序写在0x08012800的flash让它成为app2,然后设置标准位,最后关闭中断软件复位,通过BootLoader跳转到app2去执行程序。

一句话就是通过app1程序下载app2程序然后复位执行app2程序,还可以通过app2程序下载app1程序然后复位执行app1程序
问题就是怎么编译app程序让app既可以放在app1位置也可以放在app2位置上?
表达能力有限多多见谅哦
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
makc
1楼-- · 2019-10-17 04:40
我们这边折腾的是,从片外flash读,然后把原来的APP 备份到后面,从片外flash读过来的覆盖原来APP位置。
然后若是升级的APP启动失败则恢复原来的APP。
颠疯
2楼-- · 2019-10-17 05:27
当初搞MC9S12XS128的芯片的时候搞过,不过换成stm32汇编部分的代码估计都不一样了。
神的诱惑
3楼-- · 2019-10-17 07:07
 精彩回答 2  元偷偷看……
神的诱惑
4楼-- · 2019-10-17 12:22
颠疯 发表于 2016-12-2 15:13
当初搞MC9S12XS128的芯片的时候搞过,不过换成stm32汇编部分的代码估计都不一样了。

流程应该都一样吧。你那有用到函数重定位吗?
颠疯
5楼-- · 2019-10-17 12:34
神的诱惑 发表于 2016-12-2 18:39
流程应该都一样吧。你那有用到函数重定位吗?

记不清了,大概就是我强制把app1放在一个地址,app2放在一个地址,上电的时候先启动app1,然后根据指令去更新app2或者直接运行app2。

一周热门 更多>