專利名稱:中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種中斷處理方法及裝置,尤其涉及一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法及裝置。
背景技術(shù):
嵌入式實時系統(tǒng)(Real-Time System)是一個能夠在指定或者確定的時間內(nèi)對外部事件作出響應(yīng)的系統(tǒng),其重要的特性是實時響應(yīng)性。嵌入式實時系統(tǒng)對外部事件的響應(yīng)一般都是通過中斷來處理的,其對中斷的處理方式,直接影響到系統(tǒng)的實時性能。
實時多任務(wù)操作系統(tǒng)是嵌入式應(yīng)用開發(fā)的基礎(chǔ)平臺。早期的嵌入式實時應(yīng)用軟件直接在處理器上運行,沒有操作系統(tǒng)的支持,現(xiàn)在的大多嵌入式應(yīng)用開發(fā)都需要嵌入式操作系統(tǒng)的支持。實際上,此時的嵌入式操作系統(tǒng)相當(dāng)于一個通用而復(fù)雜的主控程序,為嵌入式應(yīng)用軟件提供更強(qiáng)大的開發(fā)平臺和運行環(huán)境。
在嵌入式系統(tǒng)中,軟件程序的執(zhí)行經(jīng)常會被中斷打斷。CPU通常會提供中斷處理機(jī)制,在中斷出現(xiàn)時,記錄當(dāng)前執(zhí)行程序的上下文,在退出中斷處理時,利用記錄的程序上下文來恢復(fù)中斷出現(xiàn)前的程序執(zhí)行環(huán)境。這種機(jī)制保證了程序的連續(xù)運行。
但是在一些有特定要求的系統(tǒng)中,只有這種機(jī)制是不夠的。
如圖1所示,描述了VC0568系統(tǒng)在總線類型為multiplex 8時的軟件訪問過程。第一步,軟件寫入寄存器的高地址索引0xb4(步驟101);第二步,軟件寫入寄存器的高字節(jié)(byte)地址(步驟102);第三步,軟件寫入寄存器的低地址索引0xb2(步驟103);第四步,軟件寫入寄存器的低字節(jié)地址(步驟104);第五步,軟件寫入數(shù)據(jù)索引0xb0(步驟105);第六步,軟件寫入數(shù)據(jù)(步驟106)。
硬件根據(jù)軟件寫入的寄存器地址和數(shù)據(jù)來設(shè)置寄存器。整個過程是猝發(fā)(burst)的。如果在前五個步驟的某一個步驟進(jìn)行時,中斷出現(xiàn),而且在中斷處理過程中,有訪問寄存器的操作,那么在中斷出現(xiàn)前,已經(jīng)對硬件寫入的設(shè)置就會被更改。假定在第三步,中斷出現(xiàn)前已經(jīng)設(shè)定的寄存器高字節(jié)地址就會被沖掉。中斷恢復(fù)后,繼續(xù)寄存器訪問,硬件會把數(shù)據(jù)寫入一個別的地址,造成錯誤的結(jié)果。
再如圖2所示,描述了VC0568系統(tǒng)在端口(port)模式時,訪問靜態(tài)隨機(jī)存取存儲器(SRAM)的過程。第一步,軟件設(shè)置訪問操作是讀或者寫(步驟201);第二步,軟件設(shè)置訪問的SRAM的地址(步驟202);第三步,軟件設(shè)置訪問SRAM的端口地址(步驟203)。這個過程必須是burst的。完成以上過程后,軟件就連續(xù)向端口寫數(shù)據(jù)(步驟204、205),硬件通過端口得到數(shù)據(jù),每收到4個byte數(shù)據(jù)后,一次寫入設(shè)定的SRAM地址。如果在前三個步驟的的某一個步驟進(jìn)行時,中斷出現(xiàn),而且在中斷處理過程中,有訪問SRAM的操作。那么在中斷出現(xiàn)前,已經(jīng)對硬件寫入的設(shè)置就會被更改。假定在第二步,中斷,中斷出現(xiàn)前已經(jīng)設(shè)定的訪問地址就會被沖掉。中斷恢復(fù)后,繼續(xù)SRAM的訪問,硬件就會把數(shù)據(jù)寫入別的SRAM地址,造成錯誤的結(jié)果。
因此,如何針對某些特定的系統(tǒng)要求,提供一種新的中斷恢復(fù)機(jī)制,以保證中斷前后的訪問環(huán)境設(shè)置的一致,正確恢復(fù)中斷前的訪問環(huán)境設(shè)置,已經(jīng)成為業(yè)內(nèi)亟待解決的問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題在于提供一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法及裝置,以保證中斷前后的訪問環(huán)境設(shè)置的一致。
本發(fā)明提供一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法,包括如下步驟(1)根據(jù)訪問類型,記錄當(dāng)前訪問環(huán)境設(shè)置與訪問已經(jīng)完成的步驟索引;
(2)中斷出現(xiàn)時,保存中斷時的訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引;(3)中斷恢復(fù)時,根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,判斷是否需要恢復(fù)訪問環(huán)境操作,如果需要,則根據(jù)保存的訪問環(huán)境設(shè)置與步驟索引,將訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟再重新進(jìn)行一次。
本發(fā)明進(jìn)而提供一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的裝置,包括記錄模塊,用于根據(jù)訪問類型,記錄當(dāng)前訪問環(huán)境設(shè)置與訪問已經(jīng)完成的步驟索引;保存模塊,用于當(dāng)中斷出現(xiàn)時,保存中斷時的訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引;判斷模塊,用于中斷恢復(fù)時,根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,判斷是否需要恢復(fù)訪問環(huán)境操作,如果需要,則根據(jù)保存的訪問環(huán)境設(shè)置與步驟索引,將訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟再重新進(jìn)行一次。
本發(fā)明與現(xiàn)有技術(shù)相比,運用了保護(hù)訪問環(huán)境的辦法來恢復(fù)它被中斷的訪問環(huán)境設(shè)置,中斷恢復(fù)時,根據(jù)保存的訪問地址和步驟索引,把訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟重新進(jìn)行一次,這樣,中斷前已經(jīng)進(jìn)行的設(shè)置就被恢復(fù)了,繼續(xù)訪問,不會造成錯誤的結(jié)果。
圖1描述了VC0568系統(tǒng)在總線類型為multiplex 8時的軟件訪問過程流程圖;圖2描述了VC0568系統(tǒng)在端口模式時訪問靜態(tài)隨機(jī)存取存儲器的過程流程圖;圖3為本發(fā)明所述的中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法流程圖。
具體實施例方式
針對VC0568等系統(tǒng)的特殊需求,本發(fā)明采取了保護(hù)SRAM訪問環(huán)境的辦法來恢復(fù)被中斷的訪問環(huán)境設(shè)置。在訪問環(huán)境設(shè)置開始前,根據(jù)訪問類型,記錄訪問的地址和訪問環(huán)境設(shè)置進(jìn)行的步驟索引。中斷出現(xiàn)時,當(dāng)前的訪問地址和步驟索引會被保存。中斷恢復(fù)時,根據(jù)保存的訪問地址和步驟索引來判斷是否需要恢復(fù)訪問環(huán)境操作。如果需要,根據(jù)保存的訪問地址和步驟索引,把訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟重新進(jìn)行一次。這樣,中斷前已經(jīng)進(jìn)行的設(shè)置就被恢復(fù)了,繼續(xù)訪問,不會造成錯誤的結(jié)果。
如圖3所示,為本發(fā)明之中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法流程圖,首先根據(jù)訪問類型,記錄當(dāng)前訪問環(huán)境設(shè)置與訪問已經(jīng)完成的步驟索引(步驟301);然后在中斷出現(xiàn)時,保存中斷時的訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引(步驟302);中斷恢復(fù)時,根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,判斷是否需要恢復(fù)訪問環(huán)境操作,如果需要,則根據(jù)保存的訪問環(huán)境設(shè)置與步驟索引,將訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟再重新進(jìn)行一次(步驟303)。
其中所述的訪問類型是根據(jù)訪問寄存器,還是訪問SRAM,以及總線類型來確定的;例如,如果系統(tǒng)用到的總線類型有MULTI8,MULTI16和SEPERATE三種,這樣,類型就有2×2×4=16種。而中斷處理結(jié)束后需要恢復(fù)的原來的訪問環(huán)境設(shè)置,也是與此相對應(yīng)的。
其中所述步驟301,是通過一個全局變量來記錄寄存器訪問需要設(shè)置的環(huán)境和訪問已經(jīng)完成的步驟。
所述步驟302,中斷出現(xiàn)時,是將已記錄的當(dāng)前訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引復(fù)制到一個局部變量來實現(xiàn)保存。
所述步驟303,中斷恢復(fù)時,是根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,與當(dāng)前的訪問環(huán)境設(shè)置與步驟索引進(jìn)行比較的結(jié)果是否一致,來判斷是否需要恢復(fù)訪問環(huán)境操作。
所述的步驟303,如果判斷結(jié)果一致,則不需要進(jìn)行恢復(fù)訪問環(huán)境操作,直接從中斷處執(zhí)行后續(xù)操作。
所述步驟303,中斷恢復(fù)時,是根據(jù)用于保存中斷時的訪問環(huán)境設(shè)置與步驟索引的局部變量,與用于記錄當(dāng)前訪問環(huán)境設(shè)置與步驟索引的全局變量進(jìn)行比較的結(jié)果是否一致,來判斷是否需要恢復(fù)訪問環(huán)境操作。
如果所述全局變量與局部變量一致,則不需要進(jìn)行恢復(fù)訪問環(huán)境操作。
如果所述全局變量與局部變量不一致,則需要進(jìn)行恢復(fù)訪問環(huán)境操作。
例如,對于總線類型為multiplex 8,對地址為0x2024寄存器進(jìn)行寫操作時,根據(jù)圖1所示,在訪問操作進(jìn)行到第三步時,被中斷打斷,這時,0xb4,0x20(寫入寄存器的高字節(jié)地址數(shù)據(jù),圖中未示),0xb2已經(jīng)被硬件收到,設(shè)置到訪問環(huán)境中。在寄存器訪問函數(shù)中,用一個全局變量A來記錄寄存器訪問需要設(shè)置的環(huán)境和訪問已經(jīng)完成的步驟,在中斷處理程序入口處,把這個全局變量A的值拷貝到一個局部變量B。在中斷處理程序中,進(jìn)行了寄存器訪問操作,假設(shè)訪問地址為0x1802的寄存器,把0xb4,0x18,0xb2,0x02,0xb0送到硬件,硬件的寄存器訪問環(huán)境被改變。在中斷處理函數(shù)的出口處,用局部變量B對寄存器的訪問環(huán)境重新設(shè)置,再次把0xb4,0x20,0xb2送到硬件,同時全局變量A也恢復(fù)成中斷前的值。中斷程序退出后,寄存器訪問操作繼續(xù)執(zhí)行,它的訪問環(huán)境和中斷發(fā)生前的設(shè)置相同,可以繼續(xù)以后的訪問步驟,而不會造成錯誤的結(jié)果。
本發(fā)明提供的一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的裝置,包括記錄模塊,對應(yīng)于圖3中的步驟301,用于根據(jù)訪問類型,記錄當(dāng)前訪問環(huán)境設(shè)置與訪問已經(jīng)完成的步驟索引;保存模塊,對應(yīng)于圖3中的步驟302,用于當(dāng)中斷出現(xiàn)時,保存中斷時的訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引;判斷模塊,對應(yīng)于圖3中的步驟303,用于中斷恢復(fù)時,根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,判斷是否需要恢復(fù)訪問環(huán)境操作,如果需要,則根據(jù)保存的訪問環(huán)境設(shè)置與步驟索引,將訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟再重新進(jìn)行一次。
盡管本發(fā)明的實施例公開如上,但本發(fā)明并不僅僅限于說明書和實施方式中所列運用,它完全可以被適用于各種適合本發(fā)明的領(lǐng)域,對于熟悉本領(lǐng)域的人員而言,可容易地實現(xiàn)另外的修改,因此在不背離權(quán)利要求及等同范圍所限定的一般概念下,本發(fā)明并不限于特定的細(xì)節(jié)和這里示出與描述的圖例。
權(quán)利要求
1.一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法,其特征在于包括如下步驟(1)根據(jù)訪問類型,記錄當(dāng)前訪問環(huán)境設(shè)置與訪問已經(jīng)完成的步驟索引;(2)中斷出現(xiàn)時,保存中斷時的訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引;(3)中斷恢復(fù)時,根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,判斷是否需要恢復(fù)訪問環(huán)境操作,如果需要,則根據(jù)保存的訪問環(huán)境設(shè)置與步驟索引,將訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟再重新進(jìn)行一次。
2.如權(quán)利要求1所述的方法,其特征在于所述根據(jù)訪問類型,是根據(jù)訪問寄存器,還是訪問靜態(tài)隨機(jī)存儲器,以及總線類型來確定的。
3.如權(quán)利要求1所述的方法,其特征在于所述步驟(1),是通過一個全局變量來記錄當(dāng)前訪問環(huán)境設(shè)置和訪問已經(jīng)完成的步驟。
4.如權(quán)利要求1所述的方法,其特征在于所述步驟(2),中斷出現(xiàn)時,是將已記錄的當(dāng)前訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引復(fù)制到一個局部變量來實現(xiàn)保存。
5.如權(quán)利要求1所述的方法,其特征在于所述步驟(3),中斷恢復(fù)時,是根據(jù)經(jīng)所述步驟(2)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,與當(dāng)前的訪問環(huán)境設(shè)置與步驟索引進(jìn)行比較的結(jié)果是否一致,來判斷是否需要恢復(fù)訪問環(huán)境操作。
6.如權(quán)利要求5所述的方法,其特征在于所述的步驟(3),如果判斷結(jié)果一致,則不需要進(jìn)行恢復(fù)訪問環(huán)境操作,直接從中斷處執(zhí)行后續(xù)操作。
7.如權(quán)利要求1所述的方法,其特征在于所述步驟(3),中斷恢復(fù)時,是根據(jù)用于保存中斷時的訪問環(huán)境設(shè)置與步驟索引的局部變量,與用于記錄當(dāng)前訪問環(huán)境設(shè)置與步驟索引的全局變量進(jìn)行比較的結(jié)果是否一致,來判斷是否需要恢復(fù)訪問環(huán)境操作。
8.如權(quán)利要求7所述的方法,其特征在于如果所述全局變量與局部變量一致,則不需要進(jìn)行恢復(fù)訪問環(huán)境操作。
9.如權(quán)利要求7所述的方法,其特征在于如果所述全局變量與局部變量不一致,則需要進(jìn)行恢復(fù)訪問環(huán)境操作。
10.一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的裝置,其特征在于包括記錄模塊,用于根據(jù)訪問類型,記錄當(dāng)前訪問環(huán)境設(shè)置與訪問已經(jīng)完成的步驟索引;保存模塊,用于當(dāng)中斷出現(xiàn)時,保存中斷時的訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引;判斷模塊,用于中斷恢復(fù)時,根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,判斷是否需要恢復(fù)訪問環(huán)境操作,如果需要,則根據(jù)保存的訪問環(huán)境設(shè)置與步驟索引,將訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟再重新進(jìn)行一次。
11.如權(quán)利要求10所述的裝置,其特征在于所述記錄模塊,是通過一個全局變量來記錄寄存器訪問需要設(shè)置的環(huán)境和訪問已經(jīng)完成的步驟。
12.如權(quán)利要求10所述的裝置,其特征在于所述保存模塊,是將已記錄的當(dāng)前訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引復(fù)制到一個局部變量來實現(xiàn)保存。
全文摘要
本發(fā)明公開了一種中斷處理中恢復(fù)訪問環(huán)境設(shè)置的方法及裝置,首先根據(jù)訪問類型,記錄當(dāng)前訪問環(huán)境設(shè)置與訪問已經(jīng)完成的步驟索引,然后在中斷出現(xiàn)時,保存中斷時的訪問環(huán)境設(shè)置與已經(jīng)完成的步驟索引,中斷恢復(fù)時,根據(jù)保存的中斷時的訪問環(huán)境設(shè)置與步驟索引,判斷是否需要恢復(fù)訪問環(huán)境操作,如果需要,則根據(jù)保存的訪問環(huán)境設(shè)置與步驟索引,將訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟再重新進(jìn)行一次。本發(fā)明運用了保護(hù)訪問環(huán)境的辦法來恢復(fù)它被中斷的訪問環(huán)境設(shè)置,中斷恢復(fù)時,根據(jù)保存的訪問地址和步驟索引,把訪問環(huán)境設(shè)置已經(jīng)進(jìn)行的步驟重新進(jìn)行一次,這樣,中斷前已經(jīng)進(jìn)行的設(shè)置就被恢復(fù)了,繼續(xù)訪問,不會造成錯誤的結(jié)果。
文檔編號G06F13/20GK1687909SQ20051007064
公開日2005年10月26日 申請日期2005年5月17日 優(yōu)先權(quán)日2005年5月17日
發(fā)明者張軍琪, 游明琦 申請人:北京中星微電子有限公司