嵌入式技术william hill官网
直播中

杨帆

7年用户 1391经验值
私信 关注
[问答]

RTT工程的APP重定位到RAM运行,是否会引起boot和app对这块ram的冲突?

我希望设计一个boot1、boot2、app。
boot2运行在ram,boot2可以升级boot2自身存储于flash内的镜像,同时可以升级app镜像。
正在验证部分细节,请教下各位。
我先做了基于裸机的实验(正点原子探索者F407串口IAP实验):
一个boot1的裸机工程,一个app的裸机工程。
Boot1执行将串口收到的app的镜像文件写入到ram内的特定起始地址处,然后跳转到ram去执行app程序。

我的疑问在上图红框内,boot工程使用的ram是位于0x20000000开始的一段区域吗,大小肯定是超过0x1000大小了, 但是0x20001000地址开始又存放了app镜像。 这样,boot和app对这块ram的使用不是冲突了吗, 怎么还能正常跑起来呢?
上图细节放大:

PS,修改魔术棒应该是使用的MDK的默认链接脚本,
找一下后缀为sct的链接脚本,打开app工程的链接脚本看一下:

这里的加载地址就等于执行地址, 也就是说,app需要boot运行起来,先把app镜像搬运到app工程内的链接脚本所指定的加载地址, 之后app就具备了正确的运行环境了。
对于如何把基于RTT工程的APP重定位到RAM运行,初步思路是,借鉴这个写法,加载地址和执行地址是ram上的同一个地址,但是前提是有一段前导程序(boot程序)把RTT的APP镜像先搬移到APP工程内指定的加载地址上。

回帖(3)

哔哔哔-

2022-3-30 13:51:09
肯定会冲突。 只是没有运行到冲突的代码吧。
举报

王尚岱

2022-3-30 13:51:23

先确认下你用的是sct连接文件进行链接的 还是target的地址块链接的
举报

最强海贼王

2022-3-30 13:51:40
如果你不需要跳回boot或者跳回去也不需要保持原先的变量,那冲突了也不影响啊。我只在需要用到flashdriver的工程中会区分开ram的使用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分