一种程序在线加载方法

文档序号:6444044阅读:251来源:国知局
专利名称:一种程序在线加载方法
技术领域
本发明涉及程序升级技术,尤其涉及一种程序在线加载方法。
背景技术
单片机系统软件多以编程器烧录到软件载体中,再将此软件载体放置于单板插座上,然后上电运行。若软件需要升级或更改时,只能将单板断电,取出软件载体重新进行烧录。此方法不但要使用插座,带来成本的增加和接触不良等可靠性的降低,并且不能满足不能断电系统的软件升级要求,不能实现软件的远程升级。
目前已有的带有在线编程(In application programming简称IAP)功能的单片机,如AT89C51RD2,可以实现软件的在线加载功能。其在线加载的原理如下1、MCU单片机内部在flash高端地址驻留有厂家提供的API函数,此函数提供统一的调用接口,主要完成的是对flash的读写功能。
2、用户通过定制自身的加载(bootloader)程序,完成对软件的在线升级。加载程序中主要是完成通信功能和调用API函数,接收升级代码并写入flash中。
3、程序的运行流程如图1所示,其中,BSBboot status byte启动状态字节;SBVsoft boot vector软件启动向量;这两个变量的修改是通过调用API函数实现。具体为首先通过厂家提供的ISP功能加载用户定制的加载程序到指定地址,即图1中的步骤1,此步骤也可通过编程器将用户定制的加载程序烧录到flash指定地址来代替,然后更改程序启动向量SBV到加载程序的地址,重新复位单片机。
单片机再次启动后,将进入用户定制的加载程序,即图1中的步骤2,此时将完成用户应用程序的加载,加载完成后再次修改程序启动向量SBV到0000,重新复位单片机。
单片机再次启动将进入用户应用程序,即图1中的步骤3,完成单片机的在线升级。
实现在线编程功能时主要有以下方面的缺点1、可靠性差当用户应用程序加载完成后,程序启动向量修改为0000,从应用程序开始运行,而此时若应用程序由于加载过程中的错误而不能启动运行,则整个系统将瘫痪,不能够再重新加载,发生致命错误。
2、加载程序繁琐需不断更改启动向量,重新复位,时间较长。
3、不是所有型号的单片机都可实现上述软件加载方案。

发明内容
本发明提供一种程序在线加载方法,以解决现有程序加载存在可靠性差和加载程序繁琐的问题。
为解决上述问题,本发明提供以下技术方案一种程序在线加载方法,该方法包含下列步骤(1)系统上电运行存储器中的加载程序;(2)通过加载程序读取应用程序的版本信息,并判断其是否为最新版本;如果是,则调用并运行应用程序;如果不是,则执行步骤(3);(3)获取最新版本的应用程序文件并加载;(4)执行加载的应用程序,并在应用程序正确执行后更新所述版本信息。根据上述方法,将加载程序放置于单片机的程序存储器的低端地址;用户应用程序放置于高地址段,其起始地址根据用户程序大小而定。加载程序通过编程器烧录或系统ISP功能加载到程序存储器中,此部分程序可不用升级。
如果应用程序加载失败,当系统调用应用程序时使系统复位,重新进行加载程序。应用程序的运行是通过在加载程序中直接调用应用程序的起始地址来实现的。
本发明具有以下有益效果
1、可靠性大幅提高,在加载过程中若出现加载失败的情况不会造成系统瘫痪,可以重新进行加载。
2、加载过程简洁,实现容易。
3、不使用插座,由插座接触不良带来的可靠性隐患得到完全消除。
4、所有以flash或EEPROM为程序载体的单片机都可按此方法实现软件的在线升级。


图1是AT89C51RD2的软件在线加载流程图。
图2是本发明系统启动流程图。
具体实施例方式
用户程序包括两部分定制的加载(bootloader)程序和用户应用程序。将加载程序放置于单片机的程序存储器,如flash低端地址,即0000,系统每次上电都从加载程序开始;用户应用程序放置于程序存储器的高地址段,其起始地址根据用户程序大小而定,如0x2000。加载程序通过编程器烧录或系统ISP功能加载到程序存储器中,此部分程序可不用升级。
系统每次上电都从加载程序开始,根据是否有加载需求决定是运行加载程序还是跳转到应用程序。应用程序的运行不是通过更改软件启动向量SBV来启动的,而是通过在加载程序中直接调用应用部分程序的起始地址实现的。
如果应用程序加载失败,当系统调用应用程序时会使看门狗动作,使系统复位,重新进行加载程序,可以再次完成加载操作。
程序版本信息存储在程序存储器的特定地址,如0xfffe,由应用程序写入,加载程序读出。这样,只有应用程序加载正确,运行后才能正确的写入版本信息,在加载程序中读出此版本信息,若不是最新的版本即可启动加载。
参阅图2所示,具体的处理过程如下1、系统上电,开始执行程序存储器中的加载程序。
2、加载程序从程序存储器的特定地址(如0xfffe)读取当前应用程序的版本信息。
3、将应用程序的版本信息与控制此系统的上位机(上位机的主要作用就是下发最新的版本和最新的程序文件)下发的最新的应用程序版本信息进行比较,判断当前应用程序是否为最新版本,如果是则进行步骤5,否则进行步骤4。
4、获取最新版本的应用程序文件并加载。
5、在加载程序中通过直接调用应用程序的起始地址,跳转到应用程序开始运行。
6、应用程序正确运行后更新应用程序的版本信息,即将程序存储器中特定地址的原版本信息修改为最新的版本信息。
7、运行主程序。
本发明可以实现程序的在线升级,不需要系统断电,也不需要额外成本支出,可安全可靠地进行程序升级。
显然,本领域的技术人员可以对本发明的单片机软件的在线加载方法进行各种改动和变型而不脱离本发明的精神和范围。倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型。
权利要求
1.一种程序在线加载方法,其特征在于该方法包含如下步骤(1)系统上电运行存储器中的加载程序;(2)通过加载程序读取应用程序的版本信息,并判断应用程序是否为最新版本;如果是,则调用并运行应用程序;如果不是,则执行步骤(3);(3)获取最新版的应用程序并加载;(4)执行加载的应用程序,并在应用程序正确执行后更新所述版本信息。
2.如权利要求1所述的方法,其特征在于,步骤(2),将应用程序的版本信息与控制该系统的上位机下发的最新应用程序的版本信息进行比较来判断应用程序是否为最新的版本。
3.如权利要求1所述的方法,其特征在于,所述加载程序置于程序存储器的低端地址,使系统从该程序开始启动。
4.如权利要求3所述的方法,其特征在于,所述用户应用程序置于程序存储器高地址段,其起始地址根据用户程序大小而定。
5.如权利要求1所述的方法,其特征在于,如果应用程序加载失败,则当调用应用程序时使系统复位而重新开始加载程序。
6.如权利要求1至5任一所述的方法,其特征在于,通过在加载程序中直接调用应用程序的起始地址来运行。
7.如权利要求6所述的方法,其特征在于,程序版本信息存储在程序存储器的特定字节,由应用程序写入,加载程序读出。
8.如权利要求6所述的方法,其特征在于,加载程序通过编程器烧录或通过在系统功能(ISP)加载到程序存储器中。
全文摘要
本发明公开了一种程序在线加载方法,该方法为将加载程序放置于单片机的程序存储器的低端地址,用户应用程序放置于较高地址;系统每次从加载程序启动后,读取当前的版本信息,并判断其是否为最新版本,如果当前版本不是最新版本,则运行加载程序;调用应用程序。采用该方法加载软件时,不需系统断电,不需额外成本支出,在软件加载过程中若出现加载失败的情况也不会造成系统瘫痪,并可以重新进行加载,而且加载过程简洁,实现容易,可安全可靠地进行软件升级。
文档编号G06F9/445GK1783003SQ20041010091
公开日2006年6月7日 申请日期2004年12月2日 优先权日2004年12月2日
发明者张冬艳, 方庆银 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1