本專利屬于嵌入式系統(tǒng)、自動化控制領(lǐng)域,涉及一種基于嵌入式控制系統(tǒng)輸出跑飛后的恢復方法。
背景技術(shù):
嵌入式控制系統(tǒng)廣泛應用于醫(yī)療、電信、航天航空、汽車制造、辦公、家電等多種領(lǐng)域,能夠控制、增強、監(jiān)控和管理幾乎所有的高科技設備。
由于其應用范圍之廣,所以會常處于惡劣的使用環(huán)境中,例如高低溫、高壓、高頻等,程序容易受到電磁干擾而跑飛。
基于狀態(tài)機設計的嵌入式實時控制系統(tǒng),軟件通常采用指令冗余和陷阱技術(shù)來捕捉跑飛的程序,以及設置看門狗使軟件程序后能夠重新復位。在采取以上措施后,嵌入式控制系統(tǒng)的穩(wěn)定性和可靠性有所提高,但在實際使用過程中仍然存在缺點,如復位的程序使得狀態(tài)機從初始狀態(tài)開始執(zhí)行,不能直接回到之前正常的子狀態(tài)中,導致輸出中斷,嵌入式控制系統(tǒng)的任務被破壞。
技術(shù)實現(xiàn)要素:
本發(fā)明公開了一種提高嵌入式控制系統(tǒng)輸出可靠性的方法,當軟件跑飛后,利用常見的指令冗余和軟件陷阱以及看門狗技術(shù)使嵌入式控制系統(tǒng)復位到程序入口處后,通過該方法能夠使系統(tǒng)恢復到正常的狀態(tài)機中,并通過外部CPLD芯片內(nèi)的控制邏輯穩(wěn)定措施,保證在系統(tǒng)恢復期間,嵌入式系統(tǒng)狀態(tài)機的輸出信號保持在軟件跑飛前的正常狀態(tài),使得控制系統(tǒng)的輸出在軟件跑飛前、跑飛時、恢復后保持持續(xù)穩(wěn)定。
本發(fā)明為了達到上述目的,采取的技術(shù)方案是一種提高嵌入式控制系統(tǒng)輸出可靠性的方法,其特征在于,包括以下步驟:
步驟一:數(shù)據(jù)備份
在嵌入式控制系統(tǒng)的狀態(tài)機運行時,在主函數(shù)中實時將當前狀態(tài)機的狀態(tài)采用冗余備份的方法進行備份,將備份數(shù)據(jù)分兩遍存儲在RAM區(qū)的低地址段和高地址段,每組數(shù)據(jù)以原碼和補碼形式各存儲一遍,備份數(shù)據(jù)幀格式參見表1,數(shù)據(jù)包括當前運行的子狀態(tài),收到的命令,采樣的AD數(shù)據(jù)、控制輸出命令;
表1
步驟二:復位方式判斷
每當嵌入式控制系統(tǒng)程序發(fā)生跑飛,并通過看門狗或軟件陷阱進行復位后,嵌入式控制系統(tǒng)從程序入口處開始運行,根據(jù)上電標示判斷是上電復位還是異常復位,若是異常復位,則提取備份的數(shù)據(jù)并根據(jù)備份的數(shù)據(jù)進行狀態(tài)恢復;若是上電復位,則系統(tǒng)按照正常的狀態(tài)機運行。
進一步的,步驟二中的提取備份的數(shù)據(jù)的步驟具體為:基于狀態(tài)機設計的嵌入式控制系統(tǒng),判定復位前的存儲在低地址段和高地址段的備份數(shù)據(jù)有效性,
步驟二中的提取有效的備份數(shù)據(jù)的步驟具體為:基于狀態(tài)機設計的嵌入式控制系統(tǒng),判定復位前的存儲在低地址段和高地址段的備份數(shù)據(jù)有效性,具體為:
1)計算低地址段中備份原碼數(shù)據(jù)的校驗和,若與低地址段中存儲的校驗和相同,則進行幀頭校驗,跳轉(zhuǎn)到2);否則判定低地址段中備份數(shù)據(jù)無效,跳轉(zhuǎn)到4);
2)判定低地址段中備份數(shù)據(jù)的幀頭與定義的幀頭是否一致,一致則進行補碼校驗;不一致則判定低地址段中備份數(shù)據(jù)無效,跳轉(zhuǎn)到4);
3)判定低地址段中備份數(shù)據(jù)的補碼校驗是否正確,正確則取地址段中備份數(shù)據(jù)作為狀態(tài)機恢復的依據(jù),即可進行狀態(tài)恢復;不正確則判定低地址段中備份數(shù)據(jù)無效,跳轉(zhuǎn)到4);
4)計算存儲在高地址段中備份數(shù)據(jù)的校驗和,若與高址段中存儲的校驗和相同,則進行幀頭校驗,跳轉(zhuǎn)到5);否則判定高址段中備份數(shù)據(jù)無效,本次數(shù)據(jù)恢復失??;
5)判定高址段中備份數(shù)據(jù)的幀頭與定義的幀頭是否一致,一致則進行補碼校驗,跳轉(zhuǎn)到6);不一致則判定高址段中備份數(shù)據(jù)無效,本次數(shù)據(jù)恢復失?。?/p>
6)判定高址段中備份數(shù)據(jù)的反碼校驗是否正確,正確則取高址段中備份數(shù)據(jù)作為狀態(tài)機恢復的依據(jù),即可進行狀態(tài)恢復;不正確則判定高址段中備份數(shù)據(jù)無效,本次數(shù)據(jù)恢復失敗。
進一步的,還包括輸出鎖定步驟:
通過CPLD將嵌入式系統(tǒng)狀態(tài)機輸出的控制信號鎖定到上一個正確的狀態(tài),控制信號采用正反碼輸出,將正反碼分別寫入CPLD中2個不連續(xù)的特定地址寄存器中,由在CPLD中設計的D鎖存器鎖存并校驗正確后,再輸出最終控制信號。
進一步的,根據(jù)上電標示判斷是上電復位還是異常復位的具體步驟為:
1)判斷外部RAM中地址A和地址B中的上電標示是否為預先設定的值,是,則說明是異常復位,跳轉(zhuǎn)到2);否則認為是上電啟動,跳轉(zhuǎn)到5);
2)系統(tǒng)進行狀態(tài)恢復;
3)狀態(tài)恢復成功,則跳轉(zhuǎn)到4);不成功,則跳轉(zhuǎn)到6);
4)系統(tǒng)部分初始化,程序跳轉(zhuǎn)到系統(tǒng)復位前的子狀態(tài)中繼續(xù)運行,跳轉(zhuǎn)到7);
5)在外部RAM的地址A和地址B中設定上電標示的值,則跳轉(zhuǎn)到6);
6)系統(tǒng)全面初始化,即按照初次上電開始運行,則跳轉(zhuǎn)到7);
7)程序在正常的狀態(tài)機中運行。
本發(fā)明易于理解和實現(xiàn),在現(xiàn)有大功率整流器嵌入式控制系統(tǒng)抗干擾措施上增加了狀態(tài)機恢復和輸出鎖定功能,提高了電源系統(tǒng)的可靠性,減少了由于輸出控制信號錯誤而導致被控設備損壞的概率,節(jié)省了產(chǎn)品資金和維修成本。
本發(fā)明控制更加便捷,其拓展性能強,若需應用在不同的嵌入式系統(tǒng)中(如單片機、DSP、ARM、FPGA等系統(tǒng)),只需對代碼進行修改與完善,便可進行移植,具有良好的應用前景和經(jīng)濟價值。
附圖說明
圖1復位方式判斷流程圖;
圖2數(shù)據(jù)有效性判斷方法;
圖3輸出控制信號鎖定。
具體實施方式
包括以下步驟:
步驟一:數(shù)據(jù)備份
在嵌入式控制系統(tǒng)的狀態(tài)機運行時,在主函數(shù)中實時將當前狀態(tài)機的狀態(tài)采用冗余備份的方法進行備份,將備份數(shù)據(jù)分兩遍存儲在RAM區(qū)的低地址段和高地址段,每組數(shù)據(jù)以原碼和補碼形式各存儲一遍,備份數(shù)據(jù)幀格式參見表1,數(shù)據(jù)原碼包括當前運行的子狀態(tài),收到的上位機命令,采樣的AD數(shù)據(jù)、開關(guān)機信號狀態(tài);
表1
步驟二:復位方式判斷
每當嵌入式控制系統(tǒng)程序發(fā)生跑飛,并通過看門狗或軟件陷阱進行復位后,嵌入式控制系統(tǒng)從程序入口處開始運行,根據(jù)上電標示判斷是上電復位還是異常復位,若是異常復位,則提取備份的數(shù)據(jù)并根據(jù)備份的數(shù)據(jù)進行狀態(tài)恢復;若是上電復位,則系統(tǒng)按照正常的狀態(tài)機運行。
還包括輸出鎖定步驟:
通過CPLD將嵌入式系統(tǒng)狀態(tài)機輸出的控制信號鎖定到上一個正確的狀態(tài),控制信號采用正反碼輸出,將正反碼分別寫入CPLD中2個不連續(xù)的特定地址寄存器中,由在CPLD中設計 的D鎖存器鎖存并校驗正確后,再輸出最終控制信號。
進一步的,步驟二中的提取備份的數(shù)據(jù)的步驟具體為:基于狀態(tài)機設計的嵌入式控制系統(tǒng),判定復位前的存儲在低地址段和高地址段的備份數(shù)據(jù)有效性,
1)計算低地址段中備份原碼數(shù)據(jù)的校驗和,若與低地址段中存儲的校驗和相同,則進行幀頭校驗,跳轉(zhuǎn)到2);否則判定低地址段中備份數(shù)據(jù)無效,跳轉(zhuǎn)到4);
2)判定低地址段中備份數(shù)據(jù)的幀頭與定義的幀頭是否一致,一致則進行補碼校驗;不一致則判定低地址段中備份數(shù)據(jù)無效,跳轉(zhuǎn)到4);
3)判定低地址段中備份數(shù)據(jù)的補碼校驗是否正確,正確則取地址段中備份數(shù)據(jù)作為狀態(tài)機恢復的依據(jù),即可進行狀態(tài)恢復;不正確則判定低地址段中備份數(shù)據(jù)無效,跳轉(zhuǎn)到4);
4)計算存儲在高地址段中備份數(shù)據(jù)的校驗和,若與高址段中存儲的校驗和相同,則進行幀頭校驗,跳轉(zhuǎn)到5);否則判定高址段中備份數(shù)據(jù)無效,本次數(shù)據(jù)恢復失??;
5)判定高址段中備份數(shù)據(jù)的幀頭與定義的幀頭是否一致,一致則進行補碼校驗,跳轉(zhuǎn)到6);不一致則判定高址段中備份數(shù)據(jù)無效,本次數(shù)據(jù)恢復失敗;
6)判定高址段中備份數(shù)據(jù)的反碼校驗是否正確,正確則取高址段中備份數(shù)據(jù)作為狀態(tài)機恢復的依據(jù),即可進行狀態(tài)恢復;不正確則判定高址段中備份數(shù)據(jù)無效,本次數(shù)據(jù)恢復失敗。
根據(jù)上電標示判斷是上電復位還是異常復位的具體步驟為:
1)判斷外部RAM中地址A和地址B中的上電標示是否為預先設定的值,是,則說明是異常復位,跳轉(zhuǎn)到2);否則認為是上電啟動,跳轉(zhuǎn)到5);
2)系統(tǒng)進行狀態(tài)恢復;
3)狀態(tài)恢復成功,則跳轉(zhuǎn)到4);不成功,則跳轉(zhuǎn)到6);
4)系統(tǒng)部分初始化,程序跳轉(zhuǎn)到系統(tǒng)復位前的子狀態(tài)中繼續(xù)運行,跳轉(zhuǎn)到7);
5)在外部RAM的地址A和地址B中設定上電標示的值,則跳轉(zhuǎn)到6);
6)系統(tǒng)全面初始化,即按照初次上電開始運行,則跳轉(zhuǎn)到7);
7)程序在正常的狀態(tài)機中運行。
具體實施例:
備份流程
1)將備份數(shù)據(jù)區(qū)域的起始地址設置為外部RAM的0x0020和0x00f0;
2)采集備份數(shù)據(jù),數(shù)據(jù)包括當前運行的子狀態(tài),收到的命令,采樣的AD數(shù)據(jù)、控制輸出命令,幀格式如表1所示;
3)計算校驗和,進位舍去;
4)幀頭設置為0x55,按照表1的幀格式將數(shù)據(jù)原碼存儲在指定地址;
5)2個地址段的備份是否都完成,否,跳轉(zhuǎn)到1;是完成則回到主循環(huán)。
圖2復位方式判斷
1)系統(tǒng)從程序入口處00h開始運行;
2)判斷外部RAM地址0000h和0001h中的上電標示是否預先設定的55h和AAh,是,跳轉(zhuǎn)到3;否則跳轉(zhuǎn)到6);
3)系統(tǒng)進行狀態(tài)恢復;
4)狀態(tài)恢復成功,則跳轉(zhuǎn)到5);不成功,則跳轉(zhuǎn)到7);
5)系統(tǒng)部分初始化,程序跳轉(zhuǎn)到系統(tǒng)復位前的子狀態(tài)中繼續(xù)運行,跳轉(zhuǎn)到8);
6)在外部RAM的地址0000h和0001h中建立上電標示55h和AAh,跳轉(zhuǎn)到7);
7)系統(tǒng)全面初始化,即按照初次上電開始運行,則跳轉(zhuǎn)到8);
8)程序在正常的狀態(tài)機中運行。