一种通讯设备软件更新的方法及装置
技术领域
本发明属于通信领域,尤其涉及一种通讯设备软件更新的方法及装置。
背景技术
在通信领域中,普遍使用存储在可编程控制器内的协议软件来实现各种设备的控制和各种设备之间的互联通讯。在实际的使用过程中,可能会不时地对可编程控制器内的软件进行修改和更新。在现有技术中,普遍使用烧写器来对设备中的可编程控制器直接进行程序的重新烧写。这时,就经常需要将设备打开或是额外增加烧写接口来对设备中的可编程控制器进行程序的烧写。如果设备位于一些比较特殊的位置(如塔顶等),更新程序时,更是要将设备从塔顶拆卸下来,十分不便。
发明内容
本发明实施例的目的在于提供一种通讯设备软件更新的方法及装置,旨在解决现有设备在更新软件时,不便于烧写新程序的问题。
本发明实施例是这样实现的,一种通讯设备软件更新的方法,所述方法包括以下步骤:
以串口中断的方式接收代码更新命令;
将通过串口接收到的新程序存储至待更新设备可编程控制器的存储区;
重启待更新设备,运行新程序。
本发明实施例的另一目的在于提供一种通讯设备软件更新的装置,所述装置包括:
更新命令接收单元,用于以串口中断的方式接收代码更新命令;
新程序存储单元,用于将通过串口接收到的新程序存储至待更新设备可编程控制器的存储区;
新程序运行单元,用于重启待更新设备,运行新程序。
在本发明实施例中,通过串口将需要更新的程序代码发送给待更新设备的方式,使得待更新设备的软件更新不在需要将设备打开,对可编程控制器进行程序的烧写,极大的方便了设备的软件更新。
附图说明
图1是本发明第一实施例提供的通讯设备软件更新的方法流程图;
图2是本发明第二实施例提供的通讯设备软件更新的方法流程图;
图3是本发明实施例提供的通讯设备软件更新的装置示意图;
图4是本发明实施例提供的新程序存储单元的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供一种通讯设备软件更新的方法,通过串口将需要更新的程序发送给待更新设备,该待更新设备对接收到的程序进行校验,校验成功后,将所接收到的需要更新的程序覆盖原来的程序,并运行接收到的需要更新的程序。
本发明提供了一种通讯设备软件更新的方法及装置:
所述方法包括:
以串口中断的方式接收代码更新命令;
将通过串口接收到的新程序存储至待更新设备可编程控制器的存储区;
重启待更新设备,运行新程序。
所述装置包括:
更新命令接收单元,用于以串口中断的方式接收代码更新命令;
新程序存储单元,用于将通过串口接收到的新程序存储至待更新设备可编程控制器的存储区;
新程序运行单元,用于重启待更新设备,运行新程序。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
对于待更新设备而言,更新该设备的软件即是将新的程序代码通过通信接口发送并存储至该设备的可编程控制器中,并运行。如图1所示为本发明第一实施例提供的通讯设备软件更新方法的流程图,为了便于说明,仅示出了与本发明实施例相关的部分。
在步骤S101中,接收到串口命令,串口中断被触发,判断该接收到的串口命令是否是代码更新命令,若是则执行步骤S103,否则执行步骤S102。
在本发明实施例中,终端通过串口发送命令至待更新设备的可编程控制器,所述终端包括但不限于电脑等,所述待更新设备包括但不限于通讯设备(如塔放等),所述可编程控制器包括但不限于单片机。可编程控制器接收到串口发送来的命令后,引起串口中断,然后,可编程控制器会停下原有的工作来检查该接收到的串口命令是什么命令,在本发明实施例中,由于是对软件进行更新,因此需判断该串口命令是否是代码更新命令。
在步骤S102中,处理其他命令。
在本发明实施例中,若接收到的串口命令不是代码更新命令,则在确认该命令的类型后,处理相应的命令。
在步骤S103中,将通过串口接收到的新程序存储至待更新设备可编程控制器的存储区中。
在本发明实施例中,若接收到的串口命令是代码更新命令,则开始接收通过串口传输过来的新程序,并将该新程序存储至待更新设备可编程控制器的存储区中。
在步骤S104中,重启待更新设备,运行新程序。
在本发明实施例中,引导程序在重启待更新设备后,运行新程序,完成待更新设备的软件更新。
在本发明实施例中,通过串口将需要更新的程序代码发送给待更新设备的方式,使得待更新设备的软件更新不在需要将设备打开,对可编程控制器进行程序的烧写,极大的方便了设备的软件更新。
实施例二:
由于在新程序传输的过程中,可能会因为各种原因造成传输失败,此时,若将未能完全接收的新程序覆盖原程序后启动,可能造成系统瘫痪,因此,本发明第二实施例提出了一种用于解决此问题的软件更新方法。如图2所示为本发明第二实施例提供的通讯设备软件更新方法的流程图,为了便于说明,仅示出了与本发明实施例相关的部分。
在步骤S201中,将待更新设备中的可编程控制器内部存储区分为多个存储区域。
在本发明实施例中,首先,预先将可编程控制器中存储的程序按功能分为两部分,分别为引导程序和应用程序。其中,引导程序用于判断软件更新是否成功,决定是否启用接收到的新应用程序等,能够实现诸如中断向量在更新程序后重新定位、指针跳转等功能。应用程序即是实际执行的程序主体。
由于可编程控制器中的程序根据功能进行了划分,相应的需要对可编程控制器的内部存储区预先进行分区,分别用于存储不同的程序。其中,将可编程控制器内部存储区划分为多个存储区域,所述存储区域包括一个新程序暂存区,用于暂存新程序,一个主程序区,用于存储主程序,以及用于存储各中断向量地址、引导程序、及用户数据的一种或多种组合的一个或多个存储区域。
作为本发明的一个优选实施例,可将可编程控制器的内部存储区预先分为4个存储区域,第一个区域用于存储各中断向量地址及引导程序;第二个区域为主程序区,用于存储主程序;第三个区域用于暂存接收到的新程序,即新程序暂存区;第四个区域用于存储一些需要保存的用户数据。
作为本发明另一优选实施例,可将可将可编程控制器的内部存储区从地址地位到高位依次分为用于存储各中断向量地址及引导程序的存储区域、主程序区、新程序暂存区及用于存储一些需要保存的用户数据的存储区。
下面以C8051F系列的存储空间为64K的单片机为例来说明。例如:
由于可编程控制器内部存储空间为64K,因此,地址为0x0000到0xffff。第一个区域从0x0000到0x1000,为各中断向量地址区域和引导程序存储区;第二个区域从0x1000到0x7fff,为程序运行区,用于存储实际运行的主程序;第三个区域从0x8000到0xefff,为新程序暂存区,用于暂存接收到的新程序;第四个区域从0xf000到0xffff,用于存储一些需要保存的用户数据。
在步骤S202中,触发串口中断,判断接收到串口命令的是否是代码更新命令,若是则执行步骤S204,否则执行步骤S203。
在步骤S203中,处理其他命令。
在步骤S204中,擦除预设的新程序暂存区,将接收到的新程序存储至该新程序暂存区。
在本发明实施例中,若接收到的命令是代码更新命令,则擦除新程序暂存区。以便于接收到发送过来的需要更新的新程序后,可直接存储至新程序暂存区。所述接收到的新程序包括但不限于电脑等终端通过串口等通信接口发送过来的新程序。
在步骤S205中,校验新程序是否正确,若是则执行步骤S206,否则执行步骤S207。
在本发明实施例中,为了预防传输过程中由于网络、线路等各种问题可能导致的新程序传输失败、传输不完全等问题,因此,需要对新程序进行校验,校验新程序是否正确。所述校验方法可为现有的校验程序的任何一种方法,在此不做限制。
在步骤S206中,置位标志位。
在本发明实施例中,若校验后,新程序完整正确,则置位标志位。
在步骤S207中,判断标志位是否置位,是则执行步骤S209,否则执行步骤S208。
在本发明实施例中,通过判断标志位是否置位,来确定是否有新程序需要更新,标志位被置位,则说明有新程序需要更新;标志位未被置位,则说明没有新程序需要更新。由引导程序来判断是否置位标志位。
在步骤S208中,继续执行原程序。
在本发明实施例中,标志位未置位,说明没有新程序需要更新,则继续执行原程序。
在步骤S209中,将新程序暂存区的新程序复制到主程序区,覆盖主程序区中原有的程序;
在本发明实施例中,由引导程序启动更新过程,将新程序暂存区的程序复制到主程序区,覆盖主程序区中原有的程序。
在步骤S210中,清除标志位。
在本发明实施例中,将新程序暂存区的程序覆盖原有的程序后,需清除标志位,以便于下一次需要更新程序时,重新置位标志位。否则,若不清除标志位,下一次接收的新程序出错了,不需要更新,但由于未清除标志位,更新了错误的新程序,因而造成系统瘫痪。
在步骤S211中,运行新程序。
在本发明实施例中,新程序覆盖原有的程序后,由引导程序重启系统,然后运行新程序。
在本发明实施例中,由于在将新程序覆盖原有程序之前,会先校验新程序,并只有在校验正确后,才会置位标志位。使得新程序的正确性得以保证,错误的新程序不会得到更新,有效防止了由于更新失败而导致的程序失效、系统瘫痪。且采用可编程控制器片内分区而不使用外部存储器芯片,既可以节省成本,也可以防止主芯片和外部芯片在读写时由于受到外部干扰而产生错误的情况。
实施例三:
图3为本发明实施例提供的通讯设备软件更新装置的结构示意,为了便于说明,仅示出了与本发明实施例相关的部份。该装置可以是内置于通信设备可编程控制器中的软件单元、硬件单元或者软硬件相结合的单元,或者作为独立的挂件集成到这些设备或这些通信设备可编程控制器的应用系统中。其中:
更新命令接收单元31,用于以串口中断的方式接收代码更新命令。
在本发明实施例中,终端发送命令至待更新设备的可编程控制器,所述终端包括但不限于电脑等,所述待更新设备包括但不限于通讯设备(如塔放等),所述可编程控制器包括但不限于单片机。
新程序存储单元32,用于将通过串口接收到的新程序存储至待更新设备可编程控制器的存储区中。
新程序运行单元33,用于重启待更新设备,运行新程序。
在本发明另一实施例中,所述新程序存储单元32还包括以下模块,如图4所示:
存储区分区模块321,用于将待更新设备中的可编程控制器内部存储区分为多个存储区域,所述存储区域包括一个新程序暂存区,用于暂存新程序,一个主程序区,用于存储主程序,以及用于存储各中断向量地址、引导程序、及用户数据的一种或多种组合的一个或多个存储区域。
新程序暂存模块322,用于擦除预设的新程序暂存区,将接收到的程序存储至该新程序暂存区。
在本发明实施例中,若接收到的命令是代码更新命令,则擦除新程序暂存区。以便于接收到发送过来的需要更新的新程序后,可直接存储至新程序暂存区。所述接收到的新程序包括但不限于电脑等终端通过串口等通信接口发送过来的新程序。
新程序校验模块323,用于校验新程序。
标志位置位/清除模块324,用于置位/清除标志位。
标志位判断模块325,用于判断标志位是否置位,若标志位置位,则程序覆盖模块327将新程序暂存区的程序复制到主程序区,覆盖主程序区中原有的程序;若标志位未置位,则继续执行原程序。
原程序执行模块326,用于执行原程序。
程序覆盖模块327,用于将新程序暂存区的程序复制到主程序区,覆盖主程序区中原有的程序。
在本发明实施例中,通过串口将需要更新的程序代码发送给待更新设备的方式,使得待更新设备的软件更新不在需要将设备打开,对可编程控制器进行程序的烧写,极大的方便了设备的软件更新。采用可编程控制器片内分区而不使用外部存储器芯片,既可以节省成本,也可以防止主芯片和外部芯片在读写时由于受到外部干扰而产生错误的情况。且由于在将新程序覆盖原有程序之前,会先校验新程序,并只有在校验正确后,才会置位标志位。使得新程序的正确性得以保证,错误的新程序不会得到更新,有效防止了由于更新失败而导致的程序失效、系统瘫痪。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。