固定向量表MCU的IAP程序升级方法技术

技术编号:22329813 阅读:18 留言:0更新日期:2019-10-19 12:13
本发明专利技术公开了一种固定向量表MCU的IAP程序升级方法,在升级过程中,将用户程序和IAP程序分在不同的擦写块内;在用户程序中断时,通过间接跳转来实现。本发明专利技术IAP程序和用户程序完全分隔开,无需共用一个Flash擦写块,能够从根本上解决升级变砖的情况。

【技术实现步骤摘要】
固定向量表MCU的IAP程序升级方法
本专利技术涉及一种固定向量表MCU的IAP程序升级方法,属于IAP程序升级

技术介绍
IAP技术指的是在应用中编程,相比于传统的ISP系统编程,该技术无需硬件编程器,操作更简单、灵活,比如IAP升级程序可以支持串口、USB、蓝牙、网络等多种方式实现,其原理就是借助Flash内部的一段IAP升级程序实现的。针对于内核中断向量表可以偏移的MCU,实现IAP程序相对简单,并且基本不存在风险。但是如果对于中断向量表不可偏移的MCU,IAP升级程序就需要谨慎设计,否则会存在变砖风险。以C51单片机为例,传统的IAP程序设计一般会把IAP跳转指令放在0x0000地址,紧接着的是用户程序中断向量表存放位置,在IAP升级用户程序时,如果在擦除0x0000所在块时异常断电,则单片机再次重新上电将会变砖。那么如何解决固定向量表的IAP程序升级变砖问题,就是当前亟待解决的问题。
技术实现思路
为了解决上述问题,本专利技术提供一种固定向量表MCU的IAP程序升级方法,IAP程序和用户程序完全分隔开,无需共用一个Flash擦写块,能够从根本上解决升级变砖的情况。解决上述问题的技术方案为:一种固定向量表MCU的IAP程序升级方法,在升级过程中,将用户程序和IAP程序分在不同的擦写块内;在用户程序中断时,通过间接跳转来实现。进一步地,包括如下具体步骤:S1、判断是否需要升级,若需要升级转S2,若不需要升级转S3;S2、用户程序入口指令以及用户程序向量表存放在指定的用户区开始处;用户程序链接地址开始的程序依次存放在对应存储地址;S3、跳转用户程序入口,执行用户程序。进一步地,S2中,接收到0x0000开始的代码以及完整的用户程序向量表区长度内容存放在内核向量表之后,用户程序链接地址之前,并且从第一个擦写块之后存放。进一步地,S2中,把用户程序链接到所述用户程序向量表之后;所述用户程序存储地址与链接地址相同。进一步地,S3的具体步骤为:当不需要升级时,执行用户程序并等待中断,若发生中断,则MCU自动至内核向量表取指令,间接跳转用户程序向量表区,最终跳转至中断服务程序,然后中断返回,继续执行用户主程序。本专利技术的优点在于:把用户程序链接地址往后偏移以保证用户程序和IAP程序严格分在不同的flash擦写块内,用户程序的中断向量表同时也搬移到用户程序空间的固定位置,内核中断向量表处存放固定的跳转指令,用来跳转到用户程序空间的中断向量表处,完成间接跳转。从而杜绝了升级变砖的情况。下面结合附图对本专利技术作进一步详细描述。附图说明图1为本专利技术程序结构示意图;图2是本专利技术一个较佳实施例的流程图。具体实施方式为了加深对本专利技术的理解,下面将结合实施例和附图对本专利技术作进一步详述,该实施例仅用于解释本专利技术,并不构成对本专利技术保护范围的限定。如图1所示,一种固定向量表MCU的IAP程序升级方法,在升级过程中,将用户程序和IAP程序分在不同的擦写块内;在用户程序中断时,通过间接跳转来实现。包括如下具体步骤:S1、判断是否需要升级,若需要升级转S2,若不需要升级转S3;S2、用户程序入口指令以及用户程序向量表存放在指定的用户区开始处;用户程序链接地址开始的程序依次存放在对应存储地址;S3、跳转用户程序入口,执行用户程序。S2中,接收到0x0000开始的代码以及完整的用户程序向量表区长度内容存放在内核向量表之后,用户程序链接地址之前,并且从第一个擦写块之后存放。S2中,把用户程序链接到所述用户程序向量表之后;所述用户程序存储地址与链接地址相同。S3的具体步骤为:当不需要升级时,执行用户程序并等待中断,若发生中断,则MCU自动至内核向量表取指令,间接跳转用户程序向量表区,最终跳转至中断服务程序,然后中断返回,继续执行用户主程序。如图2所示,实施例1:IAP升级程序的构造方法:IAP升级程序禁止使用中断服务函数,可以使用中断查询的方式实现升级接口的功能。因为中断向量表位置只有一个,是需要为用户程序服务的,IAP程序最终只需要保证稳定可靠即可。由链接器把IAP程序链接到Flash的最后,这个地址记做D。目的是给用户程序留出整块的空间,最大化利用Flash资源。IAP主体程序从地址D开始依次存放。控制器运行的第一条指令地址0x0000处存放IAP程序的main函数入口跳转指令。目的是直接跳转IAP程序,由IAP程序决定当前是否需要升级用户程序。内核中断向量表处,把这个地址记做A,在所有中断的内核向量表跳转地址存放一个相对当前地址添加固定偏移量的跳转指令。用户程序真实向量表所处位置设为A1,A1和A的差值就是上述固定偏移量。目的是当用户程序发生中断后,由内核自动到内核中断向量表处取指,并间接地跳转到用户程序向量表处。固定的偏移量是确定的,所以对应的跳转指令也是确定的,所以可以随IAP程序一同烧录。用户程序的构造方法:用户程序可以随意使用MCU所有中断服务。由链接器把用户程序链接到内核中断向量表地址之后,并且保证不在第一个Flash擦写块内,因为IAP跳转地址处于第一个擦写块内,这个目的是把用户程序和IAP程序严格分开,避免擦写用户程序的同时把IAP程序也一起擦掉的情况。用户程序开始的地址记做B。除此之外,还需要在这个地址上加一个向量表总长度作为最终用户程序链接的地址,这个地址记做C。用户程序的主体部分就是从C地址开始依次存放。B地址处存放用户程序的main函数入口跳转指令。方便IAP程序准确找到用户程序入口,进行跳转。B地址和C地址之间的部分是存放用户程序实际中断向量入口跳转地址的,起始地址为A1。也就是上述“IAP升级程序的构造方法”中提到的用户程序向量表处。程序执行流程分析:芯片上电执行第一条指令后即可跳转到IAP程序的MAIN函数,由IAP程序分析是否符合升级条件:(1)如果不符合则直接跳转到B地址处,进而把控制权交给用户程序。用户程序执行过程中,如果发生中断,则由内核跳转到A地址内核向量表区取指令,而A地址区域存放的并不是真正的用户中断服务程序入口,而是一个跳转到A1用户程序向量表处的跳转指令。再次由A1向量表区的中断跳转指令跳转到中断服务程序执行。(2)如果符合升级条件,则准备通过相关接口接收用户程序,收到从0x0000开始的代码以及完整的向量表长度内容从B、A1地址依次存放。收到从用户程序链接地址开始的用户程序代码从C地址依次存放。烧录完成后,复位相关寄存器后,直接跳转用户程序入口B即可把控制权转交用户程序。综上,本专利技术把用户程序链接地址往后偏移以保证用户程序和IAP程序严格分在不同的flash擦写块内,用户程序的中断向量表同时也搬移到用户程序空间的固定位置,内核中断向量表处存放固定的跳转指令,用来跳转到用户程序空间的中断向量表处,完成间接跳转。从而杜绝了升级变砖的情况。以上所述仅为本专利技术的较佳实施例而已,并不用以限制本专利技术,凡在本专利技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本专利技术的保护范围之内。本文档来自技高网...

【技术保护点】
1.一种固定向量表MCU的IAP程序升级方法,其特征在于,在升级过程中,将用户程序和IAP程序分在不同的擦写块内;在用户程序中断时,通过间接跳转来实现。

【技术特征摘要】
1.一种固定向量表MCU的IAP程序升级方法,其特征在于,在升级过程中,将用户程序和IAP程序分在不同的擦写块内;在用户程序中断时,通过间接跳转来实现。2.根据权利要求1所述的方法,其特征在于,包括如下具体步骤:S1、判断是否需要升级,若需要升级转S2,若不需要升级转S3;S2、用户程序入口指令以及用户程序向量表存放在指定的用户区开始处;用户程序链接地址开始的程序依次存放在对应存储地址;S3、跳转用户程序入口,执行用户程序。3.根据权利要求2所述的方法,其特征在于,S2中,接收...

【专利技术属性】
技术研发人员:高杰刘帅
申请(专利权)人:南京沁恒微电子股份有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1