一种不中断控制系统运行的嵌入式软件Bootloader方法与流程

文档序号:16067156发布日期:2018-11-24 12:46阅读:276来源:国知局

本发明涉及自动控制技术领域,尤其涉及一种嵌入式控制系统的控制方法。

背景技术

对于某些产品来说,从研发到调试,其功能是一直在调整完善的,从量产再到售后的过程中,其功能也可能扩展升级,这就要求产品自身的设计,能够满足这样的自我更新或升级换代,即能够接收外部的指令和数据实现内部程序的更新。

在这些产品的软件设计,程序被分为引导程序(bootloader程序)和用户程序。bootloader程序是一段固化在微控制器中的代码,在上电或复位后,是最先运行的一段程序,完成处理器正常的初始化工作,包括时钟、串口、can通信等,然后等待外部指令,或者启动引导功能,进行程序升级,或者直接跳转至用户程序。用户程序是实际发挥控制功能作用的程序,它控制硬件电路和外围设备实现预定的设计功能。

bootloader程序接收用户指令有几种方式:通过外部输入给芯片的数字量或者模拟量的变化;通过与外部通信传输的信息指令,如can通信或串口通信等;通过预先设定的延时,判断指定时间有无特定时间发生;通过读取预先存储的信息指令,如从内部存储器或eeprom中读取信息。

控制系统上电后,程序内部先运行bootloader程序,接收用户指令,判断是否要进行用户程序更新,如是,则接收外部传输的用户程序可执行文件,使其代替原有的用户程序;如否,则跳转进入用户程序执行正常的控制功能。

用户要想更新用户程序,先要进入bootloader程序,通常的做法是,重新上电运行,这样程序自动先运行bootloader部分,这样逻辑简单,但是需要额外的上下电操作,还可以给与用户程序特定的指令,使其再跳转回bootloader,这样需要将升级指令存储起来,以使得运行bootloader后,后者能够得知是否升级。

由于bootloader程序通常只具有程序引导功能,在现有的更新用户程序的过程中,将原有的用户程序擦除,然后将新程序写入内存并重新执行。这样势必导致用户程序运行的中断,继而不能继续控制外部硬件和设备继续正常运行,而这在有些类别的控制系统是不被接受、易造成损失、或者是不友好的。



技术实现要素:

为了解决现有技术中的问题,本发明提供了一种在bootloader的同时能够使被控制系统不中断工作的软件控制方法,通过将用户程序中的对外控制执行功能加入bootloader中,在bootloader更新程序的同时,能够执行维持原有的对外设备控制能力,使得整个控制系统不至于中断运行。

本发明具体通过如下技术方案实现:

一种不中断控制系统运行的嵌入式软件bootloader方法,所述软件分为bootloader程序和用户程序;所述方法包括:在软件开始运行后,首先执行bootloader程序,所述bootloader程序读取更新指令信息和控制信息,根据更新指令信息,判断是否更新用户程序;如是,则更新用户程序,并同时根据控制信息对外部实施控制,待更新完成后,清除存储器中的更新指令信息,然后跳转并执行更新后的用户程序;如否,则直接跳转并执行原有用户程序;在用户程序中接收外部用户对于用户程序更新指令,若没有接收到更新指令则继续执行原有程序;若接收到更新指令,则将此更新指令和当前对外部的控制信息存储进存储器,然后跳转并执行bootloader程序。

进一步地,更新用户程序的实施方法为:接收外部通信传输来的新用户程序可执行文件,将原用户程序从codeflash中擦除,并将新文件写入。

进一步地,根据控制信息对外部实施控制的实施方法为:根据控制系统的具体情况,判断需要连续执行的控制类别,在原有引导功能bootloader程序中,增加控制程序,其能够与引导功能并行执行,使芯片在执行bootloader程序的过程中具有相应输出信号的能力。

进一步地,接收用户程序更新指令的实施方法为:用户程序在正常控制循环或中断服务程序中,增加对用外部指定指令进行判断的程序。

进一步地,获取更新指令的实施方法为以下方式中的一种或者多种的组合:通过程序从存储器中读取更新指令;读取通过外部数字量、模拟量或各种通信方式输入的更新指令;通过判断是否超过指定时间以生成更新指令。

进一步地,获取控制信息的实施方法为以下方式中的一种:从存储器中读取预先设定的控制信息;bootloader程序中预先设定了控制信息。

进一步地,所述控制信息是由用户程序生成并存储进去的。

进一步地,bootloader程序对上述各种方法获取的信息进行再次处理,再生成最终的信息。

进一步地,当获取更新指令的实施方法为通过判断是否超过指定时间以生成更新指令时,在获取更新指令的延时中也要执行控制指令。

本发明的有益效果是:本发明可使用户程序在更新过程中,能够在控制系统正常运行时进行,不需要断电处理,并能够连续地执行控制过程,不中断对硬件电路和外部设备的控制。

附图说明

图1是本发明的第一实施例的方法流程图;

图2是本发明的第二实施例的方法流程图。

具体实施方式

下面结合附图说明及具体实施方式对本发明进一步说明。

本发明的bootloader程序,是指一段固化在微控制器中的代码,在上电或复位后最先运行的一段程序,其能够根据指令,启动引导功能进行用户程序更新,或者直接跳转至用户程序。

本发明的用户程序,是指微控制器中,实际发挥控制功能作用的程序,它控制硬件电路和外部设备实现预定的设计功能。

本发明的存储器,是指程序所在芯片内部的一段存储区域,或者是外部的具有存储功能的电路、器件和设备等,其能够与bootloader程序和用户程序进行信息读写的交互,特别的,与前二者交互的存储器可以是各自独立的,即不一定是同一个存储器(如芯片flash、eeprom、能够与芯片通信的pc机及其软件等)。

本发明的更新指令,是指用于判断是否进行用户程序更新的信息,它可以由用户程序生成,也可以由外部用户给定,特别地,用户程序生成的更新指令和bootloader程序读取的更新指令可以是各自独立的,即不一定是同一个更新指令。

本发明的控制信息,是指从原有用户程序结束运行,到新用户程序开始运行的区间内,希望硬件电路和外部设备所执行的控制信息。(它可以是用户程序正在执行的控制信息,也可以是由内部程序或外部指令给定的控制信息,还可以是指定存储器设定好的控制信息)。

本发明的一种控制系统控制器软件的bootloader方法,其使得控制器在更新用户程序的过程中,不中断对硬件电路和外部设备的控制。其软件分为2个部分:bootloader程序和用户程序。

第一实施例如图1所示,在软件开始运行后,首先执行bootloader程序,其读取更新指令信息和控制信息,根据更新指令信息,判断是否更新用户程序,如是,则更新用户程序,并同时根据控制信息对外部实施控制,待更新完成后,清除存储器中的更新指令信息,然后跳转并执行更新后的用户程序;如否,则直接跳转并执行原有用户程序。在用户程序中接收外部用户对于用户程序更新指令,若没有接收到更新指令则继续执行原有程序;若接收到更新指令,则将此更新指令和当前对外部的控制信息存储进存储器,然后跳转并执行bootloader程序。

其中,更新用户程序的实施方法为:接收外部通信传输来的新用户程序可执行文件,将原用户程序从codeflash中擦除,并将新文件写入,具体方法步骤根据控制芯片型号的不同进行针对性实施。

其中,根据控制信息对外部实施控制的实施方法为:根据控制系统的具体情况,判断需要连续执行的控制类别,在原有引导功能bootloader程序中,增加控制程序,其能够与引导功能并行执行,使芯片具有相应输出信号的能力(如增加配置gpio、pwm、can、串口通信)。

其中,接收用户程序更新指令的实施方法为:用户程序在正常控制循环或中断服务程序中,增加对用外部指定指令进行判断的程序,指令可以通过数字量、模拟量或通过各种通信方式进行输入。各种通信方式一般可为can通信,sci串口通信等,也可以通过添加无线模块进行无线通信。

其中,获取更新指令的实施方法可以为:通过程序从存储器中读取更新指令。另一种实施方法为:读取通过外部数字量、模拟量或通过各种通信方式输入的更新指令。再一种实施方法为,通过判断是否超过指定时间以生成更新指令。更进一步地一种实施方法为:将上述三种方法任意组合同时使用。

其中,获取控制信息的实施方法可以为,从存储器中读取预先设定的控制信息。另一种实施方法为:这些控制信息是由用户程序生成并存储进去的。另一种实施方法为:bootloader程序预先设定了控制信息,可用于直接执行,即不用进行外部的读取操作。更进一步地,bootloader程序可以对上述各种方法获取的信息进行再次处理,再生成最终的信息。

当获取更新指令的实施方法为:通过判断是否超过指定时间以生成更新指令时,本发明的控制逻辑变为图2所示的第二实施例,即在获取更新指令的延时中也要执行控制指令。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1