一种嵌入式系统、电子设备及软件运行方法

文档序号:31635574发布日期:2022-09-24 03:43阅读:37来源:国知局
一种嵌入式系统、电子设备及软件运行方法

1.本发明涉及嵌入式系统技术领域,尤其涉及一种嵌入式系统、电子设备及软件运行方法。


背景技术:

2.嵌入式系统一般先将可执行代码固化于flash芯片中,系统上电后,从flash芯片中加载可执行代码并运行。但目前嵌入式系统一般仅设置一个flash芯片,若flash芯片失效,则应用程序无法正常运行,导致任务失败。也有部分嵌入式系统设置两个flash芯片,其中一个flash芯片用于存储引导程序boot,另一个flash芯片用于存储应用程序app,即两个flash芯片作用各不相同,任一flash失效,均会导致任务失败。


技术实现要素:

3.本发明所要解决的技术问题是针对现有技术存在的问题,提供一种嵌入式系统、电子设备及软件运行方法。
4.为解决上述技术问题,本发明提供一种嵌入式系统,包括:cpu、可编程器件、ddr、第一flash芯片、第二flash芯片和看门狗;第一flash芯片和第二flash芯片均由低地址到高地址分别排布引导程序boot和多个应用程序app;
5.cpu的第一输出端、第二输出端和片选端均与可编程器件连接;可编程器件的第一片选端和第二片选端分别与第一flash芯片和第二flash芯片连接;可编程器件的喂狗信号端与看门狗连接,看门狗与cpu连接,cpu与ddr、第一flash芯片和第二flash芯片连接;
6.可编程器件用于执行cpu与第一flash芯片和第二flash芯片之间的片选控制;cpu用于从当前所选的flash芯片中加载引导程序boot至ddr中并运行,并通过第一输出端向可编程器件输出boot软件喂狗信号,可编程器件根据第一预设时间段内boot软件喂狗信号的输出情况确定是否进行片选切换;cpu还用于当引导程序boot正常运行后,读取当前所选的flash芯片中存储的启动标识,加载并运行与启动标识对应的app代码区的应用程序app;并通过第二输出端向可编程器件输出app软件喂狗信号;可编程器件根据第二预设时间段内app软件喂狗信号的输出情况确定是否进行应用程序app切换。
7.为解决上述技术问题,本发明还提供一种电子设备,包括上述技术方案所述的嵌入式系统。
8.为解决上述技术问题,本发明还提供一种软件运行方法,利用上述技术方案提供的嵌入式系统实现,包括:
9.可编程器件执行cpu与第一flash芯片和第二flash芯片之间的片选控制;cpu从当前所选的flash芯片中加载引导程序boot至ddr中并运行,并通过第一输出端向可编程器件输出boot软件喂狗信号,可编程器件根据第一预设时间段内boot软件喂狗信号的输出情况确定是否进行片选切换;
10.当引导程序boot正常运行后,cpu读取当前所选的flash芯片中存储的启动标识,
加载并运行与启动标识对应的app代码区的应用程序app;并通过第二输出端向可编程器件输出app软件喂狗信号;可编程器件根据第二预设时间段内app软件喂狗信号的输出情况确定是否进行应用程序app切换。
11.本发明的有益效果是:采用双flash进行冗余备份,每个flash芯片中有独立的引导程序boot和多个应用程序app,可分别进行boot和应用程序的多级重构,提高重构效率;且多个应用程序app对应多个代码区,可灵活进行软件功能切换;通过两个io分别作为boot软件喂狗信号和app软件喂狗信号,由fpga进行综合判断控制cpu复位、flash切换及flash内app切换。本发明实施例可实现嵌入式系统的高可靠性,以及软件运行的灵活性。
12.本发明附加的方面及其优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。
附图说明
13.图1为本发明实施例提供的嵌入式系统框图;
14.图2为本发明实施例提供的软件运行方法流程图。
具体实施方式
15.以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
16.需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
17.图1为本发明实施例提供的嵌入式系统框图。如图1所示,该系统包括:cpu、可编程器件(可采用fpga或cpld,该实施例以fpga为例进行描述)、ddr、第一flash芯片、第二flash芯片和看门狗watchdog;第一flash芯片和第二flash芯片均由低地址到高地址分别排布引导程序boot和多个应用程序app。
18.其中,cpu为核心处理器,ddr为双倍速率同步动态随机存储器,用于缓存数据及运行程序,第一flash芯片和第二flash芯片用于存储代码等非掉电易失数据,看门狗watchdog用于控制cpu复位,可编程器件fpga用于实现两片flash芯片的片选及cpu复位控制。
19.cpu的第一输出端、第二输出端和片选端均与可编程器件连接;可编程器件的第一
片选端和第二片选端分别与第一flash芯片和第二flash芯片连接;可编程器件的喂狗信号端与看门狗连接,看门狗与cpu连接,cpu与ddr、第一flash芯片和第二flash芯片连接。
20.cpu与两个flash芯片之间的片选信号接到fpga,由fpga进行片选控制,控制cpu端的cs端与flash0(第一flash芯片)的第一片选端cs0或flash1(第二flash芯片)的第二片选端cs1相连。
21.cpu与fpga之间包括io 0(第一输出端)和io 1(第二输出端)两路io输出,cpu作为输出,可输出高低电平信号。fpga根据io 0和io 1信号的变化,综合判断后向外部看门狗输出喂狗信号,若看门狗一定时间(例如1.6s,由看门狗芯片特性决定)内未进行喂狗,则看门狗控制cpu复位。
22.表1
[0023][0024][0025]
两片flash芯片中的数据排布如表1(两片flash芯片采用同构策略的情况)所示。每个flash芯片由低地址到高地址分别排布boot、应用程序app1、app2、app3、
……
。系统上电后,cpu从当前所选的flash芯片中读取boot加载到ddr,运行boot;由boot根据启动标识,从flash中读取相应的app代码区加载到ddr,引导应用程序启动。
[0026]
具体地,可编程器件用于执行cpu与第一flash芯片和第二flash芯片之间的片选控制;cpu用于从当前所选的flash芯片中加载引导程序boot至ddr中并运行,并通过第一输出端向可编程器件输出boot软件喂狗信号,可编程器件根据第一预设时间段内boot软件喂狗信号的输出情况确定是否进行片选切换;cpu还用于当引导程序boot正常运行后,读取当前所选的flash芯片中存储的启动标识,加载并运行与启动标识对应的app代码区的应用程序app;并通过第二输出端向可编程器件输出app软件喂狗信号;可编程器件根据第二预设时间段内app软件喂狗信号的输出情况确定是否进行应用程序app切换。
[0027]
本发明实施例采用双flash进行冗余备份,每个flash芯片中有独立的引导程序boot和多个应用程序app,可分别进行boot和应用程序的多级重构,提高重构效率;且多个应用程序app对应多个代码区,可灵活进行软件功能切换;通过两个io分别作为boot软件喂狗信号和app软件喂狗信号,由fpga进行综合判断控制cpu复位、flash切换及flash内app切换。本发明实施例可实现嵌入式系统的高可靠性,以及软件运行的灵活性。
[0028]
可编程器件用于当第一预设时间段内所述boot软件喂狗信号输出异常时,通过所
述看门狗控制所述cpu复位,并切换当前所选flash芯片;所述cpu从切换后的flash芯片中加载引导程序boot至所述ddr中并运行,其中,第一预设时间为cpu从当前所选的flash芯片中加载引导程序boot至ddr中并运行开始计时。
[0029]
如系统加电后,fpga默认将cpu连接cs0,片选flash0。并开始喂狗,wdi喂狗信号每500ms高低电平翻转一次。启动定时器timer1,定时30s,作为flash0启动尝试等待时间。
[0030]
cpu加电后从片选的flash加载boot,boot运行后,控制io0按照第一预设周期(如每100ms)输出高低电平翻转,作为boot软件喂狗信号输出给fpga。若fpga检测到定时器timer1定时30s到达,且30s内均未收到io0的boot软件喂狗信号,说明flash0的boot未成功运行,需切换到flash1,fpga将cpu连接cs1,片选flash1,停止喂狗。cpu复位后,即从flash1加载boot继续加载流程,从而实现flash切换。
[0031]
若boot运行正常,cpu从当前所选flash芯片中读取存储的启动标识,判断应启动哪个app代码区。每个代码区尝试启动2次,若2次均启动不成功,则自动切换为其他代码区启动。例如当指定启动代码区1,但代码区1启动2次均未成功,则切换为代码区0启动,代码区0启动2次均未成功,则切换为代码区2尝试2次,若2次均未成功,则切换为代码区1继续尝试
……
依次循环尝试。
[0032]
可编程器件用于当第二预设时间段内所述app软件喂狗信号的输出异常时,通过所述看门狗控制所述cpu复位,重启当前所选应用程序app预设次数仍启动失败时,则切换为启动其他代码区对应的应用程序app,其中,所述第二预设时间为cpu当前所选的flash芯片中引导程序boot正常运行开始计时。
[0033]
app启动成功后,在ddr中设置app启动成功标识并记录app启动次数,控制io1按照第二预设周期(如每100ms)输出高低电平翻转信号,做为app软件喂狗信号。
[0034]
当开始加载启动app时,boot不再运行,因此不再有boot软件喂狗信号。fpga检测到io 0停止翻转500ms后,开始计时,若连续3s未检测到io 1翻转,说明app运行异常。此时,可能为app未加载成功,可能为app运行过程中异常跑飞,可能为app收到复位指令后停止软件喂狗,三种情况下,fpga处理措施相同,均为停止输出看门狗喂狗,进而看门狗控制cpu复位。cpu复位后继续执行boot及后续引导程序,从而实现app的切换。
[0035]
本发明实施例提供的嵌入式系统可应用于包括但不限于航天、空间应用等技术领域。以空间应用电子设备为例,本发明实施例提供的嵌入式系统可实现在轨重构,在轨重构过程包括文件上载、固化、代码区切换以及引导等步骤。
[0036]
本发明实施例提供的嵌入式系统收到重构开始指令后,开始接收上载文件。为充分利用上行链路资源,提高上载效率,可以采用分段上载模式,即将上载文件拆分为若干段,每段文件按照上行协议的格式拆分为若干包。包协议结构中包含包序号、段序号、起始包/中间包/结束包标识、包校验,以保证上载文件的完整性、正确性。
[0037]
每段代码发送结束后,地面发送“段发送结束”指令,软件app开始对该段内接收到的所有上载数据包进行校验和排序,查看是否有缺失的包,如果有缺失的包,则将缺失的包序号通过数字量下行反馈给地面。地面补发对应序号的数据包,然后再次发送“段发送结束”指令;若错误和缺失包个数大于预设数量(如大于5个)或该段的起始包或结束包错误,或段接收错误,则对该整段数据进行补注。段校验通过方可开始发送下一段代码包。
[0038]
最后一个段接收成功后,地面发送“重构数据发送完成”指令。软件开始对接收到
的整个文件进行校验,计算文件校验码,校验通过后,将重构数据烧写入flash在指定的代码区进行固化。若写入flash完成后,将flash中数据读出与缓存中的待固化文件进行比对,确认固化过程是否正常无误。
[0039]
固化完成后,通过地面发送的复位指令进行复位重启,通过复位重启指令中的参数指定启动代码区编号,选择软件的启动版本。boot可对app的尝试启动次数进行统计,若尝试启动2次不成功,则切换到另一个更新代码区(代码区1/代码区2)启动,尝试启动2次不成功,则切换到代码区0启动。循环切换尝试,保证app在任何异常情况下均可正常启动。
[0040]
对于本发明实施例中的三个应用程序app,可根据需要进行设置,兼顾可靠性和灵活性。例如:app1为原始代码区,在轨一般不对其进行重构;app2为重构代码区;app3为预置代码区,存储故障定位、系统自检等专用功能版本代码。
[0041]
本发明实施例中,第一flash芯片和第二flash芯片可采用同构策略,也可以采用异构策略。
[0042]
如第一flash芯片和第二flash芯片采用同构策略,每次上载重构时,同时对所述第一flash芯片和第二flash芯片进行固化,并对两个flash芯片中的启动标识进行同样的置位。这样无论何时,两个flash中的代码及启动标识均保持一致。当flash0发生异常切换到flash1后,将自动启动与flash0一致的app代码区。
[0043]
如第一flash芯片和第二flash芯片采用异构策略,仅对当前flash芯片进行固化,并仅对当前flash芯片中的启动标识进行置位。这样flash0和flash1中代码区代码及启动标识不一致。当切换到flash1后,默认启动app代码区为代码区0(对应app1),若需切换代码区,需发送复位指令进行切换。
[0044]
本发明实施例中,fpga也可使用cpld替代,实现相同功能即可。flash与cpu之间的接口可为spi,也可为emi等。各个定时器的时间可根据实际情况调整。flash芯片中各部分所占的地址分区可根据实际情况调整大小。
[0045]
第一flash芯片和第二flash芯片还可以包括排布于所述引导程序boot和多个应用程序app之间的操作系统。即若使用操作系统,例如vxworks,则按表2进行flash中内容排布,由低地址到高地址分别排布boot、vxworks操作系统镜像、应用程序app1、app2、app3
……
。即可实现三级重构,即app级、操作系统级和boot级,每级均可单独上载。
[0046]
flash0flash1boot0boot1vxworks0vxworks1app0-1app1-1app0-2app1-2app0-3app1-3
…………
启动标识等启动标识等
[0047]
本发明实施例还提供一种电子设备,包括上述实施例提供的嵌入式系统。
[0048]
本发明实施例还提供一种软件运行方法,利用上述技术方案提供的嵌入式系统实现,包括:
[0049]
可编程器件执行cpu与第一flash芯片和第二flash芯片之间的片选控制;cpu从当
前所选的flash芯片中加载引导程序boot至所述ddr中并运行,并通过第一输出端向可编程器件输出boot软件喂狗信号,可编程器件根据第一预设时间段内boot软件喂狗信号的输出情况确定是否进行片选切换;
[0050]
当引导程序boot正常运行后,cpu读取当前所选的flash芯片中存储的启动标识,加载并运行与启动标识对应的app代码区的应用程序app;并通过第二输出端向可编程器件输出app软件喂狗信号;可编程器件根据第二预设时间段内app软件喂狗信号的输出情况确定是否进行应用程序app切换。
[0051]
如图2所示,本发明实施例提供的软件运行方法具体执步骤包括:cpu运行流程和fpga运行流程。
[0052]
cpu运行流程:
[0053]
系统加电后,cpu从flash0启动,运行boot,boot软件控制io0每100ms高、低翻转一次。
[0054]
boot读flash0中的启动分区标识f,并判断此次复位是否为上电复位,若为上电复位,则将boot尝试启动次数k置1,app启动次数app_k置0;若非上电复位,即看门狗复位,则需根据app启动成功标志,判断之前app是否启动成功,若之前app未启动成功,即app启动成功标志为0,则将boot尝试启动次数k加1。然后清空“app启动成功”标志。boot软件根据当前flash中启动标识f和boot尝试启动次数k决定启动哪份代码区,每次复位后,尝试启动当前代码区2次,若2次均启动不成功,则切换到其他代码区尝试。boot读取flash中指定app代码区的数据,引导app启动,并控制io0停止翻转。
[0055]
app启动之后,设置“app启动成功”标志为1,“app启动次数”加1,控制io 1每100ms高、低电平翻转一次。
[0056]
复位指令带有参数可指定复位后启动哪个代码区。在app运行过程中,若收到复位指令,则判断复位指令是否需要重启当前代码区,若为启动当前代码区,则io1停止翻转;若为启动其他代码区,则通过清除复位类型标识的方式来模拟上电复位,并将拟启动的代码区标识写入flash中。并控制io1停止翻转。
[0057]
若软件运行过程中软件异常跑飞,也将导致无法控制io 1定时翻转。
[0058]
fpga运行流程:
[0059]
系统加电后,fpga默认连接flash的cs0,fpga开始喂狗,每500ms喂狗一次。并开始启动定时器timer1。
[0060]
若定时器timer1定时的30s已到,仍未检测到io0翻转,说明本flash的boot运行异常,需切换flash,因此将片选信号切换到cs1,然后停止喂狗。此时看门狗芯片控制cpu复位,并从flash1启动。
[0061]
若在定时器1未到定时的30s内,检测到io0开始翻转,则说明本flash的boot运行正常。
[0062]
从检测到io0停止翻转后开始启动timer2计时,若连续3s未检测到io1翻转,说明app运行异常,停止喂狗。此时看门狗芯片控制cpu复位,并仍从flash0启动。
[0063]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1