基本就是分成引导和应用程序区,要注意的恐怕也只有中断入口偏移了吧。一般程序会留出一个很大的空间作为升级备份(防止断电和数据中断,我们一般时使用以太网作为传输的)。 IAP,一般需要把MCU内的Flash分为两个区,一个为Bootloader,一个为APP。
我常用的有两种思路,两种各有优缺点。
第一种:在APP运行程序中接收到固件升级指令,跳转到Bootloader中,在Bootloader中接收待更新的固件数据,并且校验其正确性,把数据写到APP区,全部接收完成后,跳转到APP运行。这个方法的好处是,不需要额外的Flash区域,缺点是升级的端口协议相对固定、不自由。
第二种:在APP中接收待更新的固件数据,并且检验其正确性,再把数据写到备份区,完成后,跳转到Bootloader,在Bootloader中对备份区检查,如果有新数据,则把它搬到APP区,最后跳转到APP运行。这个方法的好处是,在APP中接收数据,APP里可以自由更换升级端口,比如串口,CAN,以太网等,应用中使用的什么端口,升级就可使用什么端口,Bootloader中只负责从备份区往APP区搬运数据。缺点就是需要使用和APP空间同样大小的备份区。
页:
1
[2]