![]() |
(a)作為示意,圖中字母表示每一個數(shù)據(jù)區(qū)的首地址,數(shù)據(jù)區(qū)中的相對跳轉(zhuǎn)地址指向其相應(yīng)的地址位置。在實(shí)際數(shù)據(jù)區(qū)中地址字節(jié)應(yīng)為相對量。
![]() |
4.2 監(jiān)控系統(tǒng)的程序?qū)崿F(xiàn)
監(jiān)控系統(tǒng)的主要程序流程見圖7所示。在程序正常運(yùn)行的情況下,唯一能夠打破此數(shù)據(jù)結(jié)構(gòu)圖而出現(xiàn)例外的只有一種情況,即主程序運(yùn)行過程中出現(xiàn)了中斷服務(wù)程序。而在每一個中斷服務(wù)程序起始后即會有一“哨卡”提供其特征碼,以使監(jiān)控程序在當(dāng)前數(shù)據(jù)區(qū)找不到對應(yīng)的數(shù)碼時,能為中斷服務(wù)程序的跟蹤提供一個入口。但監(jiān)控程序一定要將中斷入口前的“路標(biāo)碼”數(shù)據(jù)庫地址壓棧。以使中斷服務(wù)程序結(jié)束時能接上前面的“連環(huán)套”。
監(jiān)控系統(tǒng)設(shè)置定時器作為主系統(tǒng)的軟看門狗。監(jiān)控CPU每接收到一次被刷新的“路標(biāo)碼”,就將軟定時器復(fù)位一次,若定時器溢出則表示“路標(biāo)碼”已經(jīng)有過長時間未被刷新?烧J(rèn)為原系統(tǒng)出現(xiàn)了故障。對于多任務(wù)系統(tǒng),可以設(shè)置一個公共時基,在每一次時基定時中斷中給每一任務(wù)的定時時鐘加1(每一個任務(wù)有一個獨(dú)立的時鐘寄存器,存放累積的時基個數(shù)),并判斷每一任務(wù)的時基數(shù)是否大于設(shè)定的數(shù)值,若大于即表示該任務(wù)已超過看門狗定時周期,該任務(wù)出現(xiàn)了故障需要處理。依此可彌補(bǔ)硬件定時器數(shù)量上的不足,也簡化了程序。在每一次刷新“路標(biāo)碼”時會將相應(yīng)任務(wù)的時鐘寄存器清零,即將此看門狗復(fù)位。
另外,路標(biāo)碼在數(shù)據(jù)庫中的轉(zhuǎn)移范圍若超出了相對尋址范圍,例如程序在完成一個大循環(huán)后的“哨卡”地址,可由專門的長轉(zhuǎn)移標(biāo)志提供相應(yīng)的入口地址。
![]() 圖7 監(jiān)控系統(tǒng)核心程序流程圖 |
分析監(jiān)控程序的流程圖,會發(fā)現(xiàn)實(shí)現(xiàn)監(jiān)控程序并不困難。在此基礎(chǔ)上,在不同的系統(tǒng)開發(fā)中還可有許多應(yīng)用,例如將主系統(tǒng)重要寄存器與程序指針在“哨卡”處作刷新保存,監(jiān)控程序?qū)ⅰ吧诳ā睜顟B(tài)緩存一步,并保存前一“哨卡”地址。一旦出現(xiàn)問題,可將程序返回該“哨卡”處恢復(fù)原來狀態(tài)繼續(xù)運(yùn)行。具體實(shí)現(xiàn)方法在此不作詳述。
5 監(jiān)控系統(tǒng)的完善
前面以一種簡單的情況和工作方式說明了監(jiān)控系統(tǒng)的運(yùn)行過程。然而在實(shí)際運(yùn)行過程中,由于監(jiān)控過程全部自動完成,監(jiān)控系統(tǒng)工作的穩(wěn)定性和嚴(yán)密性有重要的意義。主系統(tǒng)在運(yùn)行過程中發(fā)生數(shù)據(jù)突變或者出現(xiàn)程序在相鄰“哨卡”之間的非法跳變,此時用以上的簡單跟蹤方式難以直接察覺。因此,在監(jiān)控CPU與主系統(tǒng)之間的數(shù)據(jù)信息交流是必要的。另外,要保證“哨卡”設(shè)置得嚴(yán)密,必須保證監(jiān)控CPU有比主CPU快得多的運(yùn)行速度。下面簡要探討一下對監(jiān)控系統(tǒng)的完善方案。
5.1 對寄存器數(shù)據(jù)的監(jiān)控
在程序運(yùn)行過程中的數(shù)據(jù)突變和程序計(jì)數(shù)指針的非法跳變最終影響的是寄存器的數(shù)據(jù)值。在相鄰“哨卡”之間不會有分支、循環(huán)語句,僅會涉及到置數(shù)、傳送、運(yùn)算、接口操作,對這些流程的破壞也最終反映到寄存器數(shù)據(jù)的改變上。監(jiān)控系統(tǒng)要探知這些寄存器數(shù)據(jù)的變化只有通過主系統(tǒng)與監(jiān)控系統(tǒng)的信息交換。提高系統(tǒng)可靠性是以降低原系統(tǒng)實(shí)際運(yùn)行速度為代價的,在“哨卡”程序中輸出相關(guān)寄存器內(nèi)容,過程如下:
在“哨卡”程序中,首先向監(jiān)控CPU傳送“哨卡”標(biāo)志號;
接著依次傳送相關(guān)寄存器的內(nèi)容或特定的數(shù)據(jù);
最后輸出立即數(shù)#0,作為當(dāng)前“哨卡”數(shù)據(jù)傳送結(jié)束標(biāo)志。
在每個哨卡數(shù)據(jù)傳送過程中,由于監(jiān)控系統(tǒng)是與主系統(tǒng)配合設(shè)計(jì)的,并不是獨(dú)立可脫離的控制模塊,因此監(jiān)控系統(tǒng)在特定的各個標(biāo)志號的“哨卡”所接收到的數(shù)據(jù),監(jiān)控系統(tǒng)已可預(yù)知該數(shù)據(jù)來源,可以作相應(yīng)的靈活處理,或是為下一“哨卡”要得到的寄存器數(shù)據(jù)作準(zhǔn)備,或是與上一“哨卡”儲備的相關(guān)寄存器數(shù)據(jù)作比較,因此寄存器數(shù)據(jù)的傳送數(shù)量也是靈活可變的。開發(fā)人員在作系統(tǒng)設(shè)計(jì)時,可以對原系統(tǒng)的數(shù)據(jù)內(nèi)容作嚴(yán)密處理,還可將有關(guān)寄存器數(shù)據(jù)作預(yù)先運(yùn)算后輸出給監(jiān)控CPU,以保證寄存器內(nèi)容的準(zhǔn)確性并簡化步驟。相應(yīng)于監(jiān)控系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的改變,每一“哨卡”數(shù)據(jù)項(xiàng)中增加了一個字節(jié),作為該“哨卡”傳送數(shù)據(jù)的RAM存放區(qū)地址代碼。由于寄存器內(nèi)容在監(jiān)控CPU的RAM中只作暫存,可互相覆蓋,并不需消耗多大RAM空間。
簡略地說,監(jiān)控系統(tǒng)針對主系統(tǒng)從各“哨卡”傳送的數(shù)據(jù)以中斷方式所作出如下的響應(yīng):
(1)一旦有數(shù)據(jù)刷新#0標(biāo)志,即表示有新的“哨卡”標(biāo)志數(shù)據(jù)從主系統(tǒng)輸出,在對標(biāo)志號進(jìn)行判斷無誤之后,即準(zhǔn)備進(jìn)行寄存器數(shù)據(jù)的判斷。
(2)監(jiān)控CPU捕捉到接口的刷新數(shù)據(jù)信號后(在圖8中,可由MSP430的10腳TA0判別刷新信號;圖2中可由C2051的6腳判別刷新信號),在其中斷程序中,將接口傳送數(shù)據(jù)存于該“路標(biāo)碼”數(shù)據(jù)項(xiàng)所確定的RAM地址,依次存放。監(jiān)控系統(tǒng)對這些數(shù)據(jù)進(jìn)行簡單的運(yùn)算或比較。在處理結(jié)果與預(yù)期不符時采取相應(yīng)的恢復(fù)或拯救措施。
有了對寄存器數(shù)據(jù)的監(jiān)控,可不必對原系統(tǒng)設(shè)置過密的“哨卡”,并可防止不是由程序計(jì)數(shù)指針的變化造成的寄存器數(shù)據(jù)值的突變。
5.2 監(jiān)控過程中運(yùn)行速度的配合
數(shù)據(jù)的傳送過程中,主系統(tǒng)程序相當(dāng)于在作延時操作,并沒有額外加重監(jiān)控系統(tǒng)負(fù)擔(dān),只影響了主系統(tǒng)運(yùn)行速度,在設(shè)計(jì)時應(yīng)作考慮。如果有中斷在此過程中發(fā)生,監(jiān)控系統(tǒng)亦能判別(參照圖7的中斷部分)。
為保證監(jiān)控CPU在主系統(tǒng)下一“哨卡”標(biāo)志號發(fā)出之前將當(dāng)前“哨卡”程序全部處理完,對“哨卡”的設(shè)置間隔是有限制的。主系統(tǒng)程序中“哨卡”的設(shè)置應(yīng)考慮到監(jiān)控CPU的程序負(fù)擔(dān)。必要時如果系統(tǒng)允許,甚至可為監(jiān)控系統(tǒng)作延時操作,以安置“哨卡”程序。
可以看出,完成系統(tǒng)監(jiān)控的監(jiān)控CPU需要有足夠快的速度,一般來說,監(jiān)控程序的一個循環(huán)需要二十多條語句或稍長。應(yīng)用于低電壓系統(tǒng),這里推薦一種性能好、速度快、低價格、低功耗的RISC處理器?/FONT>TI公司最新推出的MSP430。其指令周期僅125ns,片內(nèi)4KB+256B FLASH ROM(MSP430 F112)。假設(shè)主系統(tǒng)采用MCS-51系列,使用6MH z晶振時,指令周期為2μs,則主系統(tǒng)一條指令的執(zhí)行時間監(jiān)控系統(tǒng)可至少執(zhí)行16條指令。而且MSP430自帶硬件看門狗,另外僅需一片電壓監(jiān)控芯片即可簡單地設(shè)計(jì)出整個監(jiān)控硬件系統(tǒng)如圖8所示。








