本专利属于嵌入式系统、自动化控制领域,涉及一种基于嵌入式控制系统输出跑飞后的恢复方法。
背景技术:
嵌入式控制系统广泛应用于医疗、电信、航天航空、汽车制造、办公、家电等多种领域,能够控制、增强、监控和管理几乎所有的高科技设备。
由于其应用范围之广,所以会常处于恶劣的使用环境中,例如高低温、高压、高频等,程序容易受到电磁干扰而跑飞。
基于状态机设计的嵌入式实时控制系统,软件通常采用指令冗余和陷阱技术来捕捉跑飞的程序,以及设置看门狗使软件程序后能够重新复位。在采取以上措施后,嵌入式控制系统的稳定性和可靠性有所提高,但在实际使用过程中仍然存在缺点,如复位的程序使得状态机从初始状态开始执行,不能直接回到之前正常的子状态中,导致输出中断,嵌入式控制系统的任务被破坏。
技术实现要素:
本发明公开了一种提高嵌入式控制系统输出可靠性的方法,当软件跑飞后,利用常见的指令冗余和软件陷阱以及看门狗技术使嵌入式控制系统复位到程序入口处后,通过该方法能够使系统恢复到正常的状态机中,并通过外部CPLD芯片内的控制逻辑稳定措施,保证在系统恢复期间,嵌入式系统状态机的输出信号保持在软件跑飞前的正常状态,使得控制系统的输出在软件跑飞前、跑飞时、恢复后保持持续稳定。
本发明为了达到上述目的,采取的技术方案是一种提高嵌入式控制系统输出可靠性的方法,其特征在于,包括以下步骤:
步骤一:数据备份
在嵌入式控制系统的状态机运行时,在主函数中实时将当前状态机的状态采用冗余备份的方法进行备份,将备份数据分两遍存储在RAM区的低地址段和高地址段,每组数据以原码和补码形式各存储一遍,备份数据帧格式参见表1,数据包括当前运行的子状态,收到的命令,采样的AD数据、控制输出命令;
表1
步骤二:复位方式判断
每当嵌入式控制系统程序发生跑飞,并通过看门狗或软件陷阱进行复位后,嵌入式控制系统从程序入口处开始运行,根据上电标示判断是上电复位还是异常复位,若是异常复位,则提取备份的数据并根据备份的数据进行状态恢复;若是上电复位,则系统按照正常的状态机运行。
进一步的,步骤二中的提取备份的数据的步骤具体为:基于状态机设计的嵌入式控制系统,判定复位前的存储在低地址段和高地址段的备份数据有效性,
步骤二中的提取有效的备份数据的步骤具体为:基于状态机设计的嵌入式控制系统,判定复位前的存储在低地址段和高地址段的备份数据有效性,具体为:
1)计算低地址段中备份原码数据的校验和,若与低地址段中存储的校验和相同,则进行帧头校验,跳转到2);否则判定低地址段中备份数据无效,跳转到4);
2)判定低地址段中备份数据的帧头与定义的帧头是否一致,一致则进行补码校验;不一致则判定低地址段中备份数据无效,跳转到4);
3)判定低地址段中备份数据的补码校验是否正确,正确则取地址段中备份数据作为状态机恢复的依据,即可进行状态恢复;不正确则判定低地址段中备份数据无效,跳转到4);
4)计算存储在高地址段中备份数据的校验和,若与高址段中存储的校验和相同,则进行帧头校验,跳转到5);否则判定高址段中备份数据无效,本次数据恢复失败;
5)判定高址段中备份数据的帧头与定义的帧头是否一致,一致则进行补码校验,跳转到6);不一致则判定高址段中备份数据无效,本次数据恢复失败;
6)判定高址段中备份数据的反码校验是否正确,正确则取高址段中备份数据作为状态机恢复的依据,即可进行状态恢复;不正确则判定高址段中备份数据无效,本次数据恢复失败。
进一步的,还包括输出锁定步骤:
通过CPLD将嵌入式系统状态机输出的控制信号锁定到上一个正确的状态,控制信号采用正反码输出,将正反码分别写入CPLD中2个不连续的特定地址寄存器中,由在CPLD中设计的D锁存器锁存并校验正确后,再输出最终控制信号。
进一步的,根据上电标示判断是上电复位还是异常复位的具体步骤为:
1)判断外部RAM中地址A和地址B中的上电标示是否为预先设定的值,是,则说明是异常复位,跳转到2);否则认为是上电启动,跳转到5);
2)系统进行状态恢复;
3)状态恢复成功,则跳转到4);不成功,则跳转到6);
4)系统部分初始化,程序跳转到系统复位前的子状态中继续运行,跳转到7);
5)在外部RAM的地址A和地址B中设定上电标示的值,则跳转到6);
6)系统全面初始化,即按照初次上电开始运行,则跳转到7);
7)程序在正常的状态机中运行。
本发明易于理解和实现,在现有大功率整流器嵌入式控制系统抗干扰措施上增加了状态机恢复和输出锁定功能,提高了电源系统的可靠性,减少了由于输出控制信号错误而导致被控设备损坏的概率,节省了产品资金和维修成本。
本发明控制更加便捷,其拓展性能强,若需应用在不同的嵌入式系统中(如单片机、DSP、ARM、FPGA等系统),只需对代码进行修改与完善,便可进行移植,具有良好的应用前景和经济价值。
附图说明
图1复位方式判断流程图;
图2数据有效性判断方法;
图3输出控制信号锁定。
具体实施方式
包括以下步骤:
步骤一:数据备份
在嵌入式控制系统的状态机运行时,在主函数中实时将当前状态机的状态采用冗余备份的方法进行备份,将备份数据分两遍存储在RAM区的低地址段和高地址段,每组数据以原码和补码形式各存储一遍,备份数据帧格式参见表1,数据原码包括当前运行的子状态,收到的上位机命令,采样的AD数据、开关机信号状态;
表1
步骤二:复位方式判断
每当嵌入式控制系统程序发生跑飞,并通过看门狗或软件陷阱进行复位后,嵌入式控制系统从程序入口处开始运行,根据上电标示判断是上电复位还是异常复位,若是异常复位,则提取备份的数据并根据备份的数据进行状态恢复;若是上电复位,则系统按照正常的状态机运行。
还包括输出锁定步骤:
通过CPLD将嵌入式系统状态机输出的控制信号锁定到上一个正确的状态,控制信号采用正反码输出,将正反码分别写入CPLD中2个不连续的特定地址寄存器中,由在CPLD中设计 的D锁存器锁存并校验正确后,再输出最终控制信号。
进一步的,步骤二中的提取备份的数据的步骤具体为:基于状态机设计的嵌入式控制系统,判定复位前的存储在低地址段和高地址段的备份数据有效性,
1)计算低地址段中备份原码数据的校验和,若与低地址段中存储的校验和相同,则进行帧头校验,跳转到2);否则判定低地址段中备份数据无效,跳转到4);
2)判定低地址段中备份数据的帧头与定义的帧头是否一致,一致则进行补码校验;不一致则判定低地址段中备份数据无效,跳转到4);
3)判定低地址段中备份数据的补码校验是否正确,正确则取地址段中备份数据作为状态机恢复的依据,即可进行状态恢复;不正确则判定低地址段中备份数据无效,跳转到4);
4)计算存储在高地址段中备份数据的校验和,若与高址段中存储的校验和相同,则进行帧头校验,跳转到5);否则判定高址段中备份数据无效,本次数据恢复失败;
5)判定高址段中备份数据的帧头与定义的帧头是否一致,一致则进行补码校验,跳转到6);不一致则判定高址段中备份数据无效,本次数据恢复失败;
6)判定高址段中备份数据的反码校验是否正确,正确则取高址段中备份数据作为状态机恢复的依据,即可进行状态恢复;不正确则判定高址段中备份数据无效,本次数据恢复失败。
根据上电标示判断是上电复位还是异常复位的具体步骤为:
1)判断外部RAM中地址A和地址B中的上电标示是否为预先设定的值,是,则说明是异常复位,跳转到2);否则认为是上电启动,跳转到5);
2)系统进行状态恢复;
3)状态恢复成功,则跳转到4);不成功,则跳转到6);
4)系统部分初始化,程序跳转到系统复位前的子状态中继续运行,跳转到7);
5)在外部RAM的地址A和地址B中设定上电标示的值,则跳转到6);
6)系统全面初始化,即按照初次上电开始运行,则跳转到7);
7)程序在正常的状态机中运行。
具体实施例:
备份流程
1)将备份数据区域的起始地址设置为外部RAM的0x0020和0x00f0;
2)采集备份数据,数据包括当前运行的子状态,收到的命令,采样的AD数据、控制输出命令,帧格式如表1所示;
3)计算校验和,进位舍去;
4)帧头设置为0x55,按照表1的帧格式将数据原码存储在指定地址;
5)2个地址段的备份是否都完成,否,跳转到1;是完成则回到主循环。
图2复位方式判断
1)系统从程序入口处00h开始运行;
2)判断外部RAM地址0000h和0001h中的上电标示是否预先设定的55h和AAh,是,跳转到3;否则跳转到6);
3)系统进行状态恢复;
4)状态恢复成功,则跳转到5);不成功,则跳转到7);
5)系统部分初始化,程序跳转到系统复位前的子状态中继续运行,跳转到8);
6)在外部RAM的地址0000h和0001h中建立上电标示55h和AAh,跳转到7);
7)系统全面初始化,即按照初次上电开始运行,则跳转到8);
8)程序在正常的状态机中运行。