有没哪位大哥弄过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条回答
神的诱惑
2019-10-16 23:39
正点原子 发表于 2016-11-30 18:11
你可以修改flash算法,利用仿真器将代码烧写到指定区域(注意擦除是整个扇区擦的,所以代码的起始地址,最 ...

感谢原子哥的回帖
我的想法是说一般情况下就通过BootLoader读取一个标志位跳转到app1执行app1代码,突然某天想升级了,就在app1的代码中的一个下载功能把程序烧到app2的位置上更改标志位,下次运行的时候就从BootLoader读取标志位后跳到app2一直执行app2代码,以后又想升级了,再通过app2把程序下载app1的位置上,这样一直重复下去。然后就想说有没有办法把app的程序编译链接成一个位置无关的.bin文件。
想法有点天真,不知道可行的程度有多高

一周热门 更多>