NXP

关于LPC1768的IAP随笔

2019-07-12 11:56发布

关于LPC1768的IAP随笔 单片机的程序需要自升级,现在的IAP程序大多数的做法都是,上电先启动一个小程序,我们称之为boot程序,然后该程序会和其它的控制器或者PC进行交互,一般有串口方式,通过交互通信口将新的程序发送给MCU,由MCU对FLASH进行自编程,完成后断电或者重启即可,整个升级工作完成。 本例结合LPC1768IAP来讨论程序的转移。从之前的博客《关于LPC1768的存储地址、运行地址、向量地址》可以知道,MCU上电后,总是从0x00000000地址开始运行程序。那么boot程序往往也是从0地址开始运行。boot程序本质上也是一段普通的应用的程序,之所以叫boot程序,是因为该程序的功能主要是供引导和升级用,MCU真正要实现用的功能的程序我们称之为user程序。boot程序和user程序都是独立的程序,两个程序之间几乎没有管理和数据共享。当不需要做iap的时候,可以省略掉boot程序。如下图1和图2对比了单独的user程序和添加了boot程序之后的效果。                   图1 user                                   图2 boot+user 再回顾一下boot程序的流程:

boot转移到user的程序如下:

这里func定义为一个函数指针:typedef void (* func)(void);参考本论坛的“强制地址跳转”