防止在线程序烧写出错的方法

文档序号:9432323阅读:604来源:国知局
防止在线程序烧写出错的方法
【技术领域】
[0001]本发明涉及程序编制技术领域,具体而言,涉及一种防止在线程序烧写出错的方法。
【背景技术】
[0002]目前IAP烧写即在线烧写程序的方式在控制器程序升级方面已有较为广泛的应用,但是IAP烧写的可靠性方面并没有传统的ISP烧写那么好。
[0003]IAP方式通常使用于工程现场的程序升级,由于应用程序文件较大,通常都会采取较高的波特率进行传输,这样将容易出现丢帧、错帧的问题而导致烧写过程出错,由于控制器内应用程序段的flash已被擦除,控制器将无法正常工作,只能通过多次尝试甚至是更换控制器来解决,给在线程序烧写带来了诸多不便。

【发明内容】

[0004]本发明实施例中提供一种防止在线程序烧写出错的方法,以解决现有技术中在线程序烧写容易出错的问题。
[0005]为解决上述技术问题,本发明实施例提供一种防止在线程序烧写出错的方法,包括:将FLASH分为BOOT区、程序标志区和应用程序区,应用程序区包括多个应用程序分区;在在线程序烧写状态下,执行BootLoader程序,将应用程序烧写至当前程序标志对应的应用程序分区以外的其他应用程序分区;将当前程序标志改写为完成在线烧写的应用程序分区。
[0006]作为优选,在在线程序烧写状态下,应用程序烧写完成后,将IAP标志置位。
[0007]作为优选,在在线程序烧写状态下,应用程序烧写完成后,在完成烧写的应用程序分区读取IAP标志,如果IAP标志为置位状态,则对当前程序标志进行改写,之后将IAP标志清除。
[0008]作为优选,程序标志区包括程序标志地址和IAP标志地址,程序标志地址内存放有程序标志,IAP标志地址内存放有IAP标志。
[0009]作为优选,方法还包括:在正常运行状态下,执行BootLoader程序,并跳转至程序标志所对应的应用程序区,不对程序标志进行操作。
[0010]作为优选,在执行BootLoader程序后,如果不满足IAP功能进入条件,则对IAP标志赋值,在应用程序区读取该IAP标志赋值,不对程序标志进行操作。
[0011]作为优选,应用程序分区包括第一应用程序分区和第二应用程序分区。
[0012]作为优选,在进行在线程序烧写前,方法还包括:将在线烧写程序的应用程序进行分块;对每个待发送的应用程序块附加校验码;在接收校验码时校对校验码,并在校验错误时重新请求校验错误的应用程序块。
[0013]作为优选,校验码为16位CRC校验码。
[0014]应用本发明的技术方案,防止在线程序烧写出错的方法包括:将FLASH分为BOOT区、程序标志区和应用程序区,所述应用程序区包括多个应用程序分区;在在线程序烧写状态下,执行BootLoader程序,将应用程序烧写至当前程序标志对应的应用程序分区以外的其他应用程序分区;将当前程序标志改写为完成在线烧写的应用程序分区。BOOT程序在向应用程序跳转前先获取跳转目标地址,在跳转执行后才更改运行程序地址,能够在程序改写错误无法执行时,仍然按照原有程序执行,不会影响程序的正常控制。在程序改写顺利完成时,才会将运行程序替换为改写完成的程序,有效保证了在线程序烧写的正确性,避免出现烧写过程出错的问题,提高在线程序烧写的可靠性和成功率。
【附图说明】
[0015]图1是本发明实施例的防止在线程序烧写出错的方法流程图;
[0016]图2是本发明实施例的防止在线程序烧写出错方法的Flash分区图。
【具体实施方式】
[0017]下面结合附图和具体实施例对本发明作进一步详细描述,但不作为对本发明的限定。
[0018]参见图1和图2所示,根据本发明的实施例,防止在线程序烧写出错的方法包括:将FLASH分为BOOT区、程序标志区和应用程序区,应用程序区包括多个应用程序分区;在在线程序烧写状态下,执行BootLoader程序,将应用程序烧写至当前程序标志对应的应用程序分区以外的其他应用程序分区;将当前程序标志改写为完成在线烧写的应用程序分区。在本实施例中,将会以应用程序分区包括第一应用程序分区Codel和第二应用程序分区Code2为例进行说明。
[0019]Boot区存放BootLoader程序,用于实现IAP功能,起始地址为0x0000 0000 ;程序标志区用于存放一个决定应用程序运行位置的标志,起始地址为0x0000 7000,程序标志区存放两个变量:程序标志(地址0x0000 7000)和IAP标志(地址0x0000 7004),也即在程序标志区的地址0x0000 7000处存放有程序标志,在地址0x0000 7004处存放有IAP标志,当执行BootLoader程序时,读取0x0000 7000处存放的变量则可以进入到程序标志所对应的应用程序分区,读取0x0000 7004处存放的变量则可以获取IAP标志的赋值。
[0020]在本实施例中,BOOT程序在向应用程序跳转前先获取跳转目标地址,在跳转执行后才更改运行程序地址,而非是先更改运行程序地址,然后在更改后的运行程序地址烧写在线程序,因此可以将正在运行的程序与正在改写的程序分割开,能够在程序改写错误无法执行时,保证系统仍然按照原有程序执行,不会影响程序的正常控制。在程序改写顺利完成时,才会将运行程序替换为改写完成的程序,有效保证了在线程序烧写的正确性,避免出现烧写过程出错的问题,提高在线程序烧写的可靠性和成功率。
[0021]在在线程序烧写状态下,应用程序烧写完成后,将IAP标志置位,此时表示Flash处于在线程序烧写状态,需要将程序标志改写成烧写完成的应用程序所在的应用程序分区,以便使控制器等固件按照在线烧写完成后更新的程序执行。
[0022]在在线程序烧写状态下,应用程序烧写完成后,在完成烧写的应用程序分区读取IAP标志,如果IAP标志为置位状态,则对当前程序标志进行改写,之后将IAP标志清除。
[0023]具体而目,在IAP烧与状态时,上电后程序先执彳丁 BootLoader程序,代码在当前程序标志对应的应用程序分区以外的其他应用程序分区烧写完毕后,将IAP标志写为OxOOOO0001,在读取程序标志时,进行如下判断和动作:
[0024]如果程序标志区=0
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1