0 引言
在实际的生产工作中,从经济和实用性方面考虑,选择嵌入式系统MCU控制器时常常会使用到一些性能相对较弱,功能配置也不太强大的单片机,这类单片机有时候仅仅够用,无法从根本上满足多元化的需求。如果需要更多的功能就需要选择更高端的单片机,同时也意味着成本的增加。本文在项目过程中选用的MCU即为这种类型。在产品的整个生命周期中,需要对应用程序进行及时的升级换代,这就用到了IAP功能[1-2],而该款MCU不具备硬件级的中断向量重定位功能,因此只能另辟蹊径,以软件的方式解决该问题。
1 IAP系统介绍
在传统的单片机应用开发中,程序员将写好的代码通过IDE编译链接后生成可执行的二进制文件下载到单片机Flash中即可[3],功能的修改或者错误的修正需要程序员在完成代码修改后,再次通过专用调试器下载到单片机中才能实现。在简单小批量产品功能的实现中,这已经可以满足要求。如果是已经量产的产品,要想再修改功能几乎不可能。但是面对越来越复杂的应用环境,越来越多的应用要求,一次性调试好代码并下载运行的情况已经变得越来越难,而且随着代码量的增多,隐藏的BUG也越不容易被发现,需要在后期的应用中不断完善。
IAP(In Application Programming)功能即是为了应对这种情况应运而生的。IAP是一段完整的程序,它与应用程序(APP,即具体实现功能的单片机代码)是相互独立和分开的两部分,它的功能是在产品全生命周期中随时根据需要对应用程序部分代码进行擦除和烧写,目的是为了在产品发布后可以方便地通过预留的通信接口对产品中的功能进行更新升级[4]。
IAP和APP是同时存在于单片机上的两个完整的代码段。IAP实现对APP段代码的擦除和重新烧写,APP则负责实现具体的功能任务,当需要时跳转至IAP进行程序更新。它们分别烧写在单片机Flash的两个区域。对于本文所使用的华芯微特SWM240D8U7,它拥有64 KB的片上Flash(0x0——0xFFFF),就可以划分16 KB给IAP(0x0——0x3FFF)