解释stm32 OTA升级需要上报当前运行切区的原因

1.stm32在做OTA升级时,需要上报当前运行的切区,网关将另一切区的固件下发。

2.网关保存的两份固件是由同一份代码编译而来,唯一不同的是Scatter File文件中的装载地址不同。

3.下面解释生成的固件必须放在Flash中与装载地址相同的位置:

3.1 固件运行时,会首先进入startup,之后会跳转到 _main_;

3.2 注意 _main_ 并非main函数,而是MDK内置的宏,跳转时会先执行__scatterload(),__rt_entry():

__scatterload():负责把RW/RO输出段从装载域地址复制到运行域地址,并完成了ZI运行域的初始化工作。

__rt_entry():负责初始化堆栈,完成库函数的初始化,最后自动跳转向main()函数。【1】

3.3__scatterload()装载所用地址正是由Scatter File设置的装载地址决定。这些信息都保持在bin文件中。

4.以上,解释了stm32 OTA升级需要上报当前运行切区的原因,主要是MDK所限。假如能够做到装载地址可以由引导程序设定,应该可以解决需要上报运行切区的限制。NXP的JN5169就实现了此功能。

注:

【1】https://blog.csdn.net/lushoumin/article/details/78886141

猜你喜欢

转载自blog.csdn.net/qq_34244393/article/details/99686590