<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于MCS-96單片機控制系統的程序失控防范

基于MCS-96單片機控制系統的程序失控防范

作者: 時(shí)間:2012-02-15 來(lái)源:網(wǎng)絡(luò ) 收藏

3.2 使受擾程序快速重入正常運行狀態(tài)的方法

  系統軟件是由完成各種功能的程序組成的,因此可分成若干個(gè)功能模塊。為了能使程序快速重入系統的正常運行狀態(tài),首先要將系統軟件編制成模塊化結構,并盡可能的將其細分為若干功能模塊,每個(gè)功能模塊在運行中需具有寫(xiě)入和記錄功能,即設置RAM區的有效標志;記錄編號和首地址;記錄關(guān)鍵的又不可重新獲得的數據;模塊還應具有給運行監視系統發(fā)脈沖的功能等。為判斷程序是否跑飛,要求在每個(gè)功能模塊的結尾處將指定單元中保存的標志與本功能模塊預先設置的標志進(jìn)行對比。若不同,則程序跑飛,然后將它恢復到指定單元中保存的標志所對應的功能模塊去重新執行;若相同,則運行正常。對于功能模塊中的程序跑飛,可根據具體情況對結果的合理性進(jìn)行分析和判斷。若不合理,則返回重新執行;若合理,則進(jìn)入下一個(gè)功能模塊。具有這種功能的程序流程圖如圖3—2所示。

3.3 利用數據冗余技術(shù)實(shí)現RAM內容自救的方法

  為了保證系統實(shí)現無(wú)擾動(dòng)重入正常運行狀態(tài),必須保證重要數據的正確性。實(shí)現這一目的的方法是采用數據冗余技術(shù)。

  在實(shí)時(shí)控制過(guò)程中,干擾會(huì )造成RAM中的數據被沖毀。數據被沖毀的情形,一般有如下3類(lèi):1)整個(gè)RAM區數據被沖毀;2)RAM中某一片數據被沖毀; 3)個(gè)別數據被沖毀。由于RAM中保存的是各種原始數據、標志、變量等,如果被破壞,會(huì )造成系統出錯或無(wú)法運行。不過(guò),對幾乎所有的單片機實(shí)時(shí)控制系統而言,RAM中的大部分內容是為了進(jìn)行分析、計算、比較而臨時(shí)寄存的,不允許丟失的數據也只占RAM內容的極少部分。在這種情況下,除了那些不允許丟失的數據外,其余大部分內容允許短時(shí)被破壞,最多有過(guò)引起系統一個(gè)很短時(shí)間的波動(dòng),但很快就能恢復正常。因此,在實(shí)時(shí)軟件中,只要注意對少數不允許丟失的數據進(jìn)行保護即可。常用方法有“校驗法”和“設標法”。這兩種方法各有千秋,校驗法比較繁瑣,但查錯的置信度高;設標法簡(jiǎn)單,但對數據表中個(gè)別數據被沖毀的情況無(wú)能為力。在編程中應綜合使用。具體做法是:1)將RAM工作區重要區域的始端和尾端各設置一個(gè)標志碼“0”或“1”;2)對RAM中固定不變的數據表格設置校驗字。

  在程序執行過(guò)程中,每隔一定時(shí)間通過(guò)事先設計的查錯程序來(lái)校驗各標志碼是否正常,如果不正常,則利用數據冗余技術(shù)通過(guò)抗干擾處理程序來(lái)進(jìn)行修正。冗余設計的一般原則是:在RAM區中相隔盡可能遠且遠離堆棧區的不同區域將數據備份3份,當讀取數據時(shí),把3份數據備份相比較,采用3取 2的表決原則,確保數據的正確性。

3.4 鎖定輸出口的方法

  為了防止失控程序對輸出口發(fā)生非正常操作,引起控制量產(chǎn)生波動(dòng)和破壞系統的安全性,必須對輸出口的操作進(jìn)行嚴格的審查。解決的辦法是硬件上采用鎖定控制器,軟件上采用功能塊標志和口令字。

  鎖定控制器由兩個(gè)D觸發(fā)器來(lái)實(shí)現,如圖3—3所示。

  平時(shí)兩個(gè)鎖定控制器的輸出端Q1、Q2均為低電平,而且Q1、Q2只要有一個(gè)信號是低電平,輸出通道就處于被封鎖狀態(tài)。只有Q1、Q2同時(shí)為高電平時(shí),該通道才被打開(kāi)。為了防止程序對輸出通道的非法寫(xiě)入,平時(shí)程序通過(guò)端口控制信號和置Q1、 Q2為低電平來(lái)關(guān)閉輸出通道。而僅當需要輸出時(shí),程序通過(guò)端口控制信號和置Q1、Q2為高電平打開(kāi)輸出通道。程序輸出時(shí),需先給出口令字。輸出模塊程序流程圖如圖3—4所示。

4 結束語(yǔ)

  采用上述這些措施可以有效地提高系統運行的可靠性,獲得令人滿(mǎn)意的控制效果,并且稍做修改即可用于其它類(lèi)型的單片機控制系統,具有很強的實(shí)用性和通用性。

[參考文獻]

[1] 王幸之.單片機應用系統抗干擾技術(shù)[M].北京航空航天大學(xué)出版社,2000,2.
[2] 周航慈.單片機應用系統程序設計技術(shù)[M].北京航空航天大學(xué)出版社,1991,7.
[3] 劉大茂.智能儀表[M].機械工業(yè)出版社,1998.5


上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>