專利名稱:實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及內(nèi)部軟件的中斷處理,以及利用中斷處理進(jìn)行同步排他控制的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序。
背景技術(shù):
內(nèi)部軟件為了快速應(yīng)答外部事件的變化,利用中斷處理來確保實(shí)時(shí)性。另外,在內(nèi)部軟件中,使用μITRON等的內(nèi)部控制用實(shí)時(shí)OS(Operating System操作系統(tǒng))實(shí)現(xiàn)信標(biāo)(semaphore)和事件標(biāo)志(event flag)、信箱等的同步排他控制。
作為實(shí)現(xiàn)同步排他控制的以往技術(shù),例如有專利文獻(xiàn)1(特開平7-295840號(hào)公報(bào))。在專利文獻(xiàn)1中公開了這樣的技術(shù),即,使任務(wù)具有用于執(zhí)行的條件,通過控制該執(zhí)行順序來實(shí)現(xiàn)同步排他控制,削減適用于內(nèi)部系統(tǒng)的多道程序設(shè)計(jì)(multiprogramming)系統(tǒng)的OS使用的存儲(chǔ)區(qū)域以及程序步驟,在提高資源的效率的同時(shí)提高生產(chǎn)性以及維護(hù)性。
具體地說,在事件成立條件存儲(chǔ)部件中,存儲(chǔ)可以執(zhí)行針對(duì)細(xì)分化了程序的每個(gè)矢量(vector)所設(shè)定的任務(wù)的條件的種類(事件等待,信息等待,時(shí)間等待,起床等待等),以及,狀態(tài)(事件等待中,事件已成立等)的成立條件,在條件存儲(chǔ)部件中,存儲(chǔ)與被存儲(chǔ)在事件成立條件存儲(chǔ)部件中的事件成立的時(shí)刻對(duì)應(yīng)的事件等待解除條件,任務(wù)塊存儲(chǔ)用于控制任務(wù)的控制信息。
任務(wù)附屬事件管理部件把被存儲(chǔ)在事件成立條件存儲(chǔ)部件中的事件成立條件和已發(fā)生的事件進(jìn)行比較對(duì)比,任務(wù)附屬事件等待管理部件基于被存儲(chǔ)在任務(wù)塊中的控制信息,用任務(wù)附屬管理部件的檢測(cè)功能把成為事件等待的狀態(tài)的任務(wù)轉(zhuǎn)移到事件等待狀態(tài)的同時(shí),在事件等待任務(wù)存儲(chǔ)部件中存儲(chǔ)轉(zhuǎn)移到事件等待狀態(tài)的任務(wù)。而后,任務(wù)附屬事件等待管理部件在對(duì)事件等待狀態(tài)的任務(wù)的事件解除條件成立的時(shí)刻,使該任務(wù)轉(zhuǎn)移到執(zhí)行等待狀態(tài),在執(zhí)行等待任務(wù)存儲(chǔ)部件中存儲(chǔ)轉(zhuǎn)移到執(zhí)行等待狀態(tài)的任務(wù)。任務(wù)管理部件從被存儲(chǔ)在執(zhí)行中任務(wù)存儲(chǔ)部件中的當(dāng)前CPU正在執(zhí)行的任務(wù),以及被存儲(chǔ)在執(zhí)行等待任務(wù)存儲(chǔ)部件中的執(zhí)行等待任務(wù)中,選擇1個(gè)任務(wù)將其轉(zhuǎn)移到執(zhí)行狀態(tài)。
在上述專利文獻(xiàn)1所述的以往技術(shù)中,在使用多道程序設(shè)計(jì)系統(tǒng)的OS(實(shí)時(shí)OS)時(shí),使任務(wù)具有用于執(zhí)行的條件,通過控制其執(zhí)行順序而實(shí)現(xiàn)同步排他控制。
但是,安裝有內(nèi)部軟件的產(chǎn)品的存儲(chǔ)器容量有限。因此,如上述專利文獻(xiàn)1所述的以往技術(shù)那樣,為了實(shí)現(xiàn)同步排他控制而安裝實(shí)時(shí)OS時(shí),存在可用于實(shí)際需要的程序的存儲(chǔ)器容量減少的問題。該問題在用1塊芯片實(shí)現(xiàn)執(zhí)行內(nèi)部軟件的處理器、作為存儲(chǔ)內(nèi)部軟件的存儲(chǔ)器的ROM、作為暫時(shí)保持在執(zhí)行內(nèi)部軟件時(shí)需要的數(shù)據(jù)的存儲(chǔ)器的RAM等的產(chǎn)品中比較顯著。
另外,在實(shí)時(shí)OS中,通過使任務(wù)具有等待狀態(tài)實(shí)現(xiàn)信標(biāo)等的同步排他控制。但是,當(dāng)不同的優(yōu)先權(quán)的任務(wù)共用信標(biāo)的情況下,存在產(chǎn)生優(yōu)先權(quán)逆轉(zhuǎn)的問題。
具體地說,當(dāng)優(yōu)先權(quán)低的任務(wù)取得信標(biāo)的情況下,優(yōu)先權(quán)高的任務(wù)處于等待狀態(tài)。此時(shí)如果發(fā)生與優(yōu)先權(quán)低的任務(wù)相比優(yōu)先權(quán)高,并且與信標(biāo)等待的任務(wù)相比優(yōu)先權(quán)低的優(yōu)先權(quán)中等的任務(wù),則與取得信標(biāo)的任務(wù)相比先執(zhí)行優(yōu)先權(quán)中等的任務(wù),接著執(zhí)行取得了信標(biāo)的任務(wù),最后執(zhí)行優(yōu)先權(quán)高的任務(wù)。即,存在以和預(yù)先規(guī)定的優(yōu)先權(quán)不同的順序進(jìn)行任務(wù)處理的問題。
為了解決這些問題,考慮不使用實(shí)時(shí)OS,只用中斷處理開發(fā)內(nèi)部軟件。但是在不使用實(shí)時(shí)OS而只用中斷處理開發(fā)內(nèi)部軟件的情況下,存在無法進(jìn)行同步排他控制的問題。另外,雖然可以知道發(fā)生了中斷,但存在無法知道發(fā)生了幾次中斷的問題。進(jìn)而,當(dāng)發(fā)生了中斷的情況下,必須把該狀態(tài)保持在堆棧區(qū)域,因?yàn)榘褷顟B(tài)保持在堆棧區(qū)域期間全部中斷處于禁止?fàn)顟B(tài),所以還產(chǎn)生實(shí)時(shí)性變差的問題。
發(fā)明內(nèi)容
本發(fā)明就是鑒于上述問題而提出的,其第1個(gè)目的在于得到不使用實(shí)時(shí)OS而只用中斷處理實(shí)現(xiàn)同步排他控制的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序。
第2個(gè)目的在于得到在不使用實(shí)時(shí)OS而只用中斷處理來實(shí)現(xiàn)同步排他控制時(shí),避免各個(gè)中斷處理的優(yōu)先權(quán)逆轉(zhuǎn)的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序。
為了解決上述問題實(shí)現(xiàn)本發(fā)明的目的,本發(fā)明是被適用在用包含正常狀態(tài)的多個(gè)中斷服務(wù)程序(ISR)構(gòu)成的內(nèi)部軟件中的,根據(jù)與在上述多個(gè)ISR中使用的多個(gè)信標(biāo)對(duì)應(yīng)地保持與該信標(biāo)的使用狀態(tài)有關(guān)的信息的信標(biāo)構(gòu)造體,和具有與上述多個(gè)ISR的中斷級(jí)別對(duì)應(yīng)地保持與各ISR的狀態(tài)有關(guān)的信息的中斷控制塊(ICB),從上述ISR的中斷級(jí)別的優(yōu)先順序高的ICB開始順序連接該ICB的ICB排列,對(duì)上述ISR進(jìn)行調(diào)度的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,其特征在于,具備ISR起動(dòng)步驟,它設(shè)定在把在中斷發(fā)生時(shí)被存儲(chǔ)在堆棧區(qū)域上的程序計(jì)數(shù)的值、作為堆棧寄存器的值的堆棧指示字,以及上下文存儲(chǔ)在與被中斷的ISR對(duì)應(yīng)的ICB的上下文保存區(qū)域上的同時(shí),在與上述已發(fā)生的中斷的ISR對(duì)應(yīng)的ICB中處于執(zhí)行等待狀態(tài);調(diào)度步驟,它選擇在設(shè)定了執(zhí)行狀態(tài)的ICB中優(yōu)先順序最高的ICB,把被選擇出的存儲(chǔ)在ICB的上下文保存區(qū)域上的程序計(jì)數(shù)器的值、堆棧指示字,以及上下文存儲(chǔ)在上述堆棧區(qū)域上,執(zhí)行用中斷恢復(fù)命令選擇的ISR;ISR結(jié)束步驟,它設(shè)定在通過上述調(diào)度步驟而執(zhí)行的ISR的處理結(jié)束時(shí),在與結(jié)束的ISR對(duì)應(yīng)的ICB中處于中斷等待狀態(tài)。
如果采用本發(fā)明,因?yàn)?,本發(fā)明被適用在用包含正常狀態(tài)的多個(gè)中斷服務(wù)程序(ISR)構(gòu)成的內(nèi)部軟件中,在根據(jù)與在上述多個(gè)ISR中使用的多個(gè)信標(biāo)對(duì)應(yīng)地保持與該信標(biāo)的使用狀態(tài)有關(guān)的信息的信標(biāo)構(gòu)造體,和具有與上述多個(gè)ISR的中斷級(jí)別對(duì)應(yīng)地保持與各ISR的狀態(tài)有關(guān)的信息的中斷控制塊(ICB),從上述ISR的中斷級(jí)別的優(yōu)先順序高的ICB開始順序連接該ICB的ICB排列,對(duì)ISR進(jìn)行調(diào)度時(shí),ISR起動(dòng)任務(wù)設(shè)定在把在中斷發(fā)生時(shí)被存儲(chǔ)在堆棧區(qū)域上的處理器上下文(程序計(jì)數(shù)器的值、堆棧指示字,以及上下文)存儲(chǔ)在與被中斷的SIR對(duì)應(yīng)的ICB的上下文保存區(qū)域上的同時(shí),在與上述已發(fā)生的中斷的ISR對(duì)應(yīng)的ICB中處于執(zhí)行等待狀態(tài);調(diào)度程序以及調(diào)度器(dispatcher)作為ISR的調(diào)度處理,選擇在設(shè)定了執(zhí)行等待狀態(tài)的ICB中優(yōu)先順序最高的ICB,把被選擇的存儲(chǔ)在ICB的上下文保存區(qū)域上的程序上下文存儲(chǔ)在堆棧區(qū)域,執(zhí)行用中斷恢復(fù)命令選擇出的與ICB對(duì)應(yīng)的ISR,所以,起到能夠不使用實(shí)時(shí)OS,只用中斷處理實(shí)現(xiàn)同步排他控制的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的效果。
圖1是表示適用本發(fā)明中的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的裝置的結(jié)構(gòu)一例的圖。
圖2是表示在本發(fā)明中的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的實(shí)施方式1的結(jié)構(gòu)的概念圖。
圖3是表示圖2所示的ICB的結(jié)構(gòu)的圖。
圖4是表示圖2所示的信標(biāo)構(gòu)造體的構(gòu)成的圖。
圖5是用于說明圖2所示的ISR的狀態(tài)轉(zhuǎn)移的圖。
圖6是用于說明實(shí)施方式1的起動(dòng)ISR生成任務(wù)的動(dòng)作的流程圖。
圖7是用于說明實(shí)施方式1的ISR起動(dòng)任務(wù)的動(dòng)作的流程圖。
圖8是用于說明實(shí)施方式1的調(diào)度程序的動(dòng)作的流程圖。
圖9是用于說明實(shí)施方式1的調(diào)度器(dispatcher)的動(dòng)作的流程圖。
圖10是用于說明轉(zhuǎn)移到實(shí)施方式1的信標(biāo)等待狀態(tài)的信標(biāo)取得任務(wù)的動(dòng)作的流程圖。
圖11是用于說明實(shí)施方式1的信標(biāo)解放任務(wù)的動(dòng)作的流程圖。
圖12是用于說明不向?qū)嵤┓绞?的信標(biāo)等待狀態(tài)轉(zhuǎn)移的信標(biāo)取得任務(wù)的動(dòng)作的流程圖。
圖13是用于說明實(shí)施方式1的ISR延遲任務(wù)的動(dòng)作的流程圖。
圖14是用于說明實(shí)施方式1的ISR恢復(fù)任務(wù)的動(dòng)作的流程圖。
圖15是用于說明實(shí)施方式1的定時(shí)中斷處理程序(handler)的動(dòng)作的流程圖。
圖16是用于說明實(shí)施方式1的ISR結(jié)束任務(wù)的動(dòng)作的流程圖。
圖17是用于說明優(yōu)先權(quán)的逆轉(zhuǎn)的圖。
圖18是用于說明避免優(yōu)先權(quán)的逆轉(zhuǎn)的圖。
圖19是用于說明避免優(yōu)先權(quán)的逆轉(zhuǎn)的圖。
圖20-1是用于說明轉(zhuǎn)移到實(shí)施方式2的信標(biāo)等待狀態(tài)的信標(biāo)取得任務(wù)的動(dòng)作的流程圖。
圖20-2是用于說明轉(zhuǎn)移到實(shí)施方式2的信標(biāo)等待狀態(tài)的信標(biāo)取得任務(wù)的動(dòng)作的流程圖。
圖21-1是用于說明實(shí)施方式2的信標(biāo)解放任務(wù)的動(dòng)作的流程圖。
圖21-2是用于說明實(shí)施方式2的信標(biāo)解放任務(wù)的動(dòng)作的流程圖。
符號(hào)的說明1處理器2程序存儲(chǔ)單元3數(shù)據(jù)存儲(chǔ)單元4ICB排列5信標(biāo)構(gòu)造體群6調(diào)度程序7調(diào)度器(dispatcher)9狀態(tài)處理程序10控制對(duì)象裝置12程序計(jì)數(shù)器
13寄存器群14控制寄存器21、22、23信標(biāo)構(gòu)造體91ISR生成任務(wù)92ISR起動(dòng)任務(wù)93a、93b、93c信標(biāo)取得任務(wù)94、94a信標(biāo)解放任務(wù)95ISR延遲任務(wù)96ISR恢復(fù)任務(wù)97ISR結(jié)束任務(wù)98定時(shí)中斷處理程序401休眠狀態(tài)402中斷等待狀態(tài)403執(zhí)行等待狀態(tài)404執(zhí)行狀態(tài)405信標(biāo)等待狀態(tài)406執(zhí)行停止?fàn)顟B(tài)1601優(yōu)先順序1602時(shí)間軸具體實(shí)施方式
以下,基于
本發(fā)明中的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的實(shí)施方式。而且本發(fā)明并不被本實(shí)施方式所限定。
本發(fā)明中的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序是通過讓中斷處理具有成為任務(wù)那樣的等待狀態(tài)的狀態(tài),不使用實(shí)時(shí)OS實(shí)現(xiàn)同步排他控制,但為了簡(jiǎn)單說明,在以下的實(shí)施方式中,使用當(dāng)前一般使用的作為實(shí)時(shí)OS之一的μITRON方法的術(shù)語進(jìn)行說明。
實(shí)施方式1.
用圖1~圖16說明本發(fā)明的實(shí)施方式1。圖1是表示適用本發(fā)明中的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的裝置結(jié)構(gòu)的一個(gè)例子的圖。在圖1中,適用了實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的裝置具備處理器1;程序存儲(chǔ)單元2;數(shù)據(jù)存儲(chǔ)單元3;控制對(duì)象裝置10。
程序存儲(chǔ)單元2例如用ROM(Read Only Memory)等的存儲(chǔ)介質(zhì)構(gòu)成,存儲(chǔ)用處理器1執(zhí)行的用戶程序、在用戶程序中必要的固定數(shù)據(jù)等。本發(fā)明中的實(shí)時(shí)簡(jiǎn)易監(jiān)視程序在用戶程序內(nèi)使用,實(shí)現(xiàn)同步排他控制。
數(shù)據(jù)存儲(chǔ)單元3用RAM(Random Access Memory)等的可以寫入的存儲(chǔ)介質(zhì)構(gòu)成,存儲(chǔ)堆棧區(qū)域、在用戶程序中所需要的數(shù)據(jù)緩沖區(qū)、在實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序中需要的信息。
處理器1具備CPU(Control Processing Unit)11;程序計(jì)數(shù)器12;具有在計(jì)算處理中使用的通用寄存器和存儲(chǔ)堆棧指針的堆棧寄存器等的寄存器群13;存儲(chǔ)中斷信號(hào)的控制信息的控制寄存器14。
CPU11讀出被存儲(chǔ)在程序存儲(chǔ)單元2的程序計(jì)數(shù)器12表示的地址中的程序代碼,根據(jù)讀出的程序代碼使用寄存器群13的通用寄存器執(zhí)行規(guī)定的計(jì)算處理對(duì)控制對(duì)象裝置10進(jìn)行控制。
輸入到CPU11的多個(gè)(這種情況下是7個(gè))中斷信號(hào)從控制對(duì)象裝置10或者外部輸入??刂萍拇嫫?4由針對(duì)每個(gè)中斷信號(hào)表示發(fā)生了中斷信號(hào)(中斷信號(hào)處于斷言(assert))的中斷標(biāo)志,和設(shè)定是否屏蔽中斷信號(hào)的屏蔽標(biāo)志構(gòu)成。
CPU11在控制寄存器14的屏蔽標(biāo)志是OFF的情況下(沒有屏蔽的情況下)如果中斷信號(hào)處于斷言(assert)后,則把當(dāng)前執(zhí)行的程序計(jì)數(shù)器12的值,以及堆棧計(jì)數(shù)器的值(堆棧指針)存儲(chǔ)于被存儲(chǔ)在堆棧寄存器中的堆棧指針?biāo)硎镜亩褩^(qū)域中,執(zhí)行被存儲(chǔ)在程序存儲(chǔ)單元2的預(yù)先規(guī)定的地址表示的區(qū)域上的程序。
CPU11在控制寄存器14的屏蔽標(biāo)志是ON(中斷被屏蔽而處于中斷禁止?fàn)顟B(tài))的情況下,即使中斷信號(hào)處于斷言(assert)也繼續(xù)執(zhí)行當(dāng)前正在執(zhí)行的程序。這種情況下,在用戶程序中確認(rèn)控制寄存器14的中斷標(biāo)志而進(jìn)行規(guī)定的中斷處理,或者在屏蔽標(biāo)志成為OFF時(shí)受理中斷。以下,說明在控制寄存器14的屏蔽標(biāo)志中設(shè)定為OFF的情況。
圖2是表示本發(fā)明的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的實(shí)施方式1的結(jié)構(gòu)的概略圖。在圖2中,實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序具備多個(gè)(這種情況下是7個(gè))的中斷服務(wù)程序(ISR)81~87以及正常狀態(tài)程序80;具有設(shè)定ISR81~87以及正常狀態(tài)程序80的各種信息的中斷控制塊(ICBInterrupt Control Block)40~47的中斷控制塊排列(ICB排列)4;基于ICB排列4進(jìn)行ISR81~87以及正常狀態(tài)程序80的調(diào)度(確定執(zhí)行順序并選擇應(yīng)該執(zhí)行的ISR81~87,以及正常狀態(tài)程序80)的調(diào)度程序6以及調(diào)度器(dispatcher)7;設(shè)定在ISR81~87及正常狀態(tài)程序80中使用的信標(biāo)的狀態(tài)的信標(biāo)構(gòu)造體群5;進(jìn)行ISR8187以及正常狀態(tài)程序80的狀態(tài)控制的狀態(tài)處理程序9。
實(shí)現(xiàn)ISR81~87、正常狀態(tài)程序80、狀態(tài)處理程序9、調(diào)度程序6以及調(diào)度器(dispatcher)7的功能的程序被存儲(chǔ)在前面圖1所示的程序存儲(chǔ)單元2中。另外,ICB排列4以及信標(biāo)構(gòu)造體群5被存儲(chǔ)在前面圖1所示的數(shù)據(jù)存儲(chǔ)單元3中。
ISR81~87是由被輸入到CPU11中的各中斷信號(hào)進(jìn)行的中斷處理的程序。在此,ISR81是在ISR81~87中中斷級(jí)別最低(優(yōu)先順序?yàn)樽畹?級(jí)別1的中斷處理程序,ISR87是在ISR81~87中中斷級(jí)別最高(優(yōu)先順序高)的級(jí)別7的中斷處理程序。即,按照ISR81、ISR82、ISR83、ISR84、ISR85、ISR86、ISR87的順序優(yōu)先順序增高。
正常狀態(tài)程序80是和采用中斷信號(hào)進(jìn)行的中斷處理不同的處理,即是在非中斷狀態(tài)(正常狀態(tài))時(shí)執(zhí)行的處理程序,包含設(shè)定控制寄存器14和ICB排列4、信標(biāo)構(gòu)造體群5等的初始值的處理,以及ISR81~87的生成處理。在裝置的起動(dòng)時(shí)(電源接入時(shí)或者系統(tǒng)復(fù)位時(shí)),首先執(zhí)行正常狀態(tài)程序80。
ICB排列4具備與正常狀態(tài)程序80以及ISR81~87對(duì)應(yīng)的ICB40~47。在本發(fā)明中的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序基于ICB40~47實(shí)現(xiàn)同步排他控制(調(diào)度)。因此,在非中斷狀態(tài)中執(zhí)行的正常狀態(tài)程序80也作為比中斷級(jí)別最低的ISR81的級(jí)別還低(級(jí)別0)的ISR來處理并與ICB40對(duì)應(yīng)起來。即,ICB排列4具備“中斷級(jí)別的個(gè)數(shù)+1”個(gè)的ICB。而且,以下,把正常狀態(tài)程序80稱為ISR80。
ICB40~47具有作為排列連結(jié)的構(gòu)造,該排列的連結(jié)順序表示ISR80~87的調(diào)度的優(yōu)先順序。在此,因?yàn)橹袛嗉?jí)別按照ISR87、ISR86、ISR85、ISR84、ISR83、ISR82、ISR81、ISR80的順序降低,所以按照ICB47、ICB46、ICB45、ICB44、ICB43、ICB42、ICB41、ICB40的順序連結(jié)。該連結(jié)表示ISR80~I(xiàn)SR87的優(yōu)先順序(調(diào)度器(dispatcher)7的ICB40~47的搜索順序),與連結(jié)有關(guān)的信息被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)單元3中。
ICB40~47具備全部相同的結(jié)構(gòu)。參照表示圖3所示的ICB47的結(jié)構(gòu)的圖說明ICB的結(jié)構(gòu)。
在圖3中,ICB47用以下部分構(gòu)成狀態(tài)標(biāo)志171、執(zhí)行計(jì)數(shù)器172、信標(biāo)等待索引(index)173、執(zhí)行次數(shù)上限值174、ISR開頭地址175、堆棧底層地址176、堆棧大小177、請(qǐng)求中斷級(jí)別178、延遲時(shí)間計(jì)數(shù)器179、ICB位置變更對(duì)象180,以及上下文保存區(qū)域181構(gòu)成。
狀態(tài)標(biāo)志171是表示ICB47的狀態(tài)的標(biāo)志的集合,由以下部分構(gòu)成有效/無效標(biāo)志1711、ready/not ready標(biāo)志1712、信標(biāo)取得中標(biāo)志1713、信標(biāo)等待標(biāo)志1714、中斷級(jí)別變更請(qǐng)求標(biāo)志1715、執(zhí)行次數(shù)上限指定標(biāo)志1716、堆棧溢出檢驗(yàn)請(qǐng)求標(biāo)志1717、延遲中標(biāo)志1718,以及ICB位置變更標(biāo)志1719。
在有效/無效標(biāo)志1711中設(shè)定是否可以使用ISR87,即是否作為調(diào)度對(duì)象的信息。當(dāng)ISR87可以使用的情況下,在有效/無效標(biāo)志1711中設(shè)定ON(這種情況下是“1”),當(dāng)ICB47不可以使用的情況下,在有效/無效標(biāo)志1711中設(shè)定OFF(這種情況下是“0”)。
在ready/not ready標(biāo)志1712中,設(shè)定ISR87是否處于中斷等待狀態(tài)的信息。當(dāng)ISR87是處于中斷等待狀態(tài)的情況下,在ready/notready標(biāo)志1712中設(shè)定OFF(這種情況下是“0”),當(dāng)ISR87不是處于中斷等待狀態(tài)的情況下,在ready/not ready標(biāo)志1712中設(shè)定ON(這種情況下是“1”)。
在信標(biāo)取得中標(biāo)志1713中,設(shè)定ISR87是否取得任意的信標(biāo)的信息。當(dāng)ISR87取得任意的信標(biāo)的情況下,在信標(biāo)取得中標(biāo)志1713中設(shè)定ON(這種情況下是“1”),當(dāng)ISR87未取得信標(biāo)的情況下,在信標(biāo)取得中標(biāo)志1713中設(shè)定OFF(這種情況下是“0”)。
在信標(biāo)等待標(biāo)志1714中,設(shè)定ISR87是否是任意的信標(biāo)的等待狀態(tài)的信息。當(dāng)1SR87是任意的信標(biāo)等待狀態(tài)的情況下,在信標(biāo)等待標(biāo)志1714中設(shè)定ON(這種情況下是“1”),當(dāng)ISR87不是信標(biāo)的等待狀態(tài)的情況下,在信標(biāo)等待標(biāo)志1714中設(shè)定OFF(這種情況下是“0”)。
在中斷級(jí)別變更請(qǐng)求標(biāo)志1715中設(shè)定是否變更預(yù)先確定的中斷級(jí)別的信息。當(dāng)在預(yù)先確定的中斷級(jí)別下動(dòng)作的情況下(只受理比自身優(yōu)先權(quán)高的中斷的情況下),在中斷級(jí)別變更請(qǐng)求標(biāo)志1715中設(shè)定OFF(這種情況下是“0”),當(dāng)以被設(shè)定于請(qǐng)求中斷級(jí)別178中的中斷級(jí)別進(jìn)行動(dòng)作的情況下,在中斷級(jí)別變更請(qǐng)求標(biāo)志1715中設(shè)定ON(這種情況下是“1”)。
在執(zhí)行次數(shù)上限指定標(biāo)志1716中在發(fā)生了多次ISR87進(jìn)行處理的中斷的情況下,設(shè)定是否限制ISR87的執(zhí)行次數(shù)的信息。當(dāng)不限制執(zhí)行次數(shù)的情況下(只按照發(fā)生了中斷的次數(shù)執(zhí)行ISR的情況下),在執(zhí)行次數(shù)上限指定標(biāo)志1716中設(shè)定OFF(這種情況下是“0”),當(dāng)限制執(zhí)行次數(shù)的情況下,在執(zhí)行次數(shù)上限指定標(biāo)志1716中設(shè)定ON(這種情況下是“1”)。
在堆棧溢出檢驗(yàn)請(qǐng)求標(biāo)志1717中設(shè)定在上下文保存區(qū)域181中是否發(fā)生了溢出的信息。當(dāng)在上下文保存區(qū)域181中未發(fā)生溢出(正常)的情況下,在堆棧溢出檢驗(yàn)請(qǐng)求標(biāo)志1717中設(shè)定OFF(這種情況下是“0”),當(dāng)在上下文保存區(qū)域181中發(fā)生了溢出(異常)的情況下,在堆棧溢出檢驗(yàn)請(qǐng)求標(biāo)志1717中設(shè)定ON(這種情況下是“1”)。
在延遲中標(biāo)志1718中設(shè)定ISR87是否是執(zhí)行停止?fàn)顟B(tài)(延遲實(shí)施狀態(tài))的信息。在ISR87是執(zhí)行停止?fàn)顟B(tài)的情況下,在延遲中標(biāo)志1718中設(shè)定ON(這種情況下是“1”),當(dāng)ISR87不是執(zhí)行停止?fàn)顟B(tài)的情況下,在延遲中信標(biāo)1718中設(shè)定OFF(這種情況下是“0”)。
在ICB位置變更標(biāo)志1719中設(shè)定是否變更ICB47的位置的信息。如上所述,ICB40~47根據(jù)預(yù)先確定的中斷級(jí)別連結(jié)。在ICB位置變更標(biāo)志1719中,設(shè)定是否為了避免優(yōu)先權(quán)的逆轉(zhuǎn)等的處理而變更了該連結(jié)的位置,即是否把調(diào)度的優(yōu)先順序變更為和中斷級(jí)別不同的順序的信息。當(dāng)未變更位置的情況下,在ICB位置變更標(biāo)志1719中設(shè)定OFF(這種情況下是“0”),當(dāng)變更了位置的情況下,在ICB位置變更標(biāo)志1719中設(shè)定ON(這種情況下是“1”)。
在執(zhí)行計(jì)數(shù)器172中設(shè)定應(yīng)該執(zhí)行ISR87的次數(shù),即起動(dòng)ISR87的中斷處理程序(handler)的發(fā)生次數(shù)。在執(zhí)行次數(shù)上限值174的標(biāo)志是ON的情況下,被設(shè)定在執(zhí)行計(jì)數(shù)器172中的值在執(zhí)行次數(shù)上限值174的值以內(nèi)。
在信標(biāo)等待索引(index)173中,設(shè)定ISR87取得等待的信標(biāo)的索引(index)(用于識(shí)別取得等待的信標(biāo)的信標(biāo)識(shí)別符)。信標(biāo)等待索引(index)173的值只在信標(biāo)等待標(biāo)志1714是ON的情況下有效。
在執(zhí)行次數(shù)上限值174中設(shè)定應(yīng)該執(zhí)行ISR87的次數(shù)的上限值,即在執(zhí)行計(jì)數(shù)器172上的上限值。執(zhí)行次數(shù)上限值174的值只在執(zhí)行次數(shù)上限指定標(biāo)志1716是ON的情況下才有效。
在ISR開頭地址175中設(shè)定存儲(chǔ)程序存儲(chǔ)單元2的ISR87的區(qū)域的開頭地址。
在堆棧底層地址176中設(shè)定上下文保存區(qū)域181的初始值(在數(shù)據(jù)存儲(chǔ)單元3的上下文保存區(qū)域181中最初存儲(chǔ)數(shù)據(jù)的地址)。在堆棧大小177中設(shè)定上下文保存區(qū)域181的大小,即數(shù)據(jù)存儲(chǔ)單元3的上下文保存區(qū)域181的存儲(chǔ)器大小。
被設(shè)定在堆棧底層地址176,以及堆棧大小177中的信息在檢驗(yàn)上下文保存區(qū)域181是否溢出時(shí)使用,在檢測(cè)出溢出時(shí)在堆棧溢出檢驗(yàn)請(qǐng)求標(biāo)志1717中設(shè)定“ON”。檢驗(yàn)溢出的任務(wù)在ISR80~87內(nèi)起動(dòng)。
在請(qǐng)求中斷級(jí)別178中設(shè)定表示ISR87在執(zhí)行狀態(tài)時(shí)允許中斷的中斷級(jí)別的值。請(qǐng)求中斷級(jí)別178的值只在中斷級(jí)別變更請(qǐng)求標(biāo)志1715是ON的情況下才有效。
例如,因?yàn)镮SR87是中斷級(jí)別7,所以當(dāng)中斷級(jí)別變更請(qǐng)求1715是“OFF”的情況下ISR80~86無法中斷。但是,當(dāng)中斷級(jí)別變更請(qǐng)求標(biāo)志1715是“ON”,并且請(qǐng)求中斷級(jí)別178是“3”的情況下,允許中斷級(jí)別3~6的ISR83~86的中斷。
在延遲時(shí)間計(jì)數(shù)器179中設(shè)定ISR87應(yīng)該延遲的剩余的時(shí)間,即從執(zhí)行停止?fàn)顟B(tài)到恢復(fù)為止的時(shí)間。延遲時(shí)間計(jì)數(shù)器179的值只在延遲標(biāo)志1718是ON的情況下才有效。
ICB位置變更對(duì)象180在變更了ICB47的位置的情況下,設(shè)定作為變更對(duì)象的ISR87~80的信息。ICB位置變更對(duì)象180的值只在ICB位置變更標(biāo)志1719是ON的情況下才有效。
在上下文保存區(qū)域181中設(shè)定中斷發(fā)生時(shí)的狀態(tài),即程序計(jì)數(shù)器12和寄存器群13等用于從ISR87恢復(fù)到中斷發(fā)生時(shí)的狀態(tài)所需要的上下文。
回到圖2,信標(biāo)構(gòu)造體群5由ISR80~87使用的信標(biāo)的數(shù)(這種情況下是3個(gè))的信標(biāo)構(gòu)造體21~23構(gòu)成。信標(biāo)構(gòu)造體21~23具有全部相同的構(gòu)造。參照表示圖4所示的信標(biāo)構(gòu)造體21的構(gòu)造的圖來說明信標(biāo)構(gòu)造體的構(gòu)成。
在圖4中,信標(biāo)構(gòu)造體21由信標(biāo)值211、所有ISR212、等待ISR213構(gòu)成。在信標(biāo)值211中設(shè)定與信標(biāo)構(gòu)造體21對(duì)應(yīng)的信標(biāo)的剩余數(shù)。當(dāng)信標(biāo)值211的初始值是“3”的情況下(自身管理的信標(biāo)數(shù)是3個(gè)的情況下),如果信標(biāo)值211的值是“3”,則表示自身管理的信標(biāo)在ISR80~I(xiàn)SR87中未取得,如果信標(biāo)值211的值是“2”,則表示在ISR80~87之中取得1個(gè)自身管理的信標(biāo),如果信標(biāo)值211的值是“1”,則表示在ISR80~87之中取得2個(gè)自身管理的信標(biāo)。如果信標(biāo)值211的值是“0”,則表示在ISR80~87之中全部取得自身管理的信標(biāo)(沒有剩余信標(biāo)),即ISR80~87無法取得信標(biāo)。
在所有ISR212中設(shè)定用于識(shí)別取得信標(biāo)構(gòu)造體21管理的信標(biāo)的ISR80~87的ISR識(shí)別符。ISR識(shí)別符可以預(yù)先給予ISR80~87,也可以使用程序存儲(chǔ)單元2存儲(chǔ)ISR80~87的開頭地址,或者預(yù)先確定的中斷級(jí)別。
所有ISR212和信標(biāo)值211連動(dòng),信標(biāo)值211的值與被設(shè)定在所有ISR212中的ISR80~87的個(gè)數(shù)的合計(jì)和信標(biāo)構(gòu)造體21管理的信標(biāo)的個(gè)數(shù)相等。具體地說,在信標(biāo)值211的值是“初始值-1”的情況下,在所有ISR212中設(shè)定1個(gè)ISR識(shí)別符。
在等待ISR213中設(shè)定信標(biāo)構(gòu)造體21管理的信標(biāo)的取得等待的ISR識(shí)別符。當(dāng)在等待ISR213中設(shè)定ISR識(shí)別符的情況下,信標(biāo)值211是“0”,在所有ISR212中設(shè)定信標(biāo)構(gòu)造體21管理的信標(biāo)數(shù)量的ISR識(shí)別符。
在本發(fā)明中的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序通過使用ICB排列4以及信標(biāo)構(gòu)造體群5,通過使ISR80~87具有任務(wù)那樣的等待的狀態(tài),來實(shí)現(xiàn)同步排他控制,ISR80~87具有多個(gè)狀態(tài)。狀態(tài)處理程序9是用于使ISR80~87的狀態(tài)發(fā)生轉(zhuǎn)移的程序,由ISR生成任務(wù)91、ISR起動(dòng)任務(wù)92、信標(biāo)取得任務(wù)93a、信標(biāo)取得任務(wù)93b、信標(biāo)放開任務(wù)94、ISR延遲任務(wù)95、ISR恢復(fù)任務(wù)96、ISR結(jié)束任務(wù)97,以及定時(shí)中斷處理程序(handler)98構(gòu)成。
各任務(wù)91~97以及定時(shí)中斷處理程序(handler)98在由用戶制成的ISR80~87中使用,和調(diào)度程序6以及調(diào)度器(dispatcher)7一同向該任務(wù)的狀態(tài)轉(zhuǎn)移。參照?qǐng)D5說明各任務(wù)91~97、定時(shí)中斷處理程序(handler)98、調(diào)度程序6以及調(diào)度器(dispatcher)7的功能和ISR80~87的狀態(tài)。
ISR80~87分別具有休眠(dormnt)狀態(tài)401、中斷等待(notready)狀態(tài)402、執(zhí)行等待(ready)狀態(tài)403、執(zhí)行(running)狀態(tài)404、信標(biāo)等待狀態(tài)(sem_wait)狀態(tài)405,以及執(zhí)行停止(sleep)狀態(tài)406的6個(gè)狀態(tài)。
所謂休眠(dormnt)狀態(tài)401是ISR80~87只在程序存儲(chǔ)單元2中存在的狀態(tài),即在程序存儲(chǔ)單元2中ISR80~87只作為命令代碼存在而不可以使用的狀態(tài)。當(dāng)ISR80~87處于休眠(dormnt)狀態(tài)401的情況下,因?yàn)闊o法使用ISR80~87,所以在ICB40~47的有效/無效標(biāo)志1711(參照?qǐng)D3)中設(shè)定“0”,當(dāng)發(fā)生了與ISR80~87對(duì)應(yīng)的中斷的情況下變?yōu)殄e(cuò)誤。在休眠(dormnt)狀態(tài)401中,只是ISR生成任務(wù)(cre_tsk)91可以執(zhí)行。
ISR生成任務(wù)91把與應(yīng)該制作的ISR80~87對(duì)應(yīng)的ICB40~47的有效/無效標(biāo)志1711中設(shè)定為“1”,把應(yīng)該制作的ISR80~87從休眠(dormnt)狀態(tài)401轉(zhuǎn)移到中斷等待狀態(tài)402。另外,ISR生成任務(wù)91進(jìn)行ICB40~47的初始設(shè)定從而可以使用用戶為了實(shí)現(xiàn)所希望的功能而需要的ISR80~87。
所謂中斷等待狀態(tài)402是從休眠(dormnt)狀態(tài)401轉(zhuǎn)移(執(zhí)行了ISR生成任務(wù)91)的狀態(tài),或者未發(fā)生中斷的狀態(tài),是未執(zhí)行ISR80~87的狀態(tài)。從休眠(dormnt)狀態(tài)401、執(zhí)行狀態(tài)404、信標(biāo)等待狀態(tài)405,或者執(zhí)行停止?fàn)顟B(tài)406向中斷等待狀態(tài)402轉(zhuǎn)移。當(dāng)ISR80~87處于中斷等待狀態(tài)402的情況下,在ICB40~47的ready/not ready標(biāo)志1712(參照?qǐng)D3)中設(shè)定“0”。
ISR確定任務(wù)(sta_tsk)92把ISR80~87從休眠(dormnt)狀態(tài)401轉(zhuǎn)移到中斷等待狀態(tài)402。ISR起動(dòng)任務(wù)92是在與ISR80~87對(duì)應(yīng)的中斷發(fā)生時(shí)CPU11執(zhí)行的中斷處理程序(handler),在把與所發(fā)生的中斷對(duì)應(yīng)的ICB40~47的ready/not ready標(biāo)志1712設(shè)置為“1”的同時(shí),對(duì)ICB40~47進(jìn)行初始化。
所謂中斷等待狀態(tài)402是通過與ISR80~87對(duì)應(yīng)的中斷發(fā)生而使中斷處理即ISR80~87的執(zhí)行處于等待的狀態(tài)。當(dāng)ISR80~87處于中斷等待狀態(tài)402的情況下,在ICB40~47的ready/not ready標(biāo)志1712中設(shè)定“1”。
調(diào)度程序6以及調(diào)度器(dispatcher)7基于ICB40~47從中斷等待狀態(tài)402的ISR80~87中選擇應(yīng)該執(zhí)行的ISR80~87,即優(yōu)先順序最高的ISR80~87,通過向選擇出的ISR80~87進(jìn)行轉(zhuǎn)移處理,轉(zhuǎn)移到執(zhí)行狀態(tài)404。
具體地說,調(diào)度程序6在從ISR起動(dòng)任務(wù)92、信標(biāo)取得任務(wù)93a、信標(biāo)解放任務(wù)94、ISR延遲任務(wù)95、ISR恢復(fù)任務(wù)96、ISR結(jié)束任務(wù)97,或者定時(shí)中斷處理程序(handler)98進(jìn)行轉(zhuǎn)移(起動(dòng))處理后,基于這些任務(wù)92、93a、94~97,或者與執(zhí)行了定時(shí)中斷處理程序(handler)98的ISR80~87對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172(參照?qǐng)D3)判定是否應(yīng)該執(zhí)行ISR80~87。調(diào)度程序6在判定為應(yīng)該執(zhí)行的情況下進(jìn)行向調(diào)度器(dispatcher)7轉(zhuǎn)移的處理。
調(diào)度器(dispatcher)7從ICB40~47的連結(jié)的開頭開始順序判定是否在ready/not ready標(biāo)志1712中設(shè)定了“1”,最初選擇與在ready/not ready標(biāo)志1712中設(shè)定了“1”的ICB40~47對(duì)應(yīng)的ISR80~87,通過進(jìn)行向選擇出的ISR80~87的轉(zhuǎn)移處理而轉(zhuǎn)移到執(zhí)行狀態(tài)404。所謂執(zhí)行狀態(tài)404是執(zhí)行ISR80~87的處理的狀態(tài)。
信標(biāo)取得標(biāo)志(wai_sem,pol_sem)93a、93b在執(zhí)行狀態(tài)404的ISR80~87取得任意的信標(biāo)時(shí)起動(dòng),基于信標(biāo)構(gòu)造體21~23取得信標(biāo)。信標(biāo)取得任務(wù)93a在能夠取得信標(biāo)的情況下恢復(fù)到起動(dòng)原(調(diào)出原的下一地址)。當(dāng)不能取得信標(biāo)的情況下把ISR80~87轉(zhuǎn)移到信標(biāo)等待狀態(tài)405。信標(biāo)取得任務(wù)93b并不是把ISR80~87轉(zhuǎn)移到信標(biāo)等待狀態(tài)405,而是持有是否已經(jīng)取得信標(biāo)的信息恢復(fù)到調(diào)出原的下一地址。
所謂信標(biāo)等待狀態(tài)405是在ISR80~87想要使用信標(biāo)取得任務(wù)93a取得信標(biāo)時(shí)無法取得信標(biāo)的情況下,即在與要取得的的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23(參照?qǐng)D4)的信標(biāo)值211中設(shè)定“0”,在所有ISR212中設(shè)定信標(biāo)的數(shù)量的ISR識(shí)別符,在等待ISR213中至少設(shè)定1個(gè)ISR識(shí)別符的狀態(tài)。
信標(biāo)放開任務(wù)(sig_sem)94在ISR80~87處于執(zhí)行狀態(tài)404在放開由信標(biāo)取得任務(wù)93a、93b取得的信標(biāo)時(shí)使用,把信標(biāo)等待狀態(tài)405的ISR80~87轉(zhuǎn)移到執(zhí)行等待狀態(tài)403。信標(biāo)放開任務(wù)94在把信標(biāo)等待狀態(tài)405的ISR80~87轉(zhuǎn)移到執(zhí)行等待狀態(tài)403時(shí),把與轉(zhuǎn)移的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)等待標(biāo)志1714設(shè)置為“0”。
ISR延遲任務(wù)(dly_tak)95是在ISR80~87處于執(zhí)行狀態(tài)404的情況下,在想中斷執(zhí)行時(shí)起動(dòng)的任務(wù),把ISR80~87從執(zhí)行狀態(tài)404向執(zhí)行停止?fàn)顟B(tài)406轉(zhuǎn)移。
所謂執(zhí)行停止?fàn)顟B(tài)406是使ISR80~87的執(zhí)行停止的狀態(tài),在ICB40~47的延遲中標(biāo)志1718設(shè)定“1”。執(zhí)行停止?fàn)顟B(tài)406通過ISR恢復(fù)任務(wù)96或者經(jīng)過規(guī)定時(shí)間(定時(shí)中斷處理程序(handler)98)而轉(zhuǎn)移到執(zhí)行等待狀態(tài)403。
ISR恢復(fù)任務(wù)96把與恢復(fù)對(duì)象的ISR80~87對(duì)應(yīng)的ICB40~47的延遲中標(biāo)志1718設(shè)定為“OFF”,在ready/not ready標(biāo)志1712中設(shè)定“ON”,通過初始化延遲時(shí)間計(jì)數(shù)器179的值,在經(jīng)過應(yīng)該延遲的時(shí)間前,強(qiáng)制性地把恢復(fù)對(duì)象的ISR80~87從執(zhí)行停止?fàn)顟B(tài)406轉(zhuǎn)移到執(zhí)行等待狀態(tài)403。
定時(shí)中斷處理程序(handler)98在處理器1內(nèi)的定時(shí)器(未圖示)的計(jì)數(shù)值每次改變時(shí)起動(dòng),改變ICB40~47的延遲時(shí)間計(jì)數(shù)器179的值。定時(shí)中斷處理程序(handler)98在ICB40~47的延遲時(shí)間計(jì)數(shù)器179的值為“0”時(shí),在該ICB40~47的狀態(tài)標(biāo)志171的延遲中標(biāo)志1718中設(shè)定“0”的同時(shí),在ready/not ready標(biāo)志1712中設(shè)定“1”,把ISR80~87從執(zhí)行停止?fàn)顟B(tài)406轉(zhuǎn)移到執(zhí)行等待狀態(tài)403。
ISR結(jié)束任務(wù)(ext_tsk)97在ISR80~87的結(jié)束時(shí)起動(dòng),基于與起動(dòng)的ISR80~87對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值使ISR80~87結(jié)束,把ISR80~87從執(zhí)行狀態(tài)404向中斷狀態(tài)402轉(zhuǎn)移。
以下,參照?qǐng)D6~圖16的流程圖說明本發(fā)明的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的動(dòng)作。而且假設(shè),在執(zhí)行各任務(wù)91~97,以及定時(shí)中斷處理程序(handler)98時(shí),CPU11把程序計(jì)數(shù)器12的值以及寄存器13內(nèi)的堆棧計(jì)數(shù)器的值即堆棧指針存儲(chǔ)在堆棧區(qū)域中。另外,假設(shè)在回到調(diào)出原(起動(dòng)原)的下一地址時(shí)中斷禁止?fàn)顟B(tài)被解除。進(jìn)而,假設(shè)在電源接入時(shí),通過來自外部的系統(tǒng)復(fù)位,ICB40~47被初始化。
首先,參照?qǐng)D6的流程圖說明把ISR80~87從圖5所示的休眠(dormnt)狀態(tài)401轉(zhuǎn)移到中斷等待狀態(tài)402的ISR生成任務(wù)91的ISR生成處理的動(dòng)作。
ISR生成任務(wù)91把CPU11的動(dòng)作模式設(shè)置成中斷禁止?fàn)顟B(tài)(步驟S100)。具體地說,ISR生成任務(wù)91把上述控制器寄存器14的每個(gè)中斷信號(hào)的屏蔽標(biāo)志全部設(shè)置為ON。
ISR生成任務(wù)91把上下文保存(存儲(chǔ))在堆棧區(qū)域(步驟S101)。ISR生成任務(wù)91因?yàn)閺恼顟B(tài)程序80開始起動(dòng),所以恢復(fù)到正常狀態(tài)程序80(回到調(diào)出原的下一地址),把為了繼續(xù)進(jìn)行ISR生成任務(wù)91起動(dòng)前的處理所需要的通用寄存器的值等的上下文保存在堆棧區(qū)域。在堆棧區(qū)域的什么地方存儲(chǔ)上下文,和一般的程序一樣使用堆棧指針值來確定。
以下,把存儲(chǔ)在堆棧區(qū)域上的上下文,和在ISR80~87起動(dòng)各任務(wù)91~97或者定時(shí)中斷處理程序(handler)98時(shí)CPU11存儲(chǔ)在堆棧區(qū)域上的程序計(jì)數(shù)器12的值以及寄存器群13內(nèi)的堆棧寄存器的值即堆棧指針稱為處理器上下文,把除了堆棧寄存器的寄存器群13,和除了程序計(jì)數(shù)器12的值的程序的恢復(fù)所需要的數(shù)據(jù)稱為上下文。
ISR生成任務(wù)91確認(rèn)與應(yīng)該生成的ISR80~87對(duì)應(yīng)的ICB40~47的狀態(tài)標(biāo)志171的有效/無效標(biāo)志1711是否是ON(這種情況下是“1”)(步驟S102)。
當(dāng)有效/無效標(biāo)志1711是“ON”的情況下,表示應(yīng)該制成的ISR80~87已經(jīng)制成。ISR生成任務(wù)91是為了生成應(yīng)該制作的ISR8087而起動(dòng)的任務(wù),已經(jīng)制成ISR80~87(有效/無效標(biāo)志1711是ON)是在程序中發(fā)生異常的情況。因而,ISR生成任務(wù)91回到錯(cuò)誤(表示ISR生成錯(cuò)誤的代碼)并返回調(diào)出原的下一地址(步驟S103)。
另一方面,當(dāng)有效/無效標(biāo)志1711是“OFF”(這種情況下是“0”)的情況下,ISR生成任務(wù)91在與應(yīng)該制作的ISR80~807對(duì)應(yīng)的ICB40~47的有效/無效標(biāo)志1711中設(shè)定“ON”的同時(shí),對(duì)ICB40~47進(jìn)行初始化(步驟S104,S105)。
具體地說,ISR生成任務(wù)91在與應(yīng)該制作的ISR80~87對(duì)應(yīng)的ICB40~47的有效/無效標(biāo)志1711中設(shè)定“1”,在ready/not ready標(biāo)志1712、信標(biāo)取得中標(biāo)志1713、信標(biāo)等待標(biāo)志1714、中斷級(jí)別變更請(qǐng)求標(biāo)志1715、延遲中標(biāo)志1718,以及ICB位置變更標(biāo)志1719中設(shè)定“0”。
ISR生成任務(wù)91當(dāng)變更預(yù)先規(guī)定的中斷級(jí)別的情況下,在中斷級(jí)別變更請(qǐng)求標(biāo)志1715中設(shè)定“1”的同時(shí),在請(qǐng)求中斷級(jí)別178中設(shè)定受理請(qǐng)求的中斷級(jí)別,當(dāng)不變更中斷級(jí)別的情況下,在中斷變更請(qǐng)求標(biāo)志1715中設(shè)定“0”。
ISR生成任務(wù)91在設(shè)定執(zhí)行次數(shù)的上限值的情況下,在執(zhí)行次數(shù)上限指定標(biāo)志1716中設(shè)定“1”的同時(shí),在執(zhí)行次數(shù)上限值174中設(shè)定執(zhí)行次數(shù)的上限值,當(dāng)不設(shè)定執(zhí)行次數(shù)的上限值的情況下(在執(zhí)行只與中斷發(fā)生的數(shù)量對(duì)應(yīng)的ISR80~87的情況下),在執(zhí)行次數(shù)上限指定標(biāo)志1716設(shè)定“0”。
另外,ISR生成任務(wù)91當(dāng)進(jìn)行堆棧溢出檢驗(yàn)的情況下,在堆棧溢出檢驗(yàn)請(qǐng)求標(biāo)志1717中設(shè)定“1”,當(dāng)不進(jìn)行堆棧溢出檢驗(yàn)的情況下,在堆棧溢出檢驗(yàn)請(qǐng)求標(biāo)志1717中設(shè)定“0”。
ISR生成任務(wù)91在ISR開頭地址175中設(shè)定存儲(chǔ)著與ICB40~47對(duì)應(yīng)的ISR80~87的開頭代碼的程序存儲(chǔ)單元2的地址,在堆棧底層地址176中設(shè)定上下文保存區(qū)域181的初始值,在堆棧大小177中設(shè)定上下文保存區(qū)域181的大小。
另外,ISR生成任務(wù)91在上下文保存區(qū)域181上設(shè)定在程序地址上設(shè)定的值、上下文保存區(qū)域181的堆棧指針的值。
在對(duì)與應(yīng)該制作的ISR80~87對(duì)應(yīng)的ICB40~47進(jìn)行初始化后,生成標(biāo)志恢復(fù)保存在堆棧區(qū)域中的上下文(把通用寄存器等的值返回到制作任務(wù)起動(dòng)前的狀態(tài))并返回到調(diào)出原的下一地址(步驟S106,S107)。
以下,參照?qǐng)D7的流程圖說明ISR起動(dòng)任務(wù)92的ISR起動(dòng)處理的動(dòng)作。ISR起動(dòng)任務(wù)92把CPU11的動(dòng)作模式設(shè)置成中斷禁止?fàn)顟B(tài),把上下文保存在堆棧區(qū)域(步驟S200,S201)。
ISR起動(dòng)任務(wù)92確認(rèn)與起動(dòng)了(發(fā)生了中斷)ISR起動(dòng)任務(wù)92的中斷對(duì)應(yīng)的ICB40~47的有效/無效標(biāo)志1711是否是“ON”(步驟S202)。
當(dāng)有效/無效標(biāo)志1711是“OFF”的情況下,ISR起動(dòng)任務(wù)92因?yàn)闆]有生成與所發(fā)生的中斷對(duì)應(yīng)的ISR80~87,所以返回例外(表示未生成對(duì)應(yīng)的ISR80~87而ISR起動(dòng)任務(wù)92起動(dòng)的代碼),回到調(diào)出原的下一地址(步驟S203)。
當(dāng)與所發(fā)生的中斷對(duì)應(yīng)的ICB40~47的有效/無效標(biāo)志1711是“ON”的情況下,起動(dòng)標(biāo)志進(jìn)行執(zhí)行次數(shù)上限指定標(biāo)志1716是否是“ON”的判定(步驟S204)。
當(dāng)執(zhí)行次數(shù)上限指定標(biāo)志1716是“ON”的情況下,ISR起動(dòng)任務(wù)92把與所發(fā)生的中斷對(duì)應(yīng)的被設(shè)定在ICB40~47的執(zhí)行計(jì)數(shù)器172中的值和被設(shè)定在執(zhí)行次數(shù)上限值174中的值進(jìn)行比較(步驟S205)。
當(dāng)被設(shè)定在執(zhí)行計(jì)數(shù)器172中的值大于被設(shè)定在執(zhí)行次數(shù)上限值174中的值的情況下,ISR起動(dòng)任務(wù)92返回例外(表示超越執(zhí)行次數(shù)上限值ISR并且起動(dòng)任務(wù)已起動(dòng)的代碼),回到調(diào)出原的下一地址(步驟S203)。
當(dāng)被設(shè)定在執(zhí)行計(jì)數(shù)器172中的值小于等于被設(shè)定在執(zhí)行次數(shù)上限值174中的值的情況下,或者執(zhí)行次數(shù)上限指定標(biāo)志1716是“OFF”的情況下,ISR起動(dòng)任務(wù)92取得被中斷的(已在執(zhí)行ISR起動(dòng)任務(wù)92前執(zhí)行)的ISR80~87的優(yōu)先順序(步驟S206)。
被中斷(已在執(zhí)行ISR起動(dòng)任務(wù)92之前執(zhí)行)的ISR80~87的優(yōu)先順序通過以后敘述的調(diào)度器(dispatcher)7的處理被設(shè)定在數(shù)據(jù)存儲(chǔ)單元3的中斷任務(wù)存儲(chǔ)器的區(qū)域上。ISR起動(dòng)任務(wù)92通過從中斷任務(wù)存儲(chǔ)區(qū)域讀出數(shù)據(jù),取得被中斷(已在執(zhí)行ISR任務(wù)92之前執(zhí)行)的ISR80~87的優(yōu)先順序。所謂中斷任務(wù)存儲(chǔ)是保持當(dāng)前執(zhí)行中的ISR80~87的信息的數(shù)據(jù)存儲(chǔ)單元3的區(qū)域,將在以后敘述,用調(diào)度器(dispatcher)7存儲(chǔ)現(xiàn)在執(zhí)行中的ISR80~87的信息。
ISR起動(dòng)任務(wù)92把保存在堆棧區(qū)域上的處理器上下文保存在與被中斷的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181中(步驟S207)。即,ISR起動(dòng)任務(wù)92把在本任務(wù)起動(dòng)時(shí)CPU11保存在堆棧區(qū)域上的程序計(jì)數(shù)器12的值以及堆棧指針,和在步驟S201中本任務(wù)保存在堆棧區(qū)域上的上下文,拷貝在與本任務(wù)起動(dòng)之前執(zhí)行的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181上進(jìn)行保存。
ISR起動(dòng)任務(wù)92在與已發(fā)生的中斷對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值上加上1(使執(zhí)行計(jì)數(shù)器172計(jì)數(shù)增加)(步驟S208)。另外,ISR起動(dòng)任務(wù)92在與已發(fā)生的中斷對(duì)應(yīng)的ICB40~47的ready/not ready標(biāo)志1712中設(shè)定“NO”(這種情況下是“1”)并向調(diào)度程序6轉(zhuǎn)移處理(步驟S209,S210)。
以下,參照?qǐng)D8的流程圖說明調(diào)度程序6的動(dòng)作。調(diào)度程序6對(duì)于與已發(fā)生的中斷對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值是否大于等于“1”進(jìn)行判定(步驟S300)。當(dāng)與已發(fā)生的中斷對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值小于“1”的情況下,調(diào)度程序6執(zhí)行錯(cuò)誤處理(步驟S301)。當(dāng)與已發(fā)生的中斷對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值大于等于“1”的情況下,調(diào)度程序6向調(diào)度器(dispatcher)7轉(zhuǎn)移(步驟S302)。
以下,參照?qǐng)D9的流程圖說明調(diào)度器(dispatcher)7的動(dòng)作。調(diào)度器(dispatcher)7根據(jù)被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)單元3中的搜索順序,從在ICB排列4中的ICB40~47的連結(jié)的開頭開始順序地搜索ready/notready標(biāo)志1712,取得ready/not ready標(biāo)志1712是否處于“ON”的最初的ICB40~47(步驟S400)。
調(diào)度器(dispatcher)7把被保存在已取得的ICB40~47上的上下文保存區(qū)域181上的上下文拷貝在堆棧區(qū)域上(步驟S401)。調(diào)度器(dispatcher)7把已取得的ICB40~47的優(yōu)先順序存儲(chǔ)在中斷堆棧存儲(chǔ)器中(步驟S402)。
調(diào)度器(dispatcher)7把應(yīng)該從中斷恢復(fù)的地址以及堆棧指針拷貝到堆棧區(qū)域(步驟S403)。具體地說,把已取得的ICB40~47的被保存在上下文保存區(qū)域181上的地址以及堆棧指針的值拷貝在堆棧區(qū)域上。即,在執(zhí)行了恢復(fù)命令時(shí),改寫堆棧區(qū)域的數(shù)據(jù)以便設(shè)定程序計(jì)數(shù)器12以及堆棧寄存器使與已取得的ICB40~47對(duì)應(yīng)的ISR80~87的處理得以執(zhí)行。
調(diào)度器(dispatcher)7對(duì)已取得的ICB40~47的中斷變更請(qǐng)求標(biāo)志1715是否是“ON”進(jìn)行判定(步驟S404)。當(dāng)已取得的ICB40~47的中斷級(jí)別變更請(qǐng)求標(biāo)志1715是“ON”的情況下,調(diào)度器(dispatcher)7把在已取得的ICB40~47的請(qǐng)求中斷級(jí)別178中設(shè)定的值拷貝到堆棧區(qū)域(步驟S405)。由此,在根據(jù)恢復(fù)命令從中斷恢復(fù)時(shí),成為被設(shè)定在請(qǐng)求中斷級(jí)別178中的值的中斷級(jí)別。
在把被設(shè)定在請(qǐng)求中斷級(jí)別178中的值拷貝到堆棧區(qū)域上后,或者當(dāng)中斷級(jí)別變更請(qǐng)求標(biāo)志1715是“OFF”的情況下,調(diào)度器(dispatcher)7執(zhí)行來自中斷的恢復(fù)命令,執(zhí)行與已取得的ICB40~47對(duì)應(yīng)的ISR80~87(步驟S406~S407)。
以下,參照?qǐng)D10的流程圖,說明信標(biāo)取得任務(wù)93a的信標(biāo)取得處理(當(dāng)無法取得信標(biāo)的情況下轉(zhuǎn)移到信標(biāo)等待狀態(tài)405的處理)的動(dòng)作。
信標(biāo)取得任務(wù)93a把CPU11的動(dòng)作模式設(shè)置成中斷禁止?fàn)顟B(tài),在與起動(dòng)了本任務(wù)(執(zhí)行中的)的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181上保存處理器上下文(步驟S500,S501)。
信標(biāo)取得任務(wù)93a確認(rèn)所要求的信標(biāo)(請(qǐng)求信標(biāo))是否存在(步驟S502)。具體地說,信標(biāo)取得任務(wù)93a對(duì)與對(duì)象信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的信標(biāo)值211的值是否大于等于“1”進(jìn)行判定,當(dāng)信標(biāo)值211的值是大于等于“1”的情況下,確認(rèn)為請(qǐng)求信標(biāo)存在,當(dāng)信標(biāo)值211是“0”的情況下確認(rèn)為所要求的信標(biāo)不存在。
當(dāng)請(qǐng)求信標(biāo)存在的情況下,信標(biāo)取得任務(wù)93a在與請(qǐng)求信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的所有ISR212中設(shè)定執(zhí)行中的ISR80~87的ISR識(shí)別符(步驟S503)。
信標(biāo)取得任務(wù)93a在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)取得中標(biāo)志1713中設(shè)定“ON”(步驟S504)。另外,信標(biāo)取得任務(wù)93a從與請(qǐng)求信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的信標(biāo)值211的值中減去1(減少),回到調(diào)出原的下一地址(步驟S505,506)。
另一方面,當(dāng)請(qǐng)求信標(biāo)不存在的情況下,信標(biāo)取得任務(wù)93a在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)等待索引173中設(shè)定所要求的信標(biāo)索引(步驟S507)。
信標(biāo)取得任務(wù)93a在設(shè)定與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB4047的信標(biāo)等待標(biāo)志1714中設(shè)定“ON”的同時(shí),在ready/not ready標(biāo)志1712中設(shè)定“OFF”(步驟S508)。由此,執(zhí)行中的ISR80~87從執(zhí)行狀態(tài)404轉(zhuǎn)移到信標(biāo)等待狀態(tài)405。
信標(biāo)取得任務(wù)93a在與請(qǐng)求信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的等待ISR213中設(shè)定執(zhí)行中的ISR80~87的ISR識(shí)別符,向調(diào)度程序6轉(zhuǎn)移處理(步驟S509,S510)。
以下,參照?qǐng)D11的流程圖,說明信標(biāo)解放任務(wù)94的信標(biāo)解放處理的動(dòng)作。信標(biāo)解放任務(wù)94把CPU11的動(dòng)作模式設(shè)置成中斷禁止?fàn)顟B(tài),在與解放信標(biāo)(起動(dòng)了信標(biāo)解放任務(wù)94)的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181上存儲(chǔ)處理器上下文(步驟S600,S601)。
信標(biāo)解放任務(wù)94在與解放信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)取得中標(biāo)志1713中設(shè)定“OFF”(步驟S602)。信標(biāo)解放任務(wù)94對(duì)等待已被解放的信標(biāo)的ISR80~87是否存在進(jìn)行判定(步驟S603)。具體地說,信標(biāo)解放任務(wù)94判定在與被解放的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的等待ISR213中是否設(shè)定了ISR識(shí)別符。
當(dāng)?shù)却驯唤夥诺男艠?biāo)的ISR80~87不存在的情況下,信標(biāo)解放任務(wù)94增加與已被解放的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的信標(biāo)值211的值(步驟S604)。
信標(biāo)解放任務(wù)94恢復(fù)在步驟S601中存儲(chǔ)在與進(jìn)行信標(biāo)解放的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181上的處理器上下文(拷貝到堆棧區(qū)域),回到起動(dòng)了信標(biāo)解放任務(wù)94的調(diào)出原的下一地址(步驟S605,S606)。
另一方面,當(dāng)?shù)却夥诺男艠?biāo)的ISR80~87存在的情況下,信標(biāo)解放任務(wù)94在清除與等待著信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)等待索引173的同時(shí),在信標(biāo)等待標(biāo)志1714中設(shè)定“OFF”,在ready/not ready標(biāo)志1712中設(shè)定“ON”(步驟S607)。
信標(biāo)解放任務(wù)94清除與解放的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的等待ISR213(步驟S608)。在等待ISR213中,設(shè)定等待著解放的信標(biāo)的ISR80~87的ISR識(shí)別符。當(dāng)在等待ISR213中設(shè)定多個(gè)ISR識(shí)別符的情況下,信標(biāo)解放任務(wù)94按照預(yù)先規(guī)定的順序選擇接著取得信標(biāo)的ISR80~87。例如,可以選擇設(shè)定在最先等待ISR213中的ISR80~87,也可以選擇設(shè)定在等待ISR213中的ISR80~87的中優(yōu)先順序?yàn)樽罡叩腎SR80~87。
信標(biāo)解放任務(wù)94在與被放開的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的所有ISR212中設(shè)定選擇出的ISR80~87的ISR識(shí)別符(步驟S609)。即,把擁有的ISR212的設(shè)定變更為已處于信標(biāo)等待的ISR80~87。其后,信標(biāo)解放任務(wù)94把處理轉(zhuǎn)移到調(diào)度程序6(步驟S610)。
以下,參照?qǐng)D12的流程圖說明信標(biāo)取得任務(wù)93b的信標(biāo)取得處理(即在無法取得信標(biāo)的情況下也不向信標(biāo)取得等待狀態(tài)轉(zhuǎn)移的處理)的動(dòng)作。而且,對(duì)于所要求的信標(biāo)存在并取得信標(biāo)的步驟S700~S706來說,因?yàn)楹蛥⒄涨懊鎴D10的流程圖說明的信標(biāo)取得任務(wù)93a的信標(biāo)取得處理步驟S500~506的動(dòng)作相同,故省略其詳細(xì)的說明。
信標(biāo)取得任務(wù)93b把CPU11的動(dòng)作模式設(shè)置成中斷禁止?fàn)顟B(tài),在與起動(dòng)了信標(biāo)取得任務(wù)93b(當(dāng)前執(zhí)行中)的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181中存儲(chǔ)處理器上下文,確認(rèn)是否存在所要求的信標(biāo)(對(duì)象信標(biāo))(步驟S700~702)。
當(dāng)所要求的信標(biāo)(要求信標(biāo))存在的情況下,信標(biāo)取得任務(wù)93b在所要求的信標(biāo)構(gòu)造體21~23的所有ISR212中設(shè)定當(dāng)前執(zhí)行中的ISR80~87的ISR識(shí)別符(步驟S703)。
信標(biāo)取得任務(wù)93b在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)取得中標(biāo)志1713中設(shè)定“ON”的同時(shí),減少與放開的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的信標(biāo)值211的值,返回調(diào)出原的下一地址(步驟S704~S706)。
另一方面,當(dāng)請(qǐng)求信標(biāo)不存在的情況下,信標(biāo)取得任務(wù)93b退回錯(cuò)誤(表示無法取得信標(biāo)的代碼),回到調(diào)出原的下一地址(步驟S707)。
以下,參照?qǐng)D13的流程圖說明ISR延遲任務(wù)95的延遲處理的動(dòng)作。ISR延遲任務(wù)95把CPU11的動(dòng)作模式設(shè)置成中斷禁止?fàn)顟B(tài),把上下文保存在堆棧區(qū)域(步驟S800,S801)。
ISR延遲任務(wù)95在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的狀態(tài)標(biāo)志171的ready/not ready標(biāo)志1712中設(shè)定“OFF”,在延遲中標(biāo)志1718中設(shè)定“ON”(步驟S802,S803)。由此,執(zhí)行中的ISR80~87從執(zhí)行狀態(tài)404轉(zhuǎn)移到執(zhí)行停止?fàn)顟B(tài)406。
ISR延遲任務(wù)95把停留在執(zhí)行停止?fàn)顟B(tài)406的時(shí)間,即使起動(dòng)了ISR延遲任務(wù)95的ISR80~87延遲的時(shí)間設(shè)定在對(duì)應(yīng)的ICB40~47的延遲時(shí)間計(jì)數(shù)器179中并把處理轉(zhuǎn)移到調(diào)度程序6(步驟S804,S805)。
用以后敘述的定時(shí)中斷處理程序(handler)98減少延遲時(shí)間計(jì)數(shù)器179的值。因而,設(shè)定在延遲時(shí)間計(jì)數(shù)器179中的值成為“使其延遲的時(shí)間/定時(shí)中斷處理程序(handler)98起動(dòng)的時(shí)間”。在此,所謂定時(shí)中斷處理程序(handler)98起動(dòng)的時(shí)間是由處理器1內(nèi)的定時(shí)器(未圖示)產(chǎn)生的中斷時(shí)間。
以下,參照?qǐng)D14的流程圖說明ISR恢復(fù)任務(wù)96的延遲恢復(fù)處理的動(dòng)作。ISR恢復(fù)任務(wù)96把CPU11的動(dòng)作模式設(shè)置為中斷禁止?fàn)顟B(tài),把上下文保存在堆棧區(qū)域(步驟S900,S901)。
ISR恢復(fù)任務(wù)96在與從執(zhí)行停止?fàn)顟B(tài)406恢復(fù)的(恢復(fù)對(duì)象)ISR80~87對(duì)應(yīng)的ICB40~47的狀態(tài)標(biāo)志171的ready/not ready標(biāo)志1712中設(shè)定“ON”,在延遲中標(biāo)志1718中設(shè)定“OFF”(步驟S902,S903)。由此,恢復(fù)對(duì)象的ISR80~87從執(zhí)行停止?fàn)顟B(tài)406轉(zhuǎn)移到執(zhí)行等待狀態(tài)403。
ISR恢復(fù)任務(wù)96初始化(例如,設(shè)定“null”)與恢復(fù)對(duì)象ISR80~87對(duì)應(yīng)的ICB40~47的延遲時(shí)間計(jì)數(shù)器179的值,把處理轉(zhuǎn)移到調(diào)度程序6(步驟S904,S905)。
以下,參照?qǐng)D15的流程圖說明定時(shí)中斷處理程序(handler)98的定時(shí)中斷處理的動(dòng)作。定時(shí)中斷處理程序(handler)98把上下文保存在堆棧區(qū)域中(步驟S1000)。
定時(shí)中斷處理程序(handler)98把ICB40~47的連結(jié)的開頭的ICB40~47作為處理對(duì)象ICB,對(duì)處理對(duì)象ICB的延遲中標(biāo)志1718是否是ON(“1”)進(jìn)行判定(步驟S1001)。當(dāng)處理對(duì)象ICB的延遲中標(biāo)志1718是ON的情況下,定時(shí)中斷處理程序(handler)98減少處理對(duì)象ICB的延遲時(shí)間計(jì)數(shù)器179的值(步驟S1002)。
定時(shí)中斷處理程序(handler)98對(duì)處理對(duì)象ICB的延遲時(shí)間計(jì)數(shù)器179的值是否是“0”進(jìn)行判定(步驟S1003)。當(dāng)處理對(duì)象ICB的延遲時(shí)間計(jì)數(shù)器179的值是“0”的情況下,定時(shí)中斷處理程序(handler)98在處理對(duì)象ICB的ready/not ready標(biāo)志1712中設(shè)定“ON”的同時(shí),在延遲中標(biāo)志1718中設(shè)定“OFF”(步驟S1004,S1005)。另外,定時(shí)中斷處理程序(handler)98對(duì)處理對(duì)象ICB的延遲時(shí)間計(jì)數(shù)器179進(jìn)行初始化(例如,設(shè)定“null”)(步驟S1006)。
定時(shí)中斷處理程序(handler)98在處理對(duì)象ICB達(dá)到ICB排列4的最末尾的ICB前重復(fù)以下動(dòng)作基于ICB排列4的連結(jié)把與當(dāng)前的處理對(duì)象ICB的下一連結(jié)的ICB40~47作為新的處理對(duì)象ICB,當(dāng)處理對(duì)象ICB的延遲中標(biāo)志1718是ON的情況下,減少延遲時(shí)間計(jì)數(shù)器179的值,當(dāng)減少后的延遲時(shí)間計(jì)數(shù)器179的值是“0”的情況下,把處理對(duì)象ICB的ready/not ready標(biāo)志1712設(shè)置為“ON”,把延遲中標(biāo)志1718設(shè)置為“OFF”并對(duì)自演時(shí)間計(jì)數(shù)器進(jìn)行初始化(步驟S1001~S1008)。
定時(shí)中斷處理程序(handler)98在處理對(duì)象ICB達(dá)到ICB排列4的最末尾的ICB時(shí)轉(zhuǎn)移到調(diào)度程序6處理(步驟S1009)。
以下,參照?qǐng)D16的流程圖說明ISR結(jié)束任務(wù)97的ISR結(jié)束處理的動(dòng)作。ISR結(jié)束任務(wù)97把CPU11的動(dòng)作模式設(shè)置為中斷禁止?fàn)顟B(tài)(步驟S1100)。
ISR結(jié)束任務(wù)97減少與起動(dòng)了本任務(wù)(執(zhí)行中的)的ISR80~87對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值(步驟S1101)。ISR結(jié)束任務(wù)97判定與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值是否是“0”(步驟S1102)。
當(dāng)與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值是“0”的情況下,ISR結(jié)束任務(wù)97在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的ready/not ready標(biāo)志1712中設(shè)定“OFF”(步驟S1103)。由此,執(zhí)行中的ISR80~87從執(zhí)行狀態(tài)404轉(zhuǎn)移到中斷等待狀態(tài)402。
當(dāng)把與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的ready/notready標(biāo)志1712設(shè)置在“OFF”后,或者與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的執(zhí)行計(jì)數(shù)器172的值不是“0”的情況下,ISR結(jié)束任務(wù)97對(duì)與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47進(jìn)行初始化(步驟S1104)。
當(dāng)對(duì)與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的堆棧底層地址176以及上下文保存區(qū)域181進(jìn)行了初始化后,ISR結(jié)束任務(wù)97把處理轉(zhuǎn)移到調(diào)度程序6(步驟S1105)。
這樣在本實(shí)施方式1中,在基于信標(biāo)構(gòu)造體和ICB排列進(jìn)行ISR的調(diào)度時(shí),ISR起動(dòng)任務(wù)進(jìn)行這樣的設(shè)定,即,在把在中斷發(fā)生時(shí)被存儲(chǔ)在堆棧區(qū)域上的處理器上下文存儲(chǔ)在與被中斷的ISR對(duì)應(yīng)的ICB的上下文保存區(qū)域中的同時(shí),在與已發(fā)生的中斷的ISR對(duì)應(yīng)的ICB中處于執(zhí)行等待狀態(tài),調(diào)度程序以及調(diào)度器(dispatcher)作為ISR的調(diào)度處理,選擇在設(shè)定了執(zhí)行等待狀態(tài)的ICB中優(yōu)先順序最高的ICB,把存儲(chǔ)在選擇出的ICB的上下文保存區(qū)域上的處理器上下文存儲(chǔ)在堆棧區(qū)域上,執(zhí)行與用中斷恢復(fù)命令選擇出的ICB對(duì)應(yīng)的ISR。其中的信標(biāo)構(gòu)造體是被適用在用包含正常狀態(tài)的多個(gè)ISR構(gòu)成的中斷軟件中,與在多個(gè)ISR中使用的多個(gè)信標(biāo)對(duì)應(yīng)起來,保持與該信標(biāo)的使用狀態(tài)有關(guān)的信息的構(gòu)造體。其中的ICB排列是具有與多個(gè)ISR的中斷級(jí)別對(duì)應(yīng)地保持與各ISR的狀態(tài)有關(guān)的信息的中斷控制塊(ICB),從ISR的中斷級(jí)別的優(yōu)先順序高的ICB開始順序連結(jié)多個(gè)ICB得到排列。
即,在把在中斷發(fā)生時(shí)被存儲(chǔ)在堆棧區(qū)域上的處理器上下文存儲(chǔ)在與已中斷的ISR對(duì)應(yīng)的ICB的上下文保存區(qū)域上的同時(shí),使已發(fā)生的中斷的ISR轉(zhuǎn)移到執(zhí)行等待狀態(tài),把存儲(chǔ)在在執(zhí)行等待狀態(tài)的ISR中優(yōu)先順序最高的ISR的ICB的上下文保存區(qū)域上的處理器上下文存儲(chǔ)在堆棧區(qū)域,通過更換根據(jù)中斷恢復(fù)命令恢復(fù)的返回地址,執(zhí)行在執(zhí)行等待狀態(tài)的ISR中優(yōu)先順序最高的ISR。由此,是不使用實(shí)時(shí)OS,實(shí)現(xiàn)同步排他控制的最小限度的構(gòu)造(只有ISR),和使用實(shí)時(shí)OS的情況相比能夠減少在產(chǎn)品中需要的存儲(chǔ)器容量。
另外,在本實(shí)施方式1中,信標(biāo)取得標(biāo)志在與執(zhí)行中的ISR要求的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的值大于等于1的情況下,在減少該信標(biāo)數(shù)的值的同時(shí),把要求信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該所有ISR取得信標(biāo),當(dāng)與要求的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體的信標(biāo)數(shù)比1小的情況下,把要求信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該等待ISR,在與要求了信標(biāo)的ISR對(duì)應(yīng)的ICB中設(shè)定信標(biāo)等待狀態(tài),信標(biāo)解放任務(wù)在增加與執(zhí)行中的ISR放開的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的同時(shí),對(duì)放開被設(shè)定在該擁有ISR中的信標(biāo)的ISR的ISR識(shí)別符進(jìn)行刪除,當(dāng)在該等待ISR中設(shè)定ISR識(shí)別符的情況下,在減少該信標(biāo)數(shù)的同時(shí),把被設(shè)定在該ISR中的ISR識(shí)別符設(shè)定在該所有ISR上,刪除被設(shè)定在該ISR上的ISR識(shí)別符,在與新取得信標(biāo)的ISR對(duì)應(yīng)起來的ICB中設(shè)定執(zhí)行等待狀態(tài)。
即,當(dāng)無法取得所要求的信標(biāo)的情況下,把要求了信標(biāo)的ISR轉(zhuǎn)移到信標(biāo)等待狀態(tài)并暫停其處理,在取得所要求的信標(biāo)的ISR放開了信標(biāo)時(shí),使信標(biāo)等待狀態(tài)的ISR取得已放開的信標(biāo)并轉(zhuǎn)移到執(zhí)行等待狀態(tài)。由此,即使在不使用實(shí)時(shí)OS,只用ISR執(zhí)行同步排他控制的情況下,也可以實(shí)現(xiàn)利用了信標(biāo)的同步排他處理。
另外,在本實(shí)施方式1中,ISR起動(dòng)任務(wù)在每次發(fā)生中斷時(shí),增加與進(jìn)行所發(fā)生的中斷處理的ISR對(duì)應(yīng)的ICB的執(zhí)行計(jì)數(shù)器的值并在ICB中保持中斷次數(shù),調(diào)度器(dispatcher)只以執(zhí)行計(jì)數(shù)器保持的中斷次數(shù)把該ICB作為選擇對(duì)象,并只以上述中斷次數(shù)執(zhí)行自身對(duì)應(yīng)起來的ISR,ISR結(jié)束任務(wù)因?yàn)闇p少執(zhí)行計(jì)數(shù)器的值,所以在即使不使用實(shí)時(shí)OS而只用ISR實(shí)現(xiàn)同步排他控制的情況下,也可以識(shí)別發(fā)生了幾次中斷,并只按中斷發(fā)生次數(shù)執(zhí)行處理。
實(shí)施方式2.
用圖17~圖21(表示圖21-1,圖21-2)說明本發(fā)明的實(shí)施方式2。在本實(shí)施方式2中是避免在利用信標(biāo)時(shí)產(chǎn)生的優(yōu)先權(quán)(中斷級(jí)別的優(yōu)先順序)的逆轉(zhuǎn)。
首先,參照?qǐng)D5以及圖17說明優(yōu)先權(quán)的逆轉(zhuǎn)。而且,為了簡(jiǎn)單說明,在此假設(shè)信標(biāo)數(shù)為1,在1個(gè)ISR取得信標(biāo)時(shí)另一任務(wù)不能取得信標(biāo)。
在圖17中,左軸1601表示優(yōu)先順序位,下軸1602表示時(shí)間軸(經(jīng)過時(shí)間),ISR1603是在ISR1603~1606中優(yōu)先順序最高(優(yōu)先權(quán)4)的任務(wù),ISR1604是接著ISR1603的高優(yōu)先順序(優(yōu)先權(quán)3)的任務(wù),ISR1605是接著ISR1604的高優(yōu)先順序(優(yōu)先權(quán)2)的任務(wù),ISR1606是在ISR1603~1606中優(yōu)先順序最低(優(yōu)先權(quán)1)的任務(wù)。
在時(shí)刻t1中ISR1606起動(dòng)。在時(shí)刻t1中,因?yàn)橹挥蠭SR1606起動(dòng),所以ISR1606處于執(zhí)行狀態(tài)404并取得信標(biāo)。
在時(shí)刻t2中ISR1603起動(dòng)。ISR1603優(yōu)先權(quán)是4,因?yàn)閳?zhí)行狀態(tài)的ISR1606的優(yōu)先權(quán)是1,所以ISR1606處于執(zhí)行等待狀態(tài)403,而ISR1603處于執(zhí)行狀態(tài)404。
在時(shí)刻t3中,雖然執(zhí)行狀態(tài)404的ISR1603要取得信標(biāo),但因?yàn)镮SR1606已取得共用的信標(biāo),所ISR1603處于信標(biāo)等待狀態(tài)405。因此,雖然優(yōu)先權(quán)比ISR1603還低,但已取得信標(biāo)的ISR1606處于執(zhí)行狀態(tài)404。
在時(shí)刻t4中ISR1604、1605起動(dòng),因?yàn)镮SR1604的優(yōu)先權(quán)是3,ISR1605的優(yōu)先權(quán)是2,所以執(zhí)行狀態(tài)404的ISR1606處于執(zhí)行等待狀態(tài)403,ISR1604處于執(zhí)行狀態(tài)404。即,與優(yōu)先權(quán)最高的優(yōu)先權(quán)4的ISR1603相比,還是前面優(yōu)先權(quán)低的ISR1604處于執(zhí)行狀態(tài)404。
在時(shí)刻t5中ISR1604結(jié)束(轉(zhuǎn)移到中斷等待狀態(tài)402)。在時(shí)刻t5中,ISR1603、1605、1606處于等待狀態(tài)。在等待狀態(tài)(執(zhí)行等待狀態(tài)403及信標(biāo)等待狀態(tài)405)的ISR1603、1605、1606中,ISR1603優(yōu)先權(quán)最高。但是,ISR1603是等待ISR1606已取得的信標(biāo)放開的信標(biāo)等待狀態(tài)405,不能向執(zhí)行狀態(tài)404轉(zhuǎn)移。因而,接著ISR1603的優(yōu)先權(quán)高的ISR1605處于執(zhí)行狀態(tài)404。
在時(shí)刻t6中ISR1605結(jié)束。在時(shí)刻t6中,ISR1603、ISR1606處于等待狀態(tài)。ISR1603雖然比ISR1606優(yōu)先權(quán)還高,但因?yàn)樘幱诘却齀SR1606已取得的信標(biāo)的信標(biāo)等待狀態(tài)405,所以ISR1606處于執(zhí)行狀態(tài)404。
在時(shí)刻t7中ISR1606放開信標(biāo)而結(jié)束處理。因?yàn)樾艠?biāo)被放開,所以信標(biāo)等待狀態(tài)405的ISR1603經(jīng)過執(zhí)行等待狀態(tài)403變?yōu)閳?zhí)行狀態(tài)404,取得信標(biāo)而再次開始處理。
這樣,當(dāng)因?yàn)閮?yōu)先權(quán)1的ISR1606取得信標(biāo),所以優(yōu)先權(quán)4的ISR1603在成為信標(biāo)等待狀態(tài)405的情況下,如果優(yōu)先權(quán)2、3的ISR1604、1605起動(dòng),則在執(zhí)行了優(yōu)先權(quán)比已取得信標(biāo)的ISR1606的優(yōu)先權(quán)還高的ISR1604、1605后執(zhí)行ISR1606,最后執(zhí)行優(yōu)先權(quán)最高的ISR1603狀態(tài),即處于優(yōu)先權(quán)逆轉(zhuǎn)的形態(tài),把ISR1603~1606的執(zhí)行順序變化稱為優(yōu)先權(quán)的逆轉(zhuǎn)。
為了防止優(yōu)先權(quán)的逆轉(zhuǎn),只要交換已取得信標(biāo)的ISR,和與ISR共用信標(biāo)并且處于信標(biāo)等待狀態(tài)的ISR的優(yōu)先權(quán)即可。但是,在已取得信標(biāo)的ISR的優(yōu)先權(quán)比和該ISR共用信標(biāo)并且處于信標(biāo)等待狀態(tài)的ISR的優(yōu)先權(quán)還高的情況下,因?yàn)椴话l(fā)生優(yōu)先權(quán)的逆轉(zhuǎn),所以取得信標(biāo)的ISR的優(yōu)先權(quán)只在比和該ISR共用信標(biāo)并且處于信標(biāo)等待狀態(tài)的ISR的優(yōu)先權(quán)還低的情況下,交換ISR之間的優(yōu)先權(quán)。
具體地說,在前面的圖17的時(shí)刻t3中,在ISR1603轉(zhuǎn)移到信標(biāo)等待狀態(tài)405時(shí)進(jìn)行把ISR1606設(shè)置成優(yōu)先權(quán)4,把自身優(yōu)先權(quán)設(shè)置為優(yōu)先權(quán)1的優(yōu)先權(quán)的交換。由此,如圖18所示,即使優(yōu)先權(quán)3的ISR1604和優(yōu)先權(quán)2的ISR1605起動(dòng),已取得了優(yōu)先權(quán)的ISR1606也處于執(zhí)行狀態(tài)404。
在時(shí)刻t4a中ISR1606放開信標(biāo)而結(jié)束處理。此時(shí)ISR1606進(jìn)行把信標(biāo)等待狀態(tài)405的ISR1603設(shè)置成優(yōu)先權(quán)4,把自身的優(yōu)先權(quán)設(shè)置為優(yōu)先權(quán)1的交換,即返回到原本的優(yōu)先權(quán)并結(jié)束處理。由此,如圖19所示,比ISR1604、ISR1605還在前面的ISR1603處于執(zhí)行狀態(tài)404,按照ISR1603、ISR1604、ISR1605這一原本的優(yōu)先順序進(jìn)行處理,避免利用信標(biāo)時(shí)的優(yōu)先權(quán)的逆轉(zhuǎn)。
以下,說明避免利用信標(biāo)時(shí)的優(yōu)先權(quán)的逆轉(zhuǎn)的本實(shí)施方式2的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序。適用本實(shí)施方式2的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的裝置的構(gòu)成因?yàn)楹颓懊鎴D1所示的實(shí)施方式1的裝置的構(gòu)成相同,所以在此省略其說明。
在本發(fā)明中的實(shí)施方式2的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序代替前面圖2所示的實(shí)施方式1的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的信標(biāo)取得任務(wù)93a以及信標(biāo)解放任務(wù)94,具備信標(biāo)取得任務(wù)93c以及信標(biāo)解放任務(wù)94a。
信標(biāo)取得任務(wù)93c除了信標(biāo)取得任務(wù)93a的功能外,具備當(dāng)不能取得所要求的信標(biāo)(轉(zhuǎn)移到信標(biāo)等待狀態(tài)405)的情況下,對(duì)已取得所要求的信標(biāo)的ISR80~87的優(yōu)先權(quán)和執(zhí)行中的ISR80~87的優(yōu)先權(quán)進(jìn)行交換(變更)的功能。
信標(biāo)解放任務(wù)94a除了信標(biāo)解放任務(wù)94的功能外,具備當(dāng)對(duì)起動(dòng)了本任務(wù)(執(zhí)行中)的ISR80~87的優(yōu)先權(quán)進(jìn)行變更的情況下,把變更的優(yōu)先權(quán)返回到預(yù)先確定的優(yōu)先權(quán)的功能。
以下說明本實(shí)施方式2的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的動(dòng)作。而且,因?yàn)楸緦?shí)施方式2的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序和前面的實(shí)施方式1的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的不同點(diǎn)是信標(biāo)的取得處理以及信標(biāo)放開處理,所以在此只說明實(shí)現(xiàn)信標(biāo)的取得處理的信標(biāo)取得任務(wù)93c,以及實(shí)現(xiàn)信標(biāo)的放開處理的信標(biāo)解放任務(wù)94a的動(dòng)作。
首先,參照?qǐng)D20-1以及圖20-2的流程圖說明信標(biāo)取得任務(wù)93c的動(dòng)作。信標(biāo)取得任務(wù)93c把CPU11的動(dòng)作模式設(shè)置成中斷禁止?fàn)顟B(tài),在與起動(dòng)了本任務(wù)(執(zhí)行中)的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181上保存處理器上下文(圖20-1的步驟S1200,S1201)。
信標(biāo)取得任務(wù)93c確認(rèn)是否存在所要求的信標(biāo)(請(qǐng)求信標(biāo))(步驟S20-1的步驟S1202)。當(dāng)存在要求信標(biāo)的情況下,信標(biāo)取得任務(wù)93c在與請(qǐng)求信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的所有ISR212中設(shè)定執(zhí)行中的ISR80~87的ISR(圖20-1的步驟S1203)。
信標(biāo)取得任務(wù)93c在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)取得中標(biāo)志1713中設(shè)定“ON”(圖20-1的步驟S1204)。另外,信標(biāo)取得任務(wù)93c減少與請(qǐng)求信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的信標(biāo)值211的值,并返回到調(diào)出原的下一地址(圖20-1的步驟S1205,S1206)。
另一方面,當(dāng)請(qǐng)求信標(biāo)不存在的情況下,信標(biāo)取得任務(wù)93c判定已取得請(qǐng)求信標(biāo)的ISR80~87的優(yōu)先順序是否比執(zhí)行中的ISR80~87的優(yōu)先順序還高(圖20-2的步驟S1207)。
具體地說,信標(biāo)取得任務(wù)93c根據(jù)與請(qǐng)求任務(wù)對(duì)應(yīng)的被設(shè)定在信標(biāo)構(gòu)造體21~23的所有ISR212中的ISR識(shí)別符,識(shí)別已取得請(qǐng)求信標(biāo)的ISR80~87。另外,信標(biāo)取得任務(wù)93c用調(diào)度器(dispatcher)7從設(shè)定了執(zhí)行中的ISR80~87的優(yōu)先順序的中斷任務(wù)存儲(chǔ)器中,取得執(zhí)行中的ISR80~87的優(yōu)先順序。信標(biāo)取得任務(wù)93c對(duì)已識(shí)別的ISR80~87的優(yōu)先順序,和從中斷任務(wù)存儲(chǔ)器中取得的優(yōu)先順序進(jìn)行比較,對(duì)已取得請(qǐng)求信標(biāo)的ISR80~87的優(yōu)先順序是否比執(zhí)行中的ISR80~87的優(yōu)先順序還高進(jìn)行判定。
當(dāng)執(zhí)行中的ISR80~87的優(yōu)先順序比取得了請(qǐng)求信標(biāo)的ISR80~87的優(yōu)先順序還高的情況下,信標(biāo)取得任務(wù)93c在與已取得請(qǐng)求信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更標(biāo)志1719中設(shè)定“ON”(圖20-2的步驟S1208)。
另外,信標(biāo)取得任務(wù)93c在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更標(biāo)志1719中設(shè)定“ON”(圖20-2的步驟S1209)。
信標(biāo)取得任務(wù)93c在與已取得請(qǐng)求信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更對(duì)象180中設(shè)定執(zhí)行中的ISR80~87的信息(ISR識(shí)別符)(圖20-2的步驟S1210)。
另外,信標(biāo)取得任務(wù)93c在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更對(duì)象180中設(shè)定已取得請(qǐng)求信標(biāo)的ISR80~87的信息(ISR識(shí)別符)(圖20-2的步驟S1211)。
信標(biāo)取得任務(wù)93c變更ICB40-47的位置(圖20-2的步驟S1212)。具體地說,信標(biāo)取得任務(wù)93c在ICB排列4中的ICB40~47的連結(jié)中,更換與取得了請(qǐng)求信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47,和與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47。由此,對(duì)檢索應(yīng)該執(zhí)行的調(diào)度器(dispatcher)7的ISR80~87的順序進(jìn)行變更以交換優(yōu)先順序。
信標(biāo)取得任務(wù)93c在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)等待索引173中設(shè)定所要求的信標(biāo)索引(圖20-2的步驟S1213)。
信標(biāo)取得任務(wù)93c在與執(zhí)行中的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)等待標(biāo)志1714中設(shè)定“ON”的同時(shí),在ready/not ready標(biāo)志1712中設(shè)定“OFF”(圖20-2的步驟S1214)。信標(biāo)取得任務(wù)93c在與請(qǐng)求信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的等待ISR213中設(shè)定執(zhí)行中的ISR80~87的ISR識(shí)別符,并把處理轉(zhuǎn)移到調(diào)度程序6(圖20-2的步驟S1215,S1216)。
以下,參照?qǐng)D21的流程圖,說明信標(biāo)解放任務(wù)94a的動(dòng)作。信標(biāo)解放任務(wù)94a把CPU11的動(dòng)作模式設(shè)置為中斷禁止?fàn)顟B(tài),在與進(jìn)行信標(biāo)解放(起動(dòng)了信標(biāo)解放任務(wù)94a)的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181上存儲(chǔ)處理器上下文(圖21-1的步驟1300,S1301)。
信標(biāo)解放任務(wù)94a在與進(jìn)行信標(biāo)解放的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)取得中標(biāo)志1713中設(shè)定“OFF”(圖21-1的步驟S1302)。信標(biāo)解放任務(wù)94a對(duì)等待已解放的信標(biāo)的ISR80~87是否存在進(jìn)行判定(圖21-1的步驟S1303)。
當(dāng)?shù)却唤夥诺男艠?biāo)的ISR80~87不存在的情況下,信標(biāo)解放任務(wù)94a增加與已解放的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的信標(biāo)值211的值(圖21-1的步驟S1304)。
信標(biāo)解放任務(wù)94恢復(fù)在步驟S1301中存儲(chǔ)在與進(jìn)行了信標(biāo)解放的ISR80~87對(duì)應(yīng)的ICB40~47的上下文保存區(qū)域181上的處理器上下文(拷貝到堆棧區(qū)域),回到起動(dòng)了信標(biāo)解放任務(wù)94a的調(diào)出原的下一地址(圖21-1的步驟S1305,S1306)。
另一方面,當(dāng)?shù)却呀夥诺男艠?biāo)的ISR80~87存在的情況下,信標(biāo)解放任務(wù)94a在清除與等待著信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的信標(biāo)等待索引173的同時(shí),在信標(biāo)等待標(biāo)志1714中設(shè)定“OFF”,在ready/not ready標(biāo)志1712中設(shè)定“ON”(圖21-1的步驟S1307)。
信標(biāo)解放任務(wù)94清除與已解放的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的等待ISR213(圖21-1的步驟S1308)。信標(biāo)解放任務(wù)94a在與已放開的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體21~23的所有ISR212中設(shè)定選擇出的ISR80~87的ISR識(shí)別符(圖21-1的步驟S1309)。
信標(biāo)解放任務(wù)94a對(duì)與放開信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更標(biāo)志1719是否是“ON”進(jìn)行判定(圖21-2的步驟S1310)。
當(dāng)ICB位置變更標(biāo)志1719是“ON”的情況下,信標(biāo)解放任務(wù)94a在與取得了信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更標(biāo)志1719中設(shè)定“OFF”(圖21-2的步驟S1311)。另外,信標(biāo)解放任務(wù)94a在與放開信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更標(biāo)志1719中設(shè)定“OFF”(步驟S22-2的步驟S1312)。
信標(biāo)解放任務(wù)94a對(duì)與獲得了信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更對(duì)象180進(jìn)行初始化(圖21-2的步驟S1313)。另外,信標(biāo)解放任務(wù)94a對(duì)與放開信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更對(duì)象180進(jìn)行初始化(圖21-2的步驟S1314)。
信標(biāo)解放任務(wù)94a使ICB排列4中的ICB40~47的位置回到原始位置(圖21-2的步驟S1315)。具體地說,在ICB排列4中的ICB40~47的連結(jié)中,更換與放開了信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47,和與取得了信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47。由此,在取得了信標(biāo)的ISR80~87轉(zhuǎn)移到信標(biāo)等待狀態(tài)405時(shí)變更的ICB排列4中的ICB40~47的連結(jié)被返回到基于原本的優(yōu)先順序的連結(jié)。
在使ICB排列4中的ICB40~47的位置返回原始位置后,或者在與放開信標(biāo)的ISR80~87對(duì)應(yīng)的ICB40~47的ICB位置變更標(biāo)志1719是“OFF”的情況下,信標(biāo)解放任務(wù)94a把處理轉(zhuǎn)移到調(diào)度程序6(圖21-2的步驟S1316)。
這樣在本實(shí)施方式2中,當(dāng)判定為信標(biāo)取得任務(wù)判定為所要求的信標(biāo)不可以使用的情況下,對(duì)取得了所要求信標(biāo)的ISR的優(yōu)先順序和要求了信標(biāo)的ISR的優(yōu)先順序進(jìn)行比較,當(dāng)取得了所要求的信標(biāo)的ISR的優(yōu)先順序比要求了信標(biāo)的ISR的優(yōu)先順序還低的情況下,在變更ICB排列的連結(jié)以更換已取得所要求的信標(biāo)的ISR的優(yōu)先順序和要求了信標(biāo)的ISR的優(yōu)先順序的同時(shí),在與交換了優(yōu)先順序的ISR對(duì)應(yīng)起來的ICB中設(shè)定表示已變更了優(yōu)先順序的信息,信標(biāo)解放任務(wù)當(dāng)在與放開信標(biāo)的ISR對(duì)應(yīng)起來的ICB中設(shè)定了表示優(yōu)先順序已變更的信息的情況下,在變更ICB排列的連結(jié)以交換放開信標(biāo)的ISR的當(dāng)前的優(yōu)先順序,和與放開該信標(biāo)的ISR進(jìn)行了優(yōu)先順序的交換的ISR的當(dāng)前的優(yōu)先順序的同時(shí),在與交換了優(yōu)先順序的ISR對(duì)應(yīng)起來的ICB中設(shè)定表示優(yōu)先順序沒有變更的信息。由此,可以避免在利用信標(biāo)時(shí)以和預(yù)先確定的優(yōu)先權(quán)不同的順序執(zhí)行ISR的優(yōu)先順序的逆轉(zhuǎn)。
如上所述,本發(fā)明的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序在內(nèi)部軟件的同步排他控制中有用,特別適用于存儲(chǔ)內(nèi)部軟件的存儲(chǔ)器容量少時(shí)的同步排他控制。
權(quán)利要求
1.一種實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法,是基于信標(biāo)構(gòu)造體和ICB排列對(duì)上述ISR進(jìn)行調(diào)度的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法,所述信標(biāo)構(gòu)造體被適用在由包含正常狀態(tài)的多個(gè)中斷服務(wù)程序(ISR)構(gòu)成的內(nèi)部軟件中,與在上述多個(gè)ISR中使用的多個(gè)信標(biāo)對(duì)應(yīng)起來保持與該信標(biāo)的使用狀態(tài)有關(guān)的信息,所述ICB排列與上述多個(gè)ISR的中斷級(jí)別對(duì)應(yīng)的保持與各ISR的狀態(tài)有關(guān)的信息的中斷控制塊(ICB),從上述ISR的中斷級(jí)別的優(yōu)先順序位高的ISR開始順序連接該ICB,該實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法的特征在于包括ISR起動(dòng)步驟,在發(fā)生中斷時(shí),在把在中斷發(fā)生時(shí)被存儲(chǔ)在堆棧區(qū)域上的程序計(jì)數(shù)器的值、堆棧寄存器的值即堆棧指針以及把上下文存儲(chǔ)在與已中斷的ISR對(duì)應(yīng)的ICB的上下文保存區(qū)域上的同時(shí),設(shè)定在與上述已發(fā)生的中斷的ISR對(duì)應(yīng)的ICB中處于執(zhí)行等待狀態(tài);調(diào)度步驟,選擇在設(shè)定了執(zhí)行等待狀態(tài)的ICB中優(yōu)先順序最高的ICB,把被存儲(chǔ)在選擇出的ICB上下文保存區(qū)域上的程序計(jì)數(shù)器的值、堆棧指針以及上下文存儲(chǔ)在上述堆棧區(qū)域上,并執(zhí)行由中斷恢復(fù)命令選擇出的ISR;ISR結(jié)束步驟,在結(jié)束由上述調(diào)度步驟執(zhí)行的ISR的處理時(shí),設(shè)定在與結(jié)束的ISR對(duì)應(yīng)的ICB中處于中斷等待狀態(tài)。
2.根據(jù)權(quán)利要求1所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法,其特征在于還包括信標(biāo)取得步驟,基于與通過上述調(diào)度步驟執(zhí)行的ISR要求的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體保持著的使用信息,判定是否可以使用所要求的信標(biāo),當(dāng)判定為上述所要求的信標(biāo)可以使用的情況下,基于與要求了信標(biāo)的ISR有關(guān)的信息更新上述使用信息中的可以使用的信標(biāo)數(shù)以及與取得了信標(biāo)的ISR有關(guān)的信息,讓已執(zhí)行的ISR取得信標(biāo),當(dāng)判定為上述所要求的信標(biāo)不可以使用的情況下,在基于與要求了信標(biāo)的ISR有關(guān)的信息更新上述使用信息中的與信標(biāo)等待的ISR有關(guān)的信息的同時(shí),設(shè)定在與要求了上述信標(biāo)的ISR對(duì)應(yīng)的ICB中處于信標(biāo)等待狀態(tài);信標(biāo)放開步驟,基于通過上述調(diào)度步驟執(zhí)行的與ISR放開的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體所保持的使用信息,對(duì)是否存在等待著放開的信標(biāo)的ISR進(jìn)行判定,當(dāng)判斷為存在等待著上述放開的信標(biāo)的ISR時(shí),基于與放開信標(biāo)的ISR有關(guān)的信息以及與等待著信標(biāo)的ISR有關(guān)的信息,更新在上述使用信息中與取得了信標(biāo)的ISR有關(guān)的信息以及與等待著信標(biāo)的ISR有關(guān)的信息,從已執(zhí)行的ISR中放開信標(biāo),在讓等待著上述信標(biāo)的ISR取得已放開的信標(biāo)的同時(shí),設(shè)定在與新取得信標(biāo)的ISR對(duì)應(yīng)起來的ICB中處于執(zhí)行等待狀態(tài),當(dāng)判定為不存在等待上述放開的信標(biāo)的ISR時(shí),基于與放開上述信標(biāo)的ISR有關(guān)的信息來更新在上述使用信息中可以使用的信標(biāo)數(shù)以及與取得了信標(biāo)的ISR有關(guān)的信息并放開信標(biāo)。
3.根據(jù)權(quán)利要求2所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法,其特征在于上述信標(biāo)構(gòu)造體的使用信息包含設(shè)定可以使用的信標(biāo)的個(gè)數(shù)的信標(biāo)數(shù);對(duì)識(shí)別已取得信標(biāo)的ISR的ISR識(shí)別符進(jìn)行設(shè)定的所有ISR;對(duì)等待信標(biāo)的取得的信標(biāo)等待狀態(tài)的ISR的ISR識(shí)別符進(jìn)行設(shè)定的等待ISR,上述信標(biāo)取得步驟,當(dāng)與通過上述調(diào)度步驟執(zhí)行的ISR要求的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的值大于等于1的情況下,在減少該信標(biāo)數(shù)的值的同時(shí),把要求信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該所有ISR中并取得信標(biāo),當(dāng)與上述所要求的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體的信標(biāo)數(shù)小于1的情況下,把要求上述信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該等待ISR中,在與要求了上述信標(biāo)的ISR對(duì)應(yīng)的ICB中設(shè)定信標(biāo)等待狀態(tài),上述信標(biāo)放開步驟,在增加與通過上述調(diào)度步驟執(zhí)行的ISR放開的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的同時(shí),刪除對(duì)設(shè)定在該所有ISR上的信標(biāo)進(jìn)行放開的ISR的ISR識(shí)別符,當(dāng)在該等待ISR中設(shè)定著ISR識(shí)別符的情況下,在對(duì)該信標(biāo)數(shù)進(jìn)行減少的同時(shí),把在該等待ISR中設(shè)定著的ISR識(shí)別符設(shè)定在該ISR中,刪除在該等待ISR中設(shè)定著的ISR識(shí)別符,在與新取得信標(biāo)的ISR對(duì)應(yīng)起來的ICB中設(shè)定執(zhí)行等待狀態(tài)。
4.根據(jù)權(quán)利要求1所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法,其特征在于上述ISR起動(dòng)步驟,在中斷每次發(fā)生時(shí),ISR對(duì)已發(fā)生的中斷進(jìn)行處理,并增加與ISR對(duì)應(yīng)起來的ICB的執(zhí)行計(jì)數(shù)器的值,并把中斷次數(shù)保持在ICB中,上述調(diào)度步驟,只以上述執(zhí)行計(jì)數(shù)器保持的中斷次數(shù)把該ICB作為選擇對(duì)象,并只以上述中斷次數(shù)執(zhí)行自身對(duì)應(yīng)起來的ISR,上述ISR結(jié)束步驟,減少上述執(zhí)行計(jì)數(shù)器的值。
5.根據(jù)權(quán)利要求4所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法,其特征在于上述ISR起動(dòng)步驟,在與進(jìn)行上述發(fā)生的中斷處理的ISR對(duì)應(yīng)起來的ICB的執(zhí)行計(jì)數(shù)器的值小于等于預(yù)先登記在該ICB中的執(zhí)行次數(shù)上限值的情況下,增加上述執(zhí)行計(jì)數(shù)器的值。
6.根據(jù)權(quán)利要求2~5的任意一項(xiàng)所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視方法,其特征在于上述信標(biāo)取得步驟,當(dāng)判斷為上述要求的信標(biāo)不能使用的情況下,把取得了上述要求的信標(biāo)的ISR的優(yōu)先順序和要求了上述信標(biāo)的ISR的優(yōu)先順序進(jìn)行比較,當(dāng)取得了上述要求的信標(biāo)的ISR的優(yōu)先順序比要求了上述信標(biāo)的ISR的優(yōu)先順序還低的情況下,在變更ICB排列的連接以交換已取得上述要求的信標(biāo)的ISR的優(yōu)先順序和要求了上述信標(biāo)的ISR的優(yōu)先順序的同時(shí),設(shè)定表示在與交換了優(yōu)先順序的ISR對(duì)應(yīng)起來的ICB中變更了優(yōu)先順序的信息,上述信標(biāo)放開步驟,當(dāng)設(shè)定了表示在與放開上述信標(biāo)的ISR對(duì)應(yīng)起來的ICB中變更了優(yōu)先順序的信息的情況下,在變更ICB排列的連接以交換放開上述信標(biāo)的ISR的當(dāng)前的優(yōu)先順序,和與放開該信標(biāo)的ISR交換了優(yōu)先順序的ISR的當(dāng)前的優(yōu)先順序的同時(shí),設(shè)定表示在與已交換了優(yōu)先順序的ISR對(duì)應(yīng)的ICB中沒有優(yōu)先順序的變更的信息。
7.一種實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,是基于信標(biāo)構(gòu)造體和ICB排列對(duì)上述ISR進(jìn)行調(diào)度的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,所述信標(biāo)構(gòu)造體被適用于由包含正常狀態(tài)的多個(gè)中斷服務(wù)程序(ISR)構(gòu)成的內(nèi)部軟件中,與在上述多個(gè)ISR中使用的多個(gè)信標(biāo)對(duì)應(yīng)起來保持與該信標(biāo)的使用狀態(tài)有關(guān)的信息,所述ICB排列具有與上述多個(gè)ISR的中斷級(jí)別對(duì)應(yīng)的保持與各ISR的狀態(tài)有關(guān)的信息的中斷控制塊(ICB),從上述ISR的中斷級(jí)別的優(yōu)先順序高的ISR開始順序連接該ICB,該實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的特征在于,使計(jì)算機(jī)執(zhí)行以下步驟ISR取得步驟,在發(fā)生中斷時(shí),在把在中斷發(fā)生時(shí)存儲(chǔ)在堆棧區(qū)域中的程序計(jì)數(shù)器的值、堆棧寄存器的值即堆棧指針以及把上下文存儲(chǔ)在與已被中斷的ISR對(duì)應(yīng)的ICB的上下文保存區(qū)域中的同時(shí),設(shè)定在與上述發(fā)生了中斷的ISR對(duì)應(yīng)的ICB中處于執(zhí)行等待狀態(tài);調(diào)度步驟,選擇在設(shè)定了執(zhí)行等待狀態(tài)的ICB中優(yōu)先順序最高的ICB,把被存儲(chǔ)在選擇出的ICB的上下文保存區(qū)域中的程序計(jì)數(shù)器的值、堆棧指針以及上下文存儲(chǔ)在上述堆棧區(qū)域中,并執(zhí)行由中斷恢復(fù)命令選擇出的ISR;ISR結(jié)束步驟,在結(jié)束由上述調(diào)度步驟執(zhí)行的ISR的處理時(shí),設(shè)定在與結(jié)束的ISR對(duì)應(yīng)的ICB中處于中斷等待狀態(tài)。
8.根據(jù)權(quán)利要求7所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,其特征在于,使計(jì)算機(jī)進(jìn)一步執(zhí)行以下步驟信標(biāo)取得步驟,基于通過上述調(diào)度步驟執(zhí)行的與ISR要求的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體保持著的使用信息來判定所要求的信標(biāo)是否可以使用,當(dāng)判定為上述所要求的信標(biāo)可以使用的情況下,基于與要求了信標(biāo)的ISR有關(guān)的信息更新上述使用信息中的可以使用的信標(biāo)數(shù)以及與取得了信標(biāo)的ISR有關(guān)的信息,讓已執(zhí)行的ISR取得信標(biāo),當(dāng)判定為上述請(qǐng)求的信標(biāo)不能使用的情況下,在基于與要求了信標(biāo)的ISR有關(guān)的信息更新上述使用信息中的與信標(biāo)等待的ISR有關(guān)的信息的同時(shí),設(shè)定在與要求了上述信標(biāo)的ISR對(duì)應(yīng)的ICB中處于信標(biāo)等待狀態(tài);信標(biāo)放開步驟,基于通過上述調(diào)度步驟執(zhí)行的與ISR放開的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體所保持的使用信息,對(duì)是否存在等待著放開的信標(biāo)的ISR進(jìn)行判定,當(dāng)判定為存在等待著上述放開的信標(biāo)的ISR的ISR時(shí),基于與放開信標(biāo)的ISR有關(guān)的信息以及與等待著信標(biāo)的ISR有關(guān)的信息,更新在上述使用信息中與取得了信標(biāo)的ISR有關(guān)的信息以及與等待著信標(biāo)的ISR有關(guān)的信息,從已執(zhí)行的ISR放開信標(biāo),在使等待著上述信標(biāo)的ISR取得已放開的信標(biāo)的同時(shí),設(shè)定在與新取得了信標(biāo)的ISR對(duì)應(yīng)起來的ICB中處于執(zhí)行等待狀態(tài),當(dāng)判定為不存在等待著上述放開的信標(biāo)的ISR時(shí),基于與放開上述信標(biāo)的ISR有關(guān)的信息,更新在上述使用信息中可以使用的信標(biāo)數(shù)以及與取得了信標(biāo)的ISR有關(guān)的信息,并放開信標(biāo)。
9.根據(jù)權(quán)利要求8所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,其特征在于上述信標(biāo)構(gòu)造體的使用信息包含設(shè)定可以使用的信標(biāo)數(shù)的的信標(biāo)數(shù);對(duì)識(shí)別已取得了信標(biāo)的ISR的ISR識(shí)別符進(jìn)行設(shè)定的所有ISR;對(duì)等待著信標(biāo)的取得的信標(biāo)等待狀態(tài)的ISR的ISR識(shí)別符進(jìn)行設(shè)定的等待ISR,上述信標(biāo)取得步驟,當(dāng)與通過上述調(diào)度步驟執(zhí)行的ISR要求的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的值大于等于1的情況下,在減少該信標(biāo)數(shù)的值的同時(shí),把要求信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該所有ISR并取得信標(biāo),當(dāng)與上述所要求的信標(biāo)對(duì)應(yīng)的信標(biāo)構(gòu)造體的信標(biāo)數(shù)小于1的情況下,把要求上述信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該等待ISR,在與要求了上述信標(biāo)的ISR對(duì)應(yīng)的ICB中設(shè)定信標(biāo)等待狀態(tài),上述信標(biāo)放開步驟,在增加與通過上述調(diào)度步驟執(zhí)行的ISR放開的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的同時(shí),刪除對(duì)設(shè)定在該所有ISR上的信標(biāo)進(jìn)行放開的ISR的ISR識(shí)別符,當(dāng)在該等待ISR中設(shè)定著ISR識(shí)別符的情況下,在對(duì)該信標(biāo)數(shù)進(jìn)行減少的同時(shí),把在該等待ISR中設(shè)定的ISR識(shí)別符設(shè)定在該所有ISR中,刪除在該等待ISR中設(shè)定著的ISR識(shí)別符,在與新取得了信標(biāo)的ISR對(duì)應(yīng)起來的ICB中設(shè)定執(zhí)行等待狀態(tài)。
10.根據(jù)權(quán)利要求7所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,其特征在于上述ISR起動(dòng)步驟,在中斷每次發(fā)生時(shí),ISR對(duì)已發(fā)生的中斷進(jìn)行處理,并增加與ISR對(duì)應(yīng)的ICB的執(zhí)行計(jì)數(shù)器的值,并把中斷次數(shù)保持在ICB中,上述調(diào)度步驟,只以上述執(zhí)行計(jì)數(shù)器保持的中斷次數(shù)把該ICB作為選擇對(duì)象,并只以上述中斷次數(shù)執(zhí)行自身對(duì)應(yīng)的ISR,上述ISR結(jié)束步驟,減少上述執(zhí)行計(jì)數(shù)器的值。
11.根據(jù)權(quán)利要求10所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,其特征在于上述ISR起動(dòng)步驟,在與進(jìn)行上述發(fā)生的中斷的處理的ISR對(duì)應(yīng)起來的ICB的執(zhí)行計(jì)數(shù)器的值小于等于預(yù)先被登記在該ICB中的執(zhí)行次數(shù)上限值的情況下,增加上述執(zhí)行計(jì)數(shù)器的值。
12.根據(jù)權(quán)利要求7~11的任意項(xiàng)之一所述的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序,其特征在于上述信標(biāo)取得步驟,在判定為上述要求的信標(biāo)不能使用的情況下,對(duì)取得了上述要求的信標(biāo)的ISR的優(yōu)先順序和要求了上述信標(biāo)的ISR的優(yōu)先順序進(jìn)行比較,當(dāng)取得了上述要求的信標(biāo)的ISR的優(yōu)先順序比要求了上述信標(biāo)的ISR的優(yōu)先順序還低的情況下,在變更ICB排列的連接以交換已取得了上述所要求的信標(biāo)的ISR的優(yōu)先順序和要求了上述信標(biāo)的ISR的優(yōu)先順序的同時(shí),設(shè)定表示在與交換了優(yōu)先順序的ISR對(duì)應(yīng)起來的ICB中變更了優(yōu)先順序的信息,上述信標(biāo)放開步驟,當(dāng)設(shè)定了表示在與放開上述信標(biāo)的ISR對(duì)應(yīng)起來的ICB中變更了優(yōu)先順序的信息的情況下,在變更ICB排列的連接以對(duì)放開上述信標(biāo)的ISR的當(dāng)前的優(yōu)先順序,和與放開該信標(biāo)的ISR交換了優(yōu)先順序的ISR的當(dāng)前的優(yōu)先順序進(jìn)行交換的同時(shí),設(shè)定表示在與交換了優(yōu)先順序的ISR對(duì)應(yīng)起來的ICB中沒有優(yōu)先順序的變更的信息。
13.一種計(jì)算機(jī)可以讀取的記錄介質(zhì),存儲(chǔ)有基于信標(biāo)構(gòu)造體和ICB排列對(duì)上述ISR進(jìn)行調(diào)度的實(shí)時(shí)內(nèi)部簡(jiǎn)易程序,所述信標(biāo)構(gòu)造體被適用在由包含正常狀態(tài)的多個(gè)中斷服務(wù)程序(ISR)構(gòu)成的內(nèi)部軟件中,與在上述多個(gè)ISR中使用的多個(gè)信標(biāo)對(duì)應(yīng)地保持與該信標(biāo)的使用狀態(tài)有關(guān)的信息,所述ICB排列具有與上述多個(gè)ISR的中斷級(jí)別對(duì)應(yīng)的保持與各ISR的狀態(tài)有關(guān)的信息的中斷控制塊(ICB),從上述ISR的中斷級(jí)別的優(yōu)先順序位高的ISR開始順序連接該ICB的ICB排列,該實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序的特征在于使計(jì)算機(jī)執(zhí)行以下步驟ISR起動(dòng)步驟,在發(fā)生中斷時(shí),在把在中斷發(fā)生時(shí)存儲(chǔ)在堆棧區(qū)域中的程序計(jì)數(shù)器的值、堆棧寄存器的值即堆棧指針以及把上下文存儲(chǔ)在與已被中斷的ISR對(duì)應(yīng)的ICB的上下文保存區(qū)域中的同時(shí),設(shè)定在與上述已發(fā)生中斷的ISR對(duì)應(yīng)的ICB中處于執(zhí)行等待狀態(tài);調(diào)度步驟,在設(shè)定了執(zhí)行等待狀態(tài)的ICB中選擇優(yōu)先順序最高的ICB,把被存儲(chǔ)在選擇出的ICB的上下文保存區(qū)域中的程序計(jì)數(shù)器的值、堆棧指針以及上下文存儲(chǔ)在上述堆棧區(qū)域中,并執(zhí)行由中斷恢復(fù)命令選擇出的ISR;ISR結(jié)束步驟,在結(jié)束由上述調(diào)度步驟執(zhí)行的ISR的處理時(shí),設(shè)定在與結(jié)束的ISR對(duì)應(yīng)的ICB中處于中斷等待狀態(tài)。
14.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)可以讀取的記錄介質(zhì),其特征在于上述實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序進(jìn)一步使計(jì)算機(jī)執(zhí)行以下步驟信標(biāo)取得步驟,基于與通過上述調(diào)度步驟執(zhí)行的ISR要求的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體保持的使用信息,判定是否可以使用所要求的信標(biāo),當(dāng)判定為上述所要求的信標(biāo)可以使用的情況下,基于與要求了信標(biāo)的ISR有關(guān)的信息更新上述使用信息中的可以使用的信標(biāo)數(shù)以及與取得了信標(biāo)的ISR有關(guān)的信息,讓已執(zhí)行的ISR取得信標(biāo),當(dāng)判定為上述所要求的信標(biāo)不可以使用的情況下,在基于與要求了信標(biāo)的ISR有關(guān)的信息更新上述使用信息中的與信標(biāo)等待的ISR有關(guān)的信息的同時(shí),設(shè)定在與要求了上述信標(biāo)的ISR對(duì)應(yīng)起來的ICB中處于信標(biāo)等待狀態(tài);信標(biāo)放開步驟,基于通過上述調(diào)度步驟執(zhí)行的與ISR放開的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體保持著的使用信息,判定等待著放開的信標(biāo)的ISR是否存在,當(dāng)判斷為等待著上述放開的信標(biāo)的ISR存在的情況下,基于與放開信標(biāo)的ISR有關(guān)的信息以及與等待著信標(biāo)的ISR有關(guān)的信息,更新在上述使用信息中與取得了信標(biāo)的ISR有關(guān)的信息以及與等待著信標(biāo)的ISR有關(guān)的信息,從執(zhí)行的ISR中放開信標(biāo),在讓等待著上述信標(biāo)的ISR取得已放開的信標(biāo)的同時(shí),設(shè)定在與新取得信標(biāo)的ISR對(duì)應(yīng)起來的ICB中ISR處于執(zhí)行等待狀態(tài),當(dāng)判定為等待上述放開的信標(biāo)的ISR不存在的情況下,基于與放開上述信標(biāo)的ISR有關(guān)的信息來更新在上述使用信息中可以使用的信標(biāo)數(shù)以及與取得了信標(biāo)的ISR有關(guān)的信息并放開信標(biāo)。
15.根據(jù)權(quán)利要求14所述的計(jì)算機(jī)可以讀取的記錄介質(zhì),其特征在于上述信標(biāo)構(gòu)造體的使用信息包含設(shè)定可以使用的信標(biāo)數(shù)的信標(biāo)數(shù);對(duì)識(shí)別已取得信標(biāo)的ISR的ISR識(shí)別符進(jìn)行設(shè)定的所有ISR;對(duì)等待信標(biāo)的取得的信標(biāo)等待狀態(tài)的ISR的ISR識(shí)別符進(jìn)行設(shè)定的等待ISR,上述信標(biāo)取得步驟,當(dāng)與通過上述調(diào)度步驟執(zhí)行的ISR要求的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的值大于等于1的情況下,在減少該信標(biāo)數(shù)的值的同時(shí),把要求信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該所有ISR中并取得信標(biāo),當(dāng)與上述所要求的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)小于1的情況下,把要求上述信標(biāo)的ISR的ISR識(shí)別符設(shè)定在該等待ISR中,在與要求了上述信標(biāo)的ISR對(duì)應(yīng)的ICB中設(shè)定信標(biāo)等待狀態(tài),上述信標(biāo)放開步驟,在增加與通過上述調(diào)度步驟執(zhí)行的ISR放開的信標(biāo)對(duì)應(yīng)起來的信標(biāo)構(gòu)造體的信標(biāo)數(shù)的同時(shí),刪除對(duì)設(shè)定在該所有ISR上的信標(biāo)進(jìn)行放開的ISR的ISR識(shí)別符,當(dāng)在該等待ISR中設(shè)定著ISR識(shí)別符的情況下,在對(duì)該信標(biāo)數(shù)進(jìn)行減少的同時(shí),把在該等待ISR中設(shè)定著的ISR識(shí)別符設(shè)定在該ISR中,刪除在該等待ISR中設(shè)定著的ISR識(shí)別符,在與新取得信標(biāo)的ISR對(duì)應(yīng)的ICB中設(shè)定執(zhí)行等待狀態(tài)。
16.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)可以讀取的記錄介質(zhì),其特征在于上述ISR起動(dòng)步驟,在中斷每次發(fā)生時(shí),ISR對(duì)已發(fā)生的中斷進(jìn)行處理,并增加與ISR對(duì)應(yīng)起來的ICB的執(zhí)行計(jì)數(shù)器的值,并把中斷次數(shù)保持在ICB中,上述調(diào)度步驟,只以上述執(zhí)行計(jì)數(shù)器保持的中斷次數(shù)把該ICB作為選擇對(duì)象,并只以上述中斷次數(shù)執(zhí)行自身對(duì)應(yīng)起來的ISR,上述ISR結(jié)束步驟,減少上述執(zhí)行計(jì)數(shù)器的值。
17.根據(jù)權(quán)利要求16所述的計(jì)算機(jī)可以讀取的記錄介質(zhì),其特征在于上述ISR起動(dòng)步驟,在與進(jìn)行上述發(fā)生中斷的處理的ISR對(duì)應(yīng)起來的ICB的執(zhí)行計(jì)數(shù)器的值小于等于預(yù)先登記在該ICB中的執(zhí)行次數(shù)上限值的情況下,增加上述執(zhí)行計(jì)數(shù)器的值。
18.根據(jù)權(quán)利要求13~17的任意項(xiàng)之一所述的計(jì)算機(jī)可以讀取的記錄介質(zhì),其特征在于上述信標(biāo)取得步驟,在判定為上述要求的信標(biāo)不能使用的情況下,把取得了上述要求的信標(biāo)的ISR的優(yōu)先順序和要求了上述信標(biāo)的ISR的優(yōu)先順序進(jìn)行比較,當(dāng)取得了上述要求的信標(biāo)的ISR的優(yōu)先順序比要求了上述信標(biāo)的ISR的優(yōu)先順序還低的情況下,在變更ICB排列的連接以進(jìn)行取得了上述要求的信標(biāo)的ISR的優(yōu)先順序和要求了上述信標(biāo)的ISR的優(yōu)先順序的同時(shí),設(shè)定表示在交換了優(yōu)先順序的ISR對(duì)應(yīng)起來的ICB中變更了優(yōu)先順序的信息,上述信標(biāo)放開步驟,當(dāng)設(shè)定了表示在與放開上述信標(biāo)的ISR對(duì)應(yīng)起來的ICB中變更了優(yōu)先順序的信息的情況下,在變更ICB排列的連接以交換放開上述信標(biāo)的ISR的當(dāng)前的優(yōu)先順序,和與放開該信標(biāo)的ISR交換了優(yōu)先順序的ISR的當(dāng)前的優(yōu)先順序的同時(shí),設(shè)定表示在與交換了優(yōu)先順序的ISR對(duì)應(yīng)起來的ICB中沒有優(yōu)先順序的變更的信息。
全文摘要
得到一種不使用實(shí)時(shí)OS而只用中斷處理實(shí)現(xiàn)同步排他控制的實(shí)時(shí)內(nèi)部簡(jiǎn)易監(jiān)視程序。保持與包含正常狀態(tài)的多個(gè)ISR80~87的中斷級(jí)別對(duì)應(yīng)起來的各ISR80~87的狀態(tài)相關(guān)的信息的ICB40~47,基于從ISR中斷級(jí)別的優(yōu)先順序高的ISR開始順序地連接的ICB排列,對(duì)ISR進(jìn)行調(diào)度時(shí),ISR起動(dòng)任務(wù)在把在中斷發(fā)生時(shí)存儲(chǔ)在堆棧區(qū)域上的處理器上下文存儲(chǔ)在與已中斷的ISR80~87對(duì)應(yīng)的ICB的上下文保存區(qū)域上的同時(shí),在與已發(fā)生的中斷對(duì)應(yīng)的ICB40~47中設(shè)定處于執(zhí)行等待狀態(tài),調(diào)度器在已設(shè)定了執(zhí)行狀態(tài)的ICB40~47中選擇優(yōu)先順序最高的ICB40~47,把選擇出的被存儲(chǔ)在ICB40~47的上下文保存區(qū)域上的處理器上下文存儲(chǔ)在堆棧區(qū)域上,執(zhí)行與用中斷恢復(fù)命令選擇出的ICB40~47對(duì)應(yīng)的ISR。
文檔編號(hào)G06F9/46GK1908904SQ20061000641
公開日2007年2月7日 申請(qǐng)日期2006年1月20日 優(yōu)先權(quán)日2005年8月5日
發(fā)明者南角茂樹, 井上禎一郎, 巖橋正實(shí), 川上敏弘 申請(qǐng)人:三菱電機(jī)株式會(huì)社