專利名稱:存儲器管理系統(tǒng)以及在多任務(wù)系統(tǒng)中的任務(wù)控制器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種對軟件堆棧存儲器的管理方法,具體地說,本發(fā)明涉及一種在執(zhí)行多任務(wù)系統(tǒng)時用于減少堆棧存儲器可利用量的程序結(jié)構(gòu)。
背景技術(shù):
隨著程序中控制的復(fù)雜化,可以用計算機一次將兩個或多個任務(wù)分別處理為工作單元的多任務(wù)系統(tǒng)已經(jīng)得到普遍應(yīng)用。多任務(wù)系統(tǒng)的采用可以有效轉(zhuǎn)換和執(zhí)行多個任務(wù)。
圖3示意性示出了一個在常見多任務(wù)系統(tǒng)中處于使用狀態(tài)的RAM例子。圖3中用參考數(shù)字標注的區(qū)域表示用在各項任務(wù)中的堆棧存儲器區(qū)域(以下稱為堆棧)。特別的,在RAM上,構(gòu)造了具有多項任務(wù)1、任務(wù)2、...和任務(wù)n的多個堆棧,一個用于空閑任務(wù)的堆棧,和一個只用于處理由多任務(wù)系統(tǒng)執(zhí)行的中斷的堆棧。
這些堆棧分別由堆棧301、311和321、返回PC存儲區(qū)域302、312和322、PSW存儲區(qū)域303、313和323以及CPU寄存器存儲區(qū)域314、324和304組成。此外,用于處理中斷的堆棧包括在產(chǎn)生中斷時存儲任務(wù)SP的返回SP存儲區(qū)域305以及處理用在中斷處理序列中的中斷的堆棧區(qū)域306。
在這里,中斷處理表示每隔規(guī)定的時間,在例如定時器控制下通過在一任務(wù)或處理由外部因素執(zhí)行時臨時中斷該任務(wù)(普通處理)而執(zhí)行的處理。
例如,在任務(wù)1運行期間產(chǎn)生中斷時,通過使用堆棧311來執(zhí)行的任務(wù)1被臨時中斷。此時,PC寄存器的當前值存儲在返回PC存儲區(qū)域312。PSW寄存器的當前值存儲在PSW存儲區(qū)域313中。此外,任務(wù)1中使用的CPU寄存器值存儲在CPU寄存存儲區(qū)域314中。然后,任務(wù)1的SP寄存器值存儲在返回SP存儲區(qū)域305中,該區(qū)域位于處理中斷時使用的堆棧區(qū)域中。設(shè)置SP寄存器的值,以標明用于處理中斷的返回SP存儲區(qū)域305和堆棧區(qū)域306的邊界,即堆棧區(qū)域306的末端區(qū)域。因此,堆棧區(qū)域從任務(wù)堆棧轉(zhuǎn)換為處理中斷的堆棧。
完成中斷處理后,將存儲在SP存儲區(qū)域305的值設(shè)置到SP寄存器,以便將堆棧區(qū)域轉(zhuǎn)換為任務(wù)區(qū)域。此后,將存儲在CPU寄存器存儲區(qū)域314中的值設(shè)置到每個CPU寄存器,并將存儲在PSW存儲區(qū)域313和返回PC存儲區(qū)域312中的值也返回到PSW寄存器和PC寄存器,使得堆棧區(qū)域可以返回到初始任務(wù)1。在這樣的結(jié)構(gòu)中,當多任務(wù)系統(tǒng)執(zhí)行多項任務(wù)時,可以執(zhí)行規(guī)定的中斷處理(例如,參考專利文獻1 JPA8123698)。
然而,在圖3所示的堆棧結(jié)構(gòu)中,確定產(chǎn)生中斷時存儲的CPU寄存器的釋放能力大體上與處理任務(wù)的內(nèi)容無關(guān)。很多無需存儲數(shù)據(jù)的寄存器可能包括在其中,使得存儲器被多余地消耗掉了。為了適應(yīng)這一點,一種方法是在例如中斷處理的第一部分就區(qū)分各種存儲數(shù)據(jù)的CPU寄存器。然而,該方法的缺點是惡化了中斷響應(yīng)性能。
發(fā)明內(nèi)容
本發(fā)明解決了上述問題,包括用于執(zhí)行多任務(wù)系統(tǒng)的n個任務(wù)堆棧、一個用于處理中斷并由每個任務(wù)堆棧共享功能的堆棧,以及分別與產(chǎn)生中斷處理時執(zhí)行的任務(wù)堆棧并聯(lián)的PC、PSW和CPU寄存器。用于處理中斷的堆棧區(qū)域由n個任務(wù)堆棧中的任何一個共享和使用。在產(chǎn)生中斷處理時,PC、PSW和CPU寄存器的值并列放入當前任務(wù)堆棧之后,堆棧指針跳轉(zhuǎn)到中斷處理端。完成中斷處理之后,堆棧指針跳轉(zhuǎn)到任務(wù)堆棧,存儲在該任務(wù)堆棧中的PC、PSW和CPU寄存器值從該任務(wù)堆棧返回以重新開始任務(wù)運行。
如上所述,本發(fā)明的效果是,使用實時OS(操作系統(tǒng))的系統(tǒng)任務(wù)堆棧區(qū)域和中斷堆棧區(qū)域同時以雙重方式使用,從而在整個系統(tǒng)中減小了存儲器的可利用量。因此,多任務(wù)系統(tǒng)可以在小容量存儲器下有利地運行。
圖1為示意性表示本發(fā)明實施方式的堆棧結(jié)構(gòu)的框圖;圖2為示意性表示常規(guī)多任務(wù)系統(tǒng)中堆棧結(jié)構(gòu)的框圖;圖3為特別地表示常規(guī)多任務(wù)系統(tǒng)中堆棧使用狀態(tài)的框圖;圖4為特別地表示本發(fā)明的多任務(wù)系統(tǒng)中堆棧使用狀態(tài)的框圖;
圖5為表示常規(guī)多任務(wù)系統(tǒng)中產(chǎn)生中斷時堆棧轉(zhuǎn)換處理內(nèi)容的流程圖;圖6為表示本發(fā)明的多任務(wù)系統(tǒng)中產(chǎn)生中斷時堆棧轉(zhuǎn)換處理內(nèi)容的流程圖;圖7為表示一個模式跳轉(zhuǎn)到本發(fā)明的低功率消耗運行模式時堆棧轉(zhuǎn)換處理內(nèi)容的流程圖;圖8為表示在完成中斷時堆棧轉(zhuǎn)換處理內(nèi)容的流程圖;圖9為表示在空循環(huán)情況下空閑任務(wù)處理內(nèi)容的流程圖;圖10為表示一個模式轉(zhuǎn)換到低功率消耗運行模式時的空閑任務(wù)處理內(nèi)容的流程圖;圖11為特別地表示一個模式轉(zhuǎn)換到低功率消耗運行模式時用于空閑任務(wù)的堆棧結(jié)構(gòu)和用于處理中斷的堆棧結(jié)構(gòu)的框圖;圖12表示第一和第二實施方式中的任務(wù)控制器;圖13表示第三實施方式中的任務(wù)控制器。
具體實施例方式
下面根據(jù)附圖描述本發(fā)明的實施方式。
(第一實施方式)圖1為表示一種根據(jù)本發(fā)明的多任務(wù)系統(tǒng)中堆棧的使用途徑的框圖。就設(shè)置處理中斷的堆棧107的位置而言,該多任務(wù)系統(tǒng)比圖2所示的常規(guī)多任務(wù)系統(tǒng)更有特色。
在圖2所示的常規(guī)多任務(wù)系統(tǒng)中,三個任務(wù)102、104和106以及一個中斷處理程序108在操作系統(tǒng)109(以下稱之為OS)上運行。堆棧區(qū)域101、103、205和207分別獨立的為任務(wù)或程序做準備。三個任務(wù)中具有最低優(yōu)先級的任務(wù)稱為空閑任務(wù)106。在執(zhí)行該空閑任務(wù)時,表明一種該系統(tǒng)沒有任務(wù)可處理以及外部中斷等待進入的狀態(tài)。
在圖1所示的根據(jù)本發(fā)明的多任務(wù)系統(tǒng)中,三個任務(wù)102、104和106以及一個中斷處理程序108也在OS 109上運行,堆棧區(qū)域101、103、105和107分別獨立的為任務(wù)或程序做準備。此外,也準備好三個任務(wù)中具有最低優(yōu)先級的空閑任務(wù)106。在這種情況下,將處理中斷的堆棧107的位置設(shè)置為與用于空閑任務(wù)的堆棧區(qū)域105重疊。在中斷處理時的堆棧區(qū)域通過覆蓋(堆棧破壞)用在空閑任務(wù)處理中的該堆棧區(qū)域來運行。
圖3表示在常規(guī)多任務(wù)系統(tǒng)中的堆棧內(nèi)容,包括兩個普通的任務(wù)堆棧區(qū)域,一個用于空閑任務(wù)的堆棧區(qū)域和一個用于處理中斷的堆棧區(qū)域。
在圖3中,最初在任務(wù)1運行時,堆棧指針(以下稱為SP)指向用于任務(wù)1的堆棧區(qū)域311,任務(wù)1利用該區(qū)域處理程序。在此狀態(tài)下,鑒于硬件原因,當產(chǎn)生中斷以及CPU接收該中斷時,程序計數(shù)器(以下稱為PC)和處理器狀態(tài)字(以下稱為PSW)的內(nèi)容分別存儲在堆棧區(qū)域312和313中。SP的值自動減去PC和PSW的大小。然后,CPU將PC值移動到中斷處理程序的第一位置,以執(zhí)行OS中斷輸入處理。
圖5表示常規(guī)多任務(wù)系統(tǒng)中,在執(zhí)行任務(wù)期間接收中斷時的OS中斷輸入處理的流程圖。在執(zhí)行任務(wù)1期間產(chǎn)生中斷的情況將在下面描述。最初,在步驟S501中,CPU寄存器值存儲在堆棧區(qū)域314中。CPU寄存器的數(shù)量根據(jù)CPU種類而有所不同。最簡單的安裝方法是存儲所有安裝在CPU上的CPU寄存器。然后,在步驟S502中,SP的當前值(其等于相關(guān)任務(wù)堆棧的最后一個地址)存儲在位于處理中斷的堆棧區(qū)域末端的返回SP存儲區(qū)域305中。在完成中斷處理后,該處理對于再次將SP指定的位置返回到任務(wù)堆棧是必要的。然后,在步驟S503中,處理中斷的堆棧區(qū)域306的末端地址代替了SP,以便將該堆棧從任務(wù)堆棧區(qū)域314轉(zhuǎn)換為處理中斷的堆棧區(qū)域306。此時,要注意設(shè)置SP的值,使得用于任務(wù)的返回SP存儲區(qū)域305不會被覆蓋。最后,在步驟S504中,調(diào)用由應(yīng)用程序定義的中斷處理程序函數(shù),以便在步驟S505中執(zhí)行該應(yīng)用程序的中斷控制程序。該處理以函數(shù)返回的形式從步驟S505返回OS中斷輸入處理,以便在此后跳轉(zhuǎn)到OS中斷退出處理。
圖8是中斷處理完成返回任務(wù)時OS中斷退出處理的流程圖。在該OS中斷退出處理中,存儲在用于任務(wù)的返回SP存儲區(qū)域305中的值在步驟S801中最初返回到SP。因此,用于處理中斷的堆棧區(qū)域306保持為不使用。在普通OS中,在步驟S802執(zhí)行延遲發(fā)送處理。延遲發(fā)送處理的運行如下所述。在該處理從中斷處理返回到任務(wù)時,要確定該任務(wù)是否需要被轉(zhuǎn)換。然后,如果任務(wù)需要被轉(zhuǎn)換,則更改SP的值,以便從當前任務(wù)1中指明其它任務(wù)(例如任務(wù)2)的適當堆棧地址。在本發(fā)明中,由于延遲發(fā)送處理的內(nèi)容不是本發(fā)明的主要目的,因此不在這里特別提及。在步驟S803中,存儲在步驟S501中的CPU寄存器值從堆棧區(qū)域314返回各CPU寄存器。最后,在步驟S804中,處理返回被中斷打斷的任務(wù)處理。此時,執(zhí)行由CPU發(fā)出的將該處理從中斷處理返回的指令,以便從堆棧中將PC和PSW的內(nèi)容復(fù)位。
在任務(wù)運行過程中接收中斷以便將處理通過退出處理從OS中斷輸入處理返回任務(wù)的步驟完全與圖3中示出的任務(wù)2或空閑任務(wù)的步驟相同。上述任務(wù)1可能不會被使用。也就是說,圖3中任務(wù)1使用的堆棧區(qū)域311至314可以直接由堆棧區(qū)域321至324或堆棧區(qū)域301至304代替。
圖4為表示根據(jù)本發(fā)明的多任務(wù)系統(tǒng)中堆棧內(nèi)容的框圖,該堆棧包括兩個普通任務(wù)堆棧區(qū)域和一個用于空閑任務(wù)的堆棧區(qū)域。
在圖4中,最初當運行任務(wù)1時,SP指明用于任務(wù)1的堆棧區(qū)域311,任務(wù)1使用該區(qū)域來處理程序。在此狀態(tài)下,鑒于硬件的原因(in view of hardware),當產(chǎn)生中斷和CPU接收該中斷時,PC和PSW的內(nèi)容分別存儲在堆棧區(qū)域312和313中。此時,SP的值自動減去PC和PSW的大小。然后,CPU將PC的值移動到中斷處理程序的第一位置,以執(zhí)行OS中斷輸入處理。
圖6表示任務(wù)運行過程中接收中斷時的OS中斷輸入處理的流程圖。開始在步驟S501中,CPU寄存器的值存儲在堆棧區(qū)域314中。CPU寄存器的數(shù)量根據(jù)CPU的種類而有所不同。最簡單的安裝方法是存儲所有安裝在CPU上的CPU寄存器。然后,在步驟S602中,SP的當前值(其等于相關(guān)任務(wù)堆棧的最后一個地址)存儲在位于處理中斷的堆棧區(qū)域末端的返回SP存儲區(qū)域405中。在完成中斷處理后,該處理對于再次將SP指定的位置返回到任務(wù)堆棧是必要的。在此,注意以下事實,返回SP存儲區(qū)域405與空閑任務(wù)的CPU寄存器存儲區(qū)域404重疊,這與圖5所示的常規(guī)多任務(wù)系統(tǒng)不同。然后,在步驟S603中,處理中斷的堆棧區(qū)域406的末端地址代替了SP,以便將該堆棧從任務(wù)堆棧轉(zhuǎn)換為僅用于處理中斷的堆棧。此時,要注意使用于任務(wù)的返回SP存儲區(qū)域405不會被覆蓋。最后,在步驟S504中,調(diào)用由應(yīng)用程序定義的中斷處理程序函數(shù),以便在步驟S505中執(zhí)行該應(yīng)用程序的中斷控制程序。該處理以函數(shù)返回的形式從步驟S505跳轉(zhuǎn)到OS中斷退出處理。該OS中斷退出處理與圖8以類似方式描述的過程相同。因此省略對其的詳細描述。
這里,在任務(wù)運行過程中接收中斷以便將處理通過OS中斷退出處理從OS中斷輸入處理返回任務(wù)的步驟完全與圖4所示的任務(wù)2的步驟相同。上述任務(wù)1可能不會被使用。也就是說,圖4中所示任務(wù)1使用的堆棧區(qū)域311至314可以直接由堆棧區(qū)域321至324代替。
然而,在堆棧區(qū)域用于空閑堆棧時,情況有所不同。在常規(guī)多任務(wù)系統(tǒng)中,空閑任務(wù)使用的堆棧區(qū)域301至304可以直接由任務(wù)1的堆棧區(qū)域311至314代替。然而,在本發(fā)明中,由于圖4所示用于處理中斷的堆棧區(qū)域404、返回SP存儲區(qū)域405和堆棧區(qū)域406設(shè)置為重疊,因此需要加以注意?,F(xiàn)在將在下面特別描述運行空閑任務(wù)時接收中斷的操作。
首先,當空閑任務(wù)運行時,SP指明一個在空閑任務(wù)堆棧區(qū)域401中的地址。空閑任務(wù)使用該區(qū)域處理程序(然而該區(qū)域有時無需出現(xiàn),可以具有0字節(jié))。在此狀態(tài)下,當產(chǎn)生中斷和CPU接收該中斷時,鑒于硬件原因,PC和PSW的內(nèi)容分別存儲在PC存儲區(qū)域402和PSW存儲區(qū)域403中。在此,SP的值自動減去PC和PSW的大小。也就是說,如果PC和PSW分別具有4字節(jié),為存儲它們堆棧要消耗8字節(jié)。這相當于SP減去8字節(jié)。然后,CPU將PC的值移動到中斷處理程序的第一地址上,以執(zhí)行OS中斷輸入處理。OS處理輸入過程在空閑任務(wù)運行期間接收中斷時按照圖6所示的流程圖運行。
另一方面,OS中斷退出處理和圖8以相關(guān)方式描述的過程相同。然而,由于在步驟S803中復(fù)位的CPU寄存器的值已經(jīng)被覆蓋,因此需要注意以下事實,該值與在OS中斷輸入處理時存儲的值不同。
圖9為表示根據(jù)第一實施方式的空閑任務(wù)運行的流程圖。如圖9所示,安裝第一實施方式中的空閑任務(wù)以便能由自無窮循環(huán)S901形成。因此,在圖8所示的步驟S803中,即使除PC和PSW之外的所有CPU寄存器都被覆蓋以確定中斷處理中的值,空閑任務(wù)程序還是能在不使用CPU寄存器的條件下運行。因此,中斷復(fù)位后不會出現(xiàn)任何問題。
圖12表示根據(jù)本發(fā)明用于實現(xiàn)上述多任務(wù)系統(tǒng)的任務(wù)控制器。在任務(wù)控制器中,PC 1205指明當前執(zhí)行程序的指令地址1209。該值通過總線控制單元(以下稱為BCU)1212從外部存儲器(ROM)1213獲得指令數(shù)據(jù)1210。在指令執(zhí)行控制部分1206中對指令數(shù)據(jù)1210進行解碼,以便根據(jù)解碼指令的類別確定任務(wù)控制器1200的整個操作。當指令數(shù)據(jù)是將數(shù)據(jù)記錄到外部存儲器的指令時,指令執(zhí)行控制部分1206從CPU寄存器1201讀取所需地址值,以便將該地址值傳送到計算單元(以下稱為ALU)1204。指令執(zhí)行控制部分將操作數(shù)地址1207作為地址數(shù)據(jù)通過BCU 1212傳送到外部存儲器(RAM)中。指令執(zhí)行控制部分同時讀取CPU寄存器1201中的操作數(shù)數(shù)據(jù)1208,以便將該數(shù)據(jù)通過BCU 1212記錄到外部存儲器(RAM)1214中。任務(wù)控制器具有安裝于其上的中斷控制部分1211,并具有用于從外圍設(shè)備函數(shù)1215接收中斷請求、向指令執(zhí)行控制部分1206通知中斷請求以及終端當前執(zhí)行程序的功能。
此外,任務(wù)控制器具有用于在中斷處理時控制堆棧地址的SP差值常量1250。當運行一項任務(wù)期間產(chǎn)生中斷時,SP 1202的值作為任務(wù)堆棧的地址通過操作數(shù)地址1207和BCU 1212提供給外部存儲器(RAM)1214。在PC1205和PSW 1203的值存儲在任務(wù)堆棧中之后,SP的值由這些值更新。隨后,如圖6的流程圖所示,CPU寄存器的內(nèi)容存儲在任務(wù)堆棧中,以利用其內(nèi)容更新SP的值。
然后,SP 1202的最終值存儲在用于處理中斷的堆棧的返回SP存儲區(qū)域405中。對于OS中斷輸入處理程序或中斷控制部分1211,空閑任務(wù)堆棧的CPU寄存器存儲區(qū)域404的第一地址以前已經(jīng)作為目標地址給出,用于處理中斷的堆棧疊加在該地址上。對于SP差值常量1250,處理中斷的堆棧的第一地址相對于空閑任務(wù)堆棧的CPU寄存器存儲區(qū)域404的第一地址的地址差值已給出。
用于處理中斷的堆棧所在的目標被重疊,也就是說,由OS中斷輸入處理程序或中斷控制部分1211提供空閑任務(wù)堆棧的CPU寄存器存儲區(qū)域的第一地址。在ALU 1204中計算第一地址和SP差值常量1250的值。所計算的值通過操作數(shù)地址1207和BCU 1212作為存儲SP最終值的地址提供給外部存儲器(RAM)1214。在此,在本實施方式中對SP差值常量1250賦予0。因此,允許用于處理中斷的堆棧的返回SP存儲區(qū)域405的第一地址與空閑任務(wù)堆棧的CPU寄存器存儲區(qū)域的第一地址相對應(yīng)。第一地址由部分SP存儲區(qū)域更新,以設(shè)置到SP。由此,用于處理中斷的堆??梢杂脕硖崆爸袛嗵幚?。
如上所述,處理中斷的堆棧與空閑任務(wù)的任務(wù)堆棧重疊,使得空閑任務(wù)的任務(wù)堆棧的未使用CPU寄存器存儲區(qū)域可以被有效利用。
(第二實施方式)本發(fā)明第一實施方式中描述的多任務(wù)系統(tǒng)可以在包括圖10中流程圖所示的其它處理的空閑任務(wù)中實現(xiàn),也可以在僅包括圖9所示簡單無限循環(huán)的空閑任務(wù)中實現(xiàn)。圖10中,如步驟S1001所示,空閑任務(wù)程序執(zhí)行將CPU的操作模式跳轉(zhuǎn)到低功率消耗模式的處理。在此,當CPU跳轉(zhuǎn)到低功率消耗模式之后,隨后的指令直到接收了中斷之后才執(zhí)行。在中斷請求進入CPU且低功率消耗模式被釋放的時候,CPU返回普通操作模式,并執(zhí)行圖7中流程圖所示的OS中斷輸入處理。
當CPU的操作模式跳轉(zhuǎn)到低功率消耗模式時,r0寄存器作為一個CPU寄存器使用。在這種情況下,r0寄存器的值甚至需要在中斷處理之前和之后都進行存儲。
圖11表示在該情況下利用空閑堆棧和處理中斷的堆棧的方法。首先,當空閑任務(wù)運行時,SP為空閑任務(wù)指明堆棧區(qū)域1101??臻e任務(wù)利用該區(qū)域處理程序。當終端產(chǎn)生和CPU接收該中斷時,上述程序利用r0寄存器,而鑒于硬件原因,PC和PSW的內(nèi)容則分別存儲在堆棧區(qū)域1102和1103中。此時,SP的值自動減去PC和PSW的大小。然后,CPU將PC值移動到中斷處理程序的第一地址,以執(zhí)行圖7所示的OS中斷輸入處理。
在圖7所示的OS中斷輸入處理中,在步驟S701,CPU寄存器的值首先存儲在堆棧區(qū)域1107和1104中。在這種情況下,在步驟S701,r0寄存器的值需要存儲在恰好位于PSW存儲區(qū)域1103之上的r0寄存器存儲區(qū)域1107中。其它CPU寄存器可以與順序無關(guān)地存儲在任何地方。然后,在步驟S702,SP的當前值存儲在處理中斷的堆棧區(qū)域末端1105。返回SP存儲區(qū)域1105需要放置在r0寄存器存儲區(qū)域1107未被覆蓋的位置,這與第一實施方式不同。然而,返回SP存儲器區(qū)域的位置要設(shè)置為重疊在在CPU寄存器存儲區(qū)域1104上,以便存儲除r0寄存器以外的其它CPU寄存器。在步驟S703,SP由處理中斷的堆棧區(qū)域1106的末端地址代替,以便將堆棧從空閑任務(wù)堆棧轉(zhuǎn)換到處理中斷的堆棧區(qū)域1106。處理中斷的堆棧區(qū)域1106重疊在上述CPU寄存器存儲區(qū)域1104上。因此,存儲在堆棧區(qū)域1104的CPU寄存器值以與第一實施方式相似的方式被覆蓋。最后,在步驟S504,調(diào)用由應(yīng)用程序定義的中斷控制函數(shù),以便在步驟S505中執(zhí)行應(yīng)用程序的中斷控制程序。該處理從步驟S505以函數(shù)返回的形式跳轉(zhuǎn)到圖8所示的OS中斷退出處理。
另一方面,OS中斷退出處理與圖8以相關(guān)方式描述的處理相同。然而,由于在步驟S803復(fù)位的CPU寄存器值除r0寄存器存儲區(qū)域1107之外都已被覆蓋,因此需要注意以下事實,該值不同于OS中斷輸入處理時存儲的值。作為r0寄存器的值,將存儲在r0寄存器存儲區(qū)域1107中的正確值復(fù)位。當r0寄存器用于空閑任務(wù)時接收最初產(chǎn)生的中斷。在空閑任務(wù)程序從中斷中復(fù)位后,空閑任務(wù)程序可以利用r0寄存器的內(nèi)容將CPU轉(zhuǎn)換為低功率消耗模式。
在上述說明中,說明了在空閑任務(wù)運行期間產(chǎn)生中斷時的OS中斷輸入處理。然而,由于處理中斷的堆棧重疊在空閑任務(wù)堆棧上,在執(zhí)行任意任務(wù)期間產(chǎn)生中斷時,OS中斷輸入處理中都執(zhí)行與第一實施方式中描述的相同處理。也就是說,其中產(chǎn)生中斷的該任務(wù)的CPU寄存器內(nèi)容存儲在任務(wù)堆棧中,然后,SP 1202的最終值存儲在處理中斷的堆棧的返回SP存儲區(qū)域1105中。
因此,處理中斷的堆棧所在的目標位置被重疊,也就是說,空閑任務(wù)堆棧的CPU寄存器存儲區(qū)域的第一地址由OS中斷輸入處理程序或中斷控制部分1211提供。在ALU 1204中計算SP差值常量1250的第一地址和其值。所計算的值作為存儲SP最終值的地址通過操作數(shù)地址1207和BCU1212提供給外部存儲器(RAM)1214。在此,在本實施方式中,其中考慮了r0寄存器存儲區(qū)域1107的并聯(lián)部分的值作為地址差值提供給SP差值常量1205。因此,處理中斷的堆棧的SP存儲區(qū)域1105的第一地址可以在空閑任務(wù)堆棧中確定為r0寄存器存儲區(qū)域1107的并聯(lián)區(qū)域的下個地址。
如上所述,處理中斷的堆棧重疊在空閑任務(wù)的任務(wù)堆棧上。因此,即使部分CPU寄存器用于空閑任務(wù),也能有效利用空閑任務(wù)的任務(wù)堆棧的未使用的CPU寄存器存儲區(qū)域。
(第三實施方式)第一實施方式和第二實施方式是通過注意空閑任務(wù)而描述的。然而,當確定無疑地識別出任務(wù)使用的CPU寄存器時,相同的方法可以應(yīng)用于除空閑任務(wù)之外的普通任務(wù)。此外,任務(wù)使用的CPU寄存器不是靜態(tài)確定的。即使在這種情況下,通過將信息保留在任務(wù)處理的變量等之中,第二實施方式中描述的方法也可以應(yīng)用于數(shù)據(jù)可以被覆蓋的CPU寄存器以及數(shù)據(jù)無需被覆蓋的CPU寄存器。此外,當使用例如C語言的高級語言時,第二實施方式中描述的方法可以這樣采用,即,編譯器存儲與變量形式的CPU寄存器或CPU上提供的SP差值信息存儲寄存器相關(guān)的信息。
圖13表示本發(fā)明用于實現(xiàn)上述多任務(wù)系統(tǒng)的任務(wù)控制器。本發(fā)明的任務(wù)控制器不同于第一實施方式和第二實施方式中的任務(wù)控制器,其不同點在于安裝了SP差值信息存儲寄存器1300。SP差值信息存儲寄存器1300是任意使用的。在步驟S502中參照的任務(wù)運行時存儲SP最終值的地址值可以事先由編譯器計算,并存儲在SP差值信息存儲寄存器1300中。按照這種方式,在任意任務(wù)運行期間產(chǎn)生中斷時,由ALU 1204計算在任務(wù)堆棧中的CPU寄存器存儲區(qū)域的第一地址,其中該任務(wù)堆棧上重疊了處理中斷的堆棧,且該第一地址事先提供給OS中斷輸入處理程序或中斷控制部分1211,并且由ALU 1204計算SP差值信息存儲寄存器1300的值,所計算的值作為地址通過操作數(shù)地址1207和BCU 1212提供給外部存儲器(RAM)1214。由此,當其中產(chǎn)生中斷的任務(wù)的CPU寄存器內(nèi)容存儲在任務(wù)堆棧中之后,SP 1202的最終值可以作為操作數(shù)1208記錄在外部存儲器(RAM)1214中。也就是說,處理中斷的堆棧的起始地址可以由編譯器等改變設(shè)置到SP差值信息存儲寄存器1300的任意值。應(yīng)當理解,除編譯器之外的例如普通應(yīng)用程序的程序可以將該值設(shè)置到SP差值信息存儲寄存器1300。硬件可以將該值設(shè)置到SP差值信息存儲寄存器1300。作為設(shè)置模式,可以采用多種方法而不背離本發(fā)明的原則。
在上述實施方式中,說明了PC和PSW的值存儲在任務(wù)堆棧上的例子。然而,運行任務(wù)期間的寄存器組和用于處理中斷的寄存器組可以根據(jù)CPU的種類而分開安裝。在這種CPU中,當接收到中斷時,PC和PSW的值沒有存儲在任務(wù)堆棧上,而是可以復(fù)制到位于僅用于處理中斷的寄存器組內(nèi)的存儲區(qū)域中。在這種情況下,鑒于硬件原因,將存儲在僅用于處理中斷的寄存器組中的PC和PSW值存儲到任務(wù)堆棧上,從而獲得與上述實施方式相同的效果。
根據(jù)本發(fā)明的多任務(wù)系統(tǒng)中的存儲器管理系統(tǒng)和任務(wù)控制器以雙重方式利用使用實時OS的系統(tǒng)的任務(wù)堆棧區(qū)域和中斷堆棧區(qū)域。因此,在整個系統(tǒng)中可以減小存儲器的可利用量。由此,多任務(wù)系統(tǒng)能以小容量存儲器有利地運行。當執(zhí)行軟件(具體地說是多任務(wù)系統(tǒng))的堆棧存儲器的管理方法時,該系統(tǒng)作為減小堆棧存儲器可利用量的程序結(jié)構(gòu)將非常有效。
權(quán)利要求
1.一種用于管理多任務(wù)系統(tǒng)堆棧的方法,包括下列步驟根據(jù)中斷的產(chǎn)生,將CPU的內(nèi)部信息存儲在一個被中斷任務(wù)的任務(wù)堆棧中作為第一區(qū)域;在存儲所述內(nèi)部信息之后,將堆棧指針的值存儲在中斷處理堆棧的指定第一位置;將所述堆棧指針設(shè)置到所述中斷處理堆棧的指定第二位置;以及開始中斷處理,其中,所述中斷處理堆棧的指定第二位置對應(yīng)于特定任務(wù)的堆棧區(qū)域中的所述第一區(qū)域的指定位置。
2.如權(quán)利要求1所述的管理堆棧的方法,其中,所述第一區(qū)域包括用于存儲從中斷處理返回控制所需的任務(wù)控制信息的第二區(qū)域;和直接設(shè)置在該第二區(qū)域之后的第三區(qū)域,以便存儲除所述任務(wù)控制信息之外的CPU內(nèi)部信息,以及在所述特定任務(wù)的任務(wù)堆棧的第一區(qū)域中的指定位置對應(yīng)于所述第一區(qū)域中第三區(qū)域的頂端地址。
3.如權(quán)利要求1所述的管理堆棧方法,其中,所述中斷處理堆棧的指定第一位置是所述中斷處理堆棧的頂端地址。
4.如權(quán)利要求1所述的管理堆棧方法,其中,所述中斷處理堆棧的指定第二位置直接位于所述中斷處理堆棧的指定第一位置之后。
5.如權(quán)利要求1所述的管理堆棧方法,其中,所述第一區(qū)域包括用于存儲從中斷處理返回控制所需的任務(wù)控制信息的第二區(qū)域;和直接位于該第二區(qū)域之后的第三區(qū)域,以便存儲除所述任務(wù)控制信息之外的CPU內(nèi)部信息,以及在所述特定任務(wù)的任務(wù)堆棧的第一區(qū)域中的指定位置是通過將第一區(qū)域中所述第三區(qū)域的頂端地址通過指定的地址差值的校正獲得的。
6.如權(quán)利要求5所述的管理堆棧方法,其中,所述地址差值是用于指定存儲在所述特定任務(wù)中使用的CPU內(nèi)部信息所需的區(qū)域。
7.如權(quán)利要求5所述的管理堆棧方法,其中,所述地址差值事先給定為一常量。
8.如權(quán)利要求5所述的管理堆棧方法,其中,所述地址差值通過執(zhí)行所述特定任務(wù)來設(shè)置。
9.如權(quán)利要求2所述的管理堆棧方法,其中,所述任務(wù)控制信息包括至少一個程序計數(shù)器和一個指示CPU狀態(tài)的程序狀態(tài)字(PSW)。
10.如權(quán)利要求1所述的管理堆棧方法,其中,所述特定任務(wù)是無需使用CPU內(nèi)部信息而自循環(huán)的空閑任務(wù)。
11.如權(quán)利要求1所述的管理堆棧方法,其中,所述特定任務(wù)是用于控制跳轉(zhuǎn)和返回到低功率消耗模式的任務(wù)。
12.如權(quán)利要求2所述的管理堆棧方法,其中,沒有信息存儲在所述第二區(qū)域,位于指定范圍內(nèi)的所述CPU任務(wù)控制信息和內(nèi)部信息沒有存儲在被中斷的所述任務(wù)的任務(wù)堆棧中,而是存儲在不同于所述任務(wù)堆棧的存儲區(qū)域中,除位于所述指定范圍內(nèi)的CPU內(nèi)部信息之外的CPU內(nèi)部信息存放在所述第三區(qū)域。
13.一種多任務(wù)系統(tǒng)的堆??刂破?,在該系統(tǒng)中根據(jù)中斷的產(chǎn)生將CPU內(nèi)的信息存儲在被中斷的任務(wù)的任務(wù)堆棧中,以便具有第一區(qū)域,在所述第一區(qū)域中進行存儲之后的堆棧指針值被存儲在中斷處理堆棧的指定第一位置,所述堆棧指針設(shè)置到該中斷處理堆棧的指定第二位置以便開始中斷處理,其中,控制機制這樣提供中斷處理堆棧的頂端地址允許對應(yīng)于在特定任務(wù)的任務(wù)堆棧的第一區(qū)域中的指定位置。
14.如權(quán)利要求13所述的堆??刂破鳎渲?,所述第一區(qū)域包括用于存儲從中斷處理返回控制所需的任務(wù)控制信息的第二區(qū)域;和直接位于該第二區(qū)域之后的第三區(qū)域,以存儲除所述任務(wù)控制信息之外的CPU內(nèi)部信息,以及所述特定任務(wù)的任務(wù)堆棧的第一區(qū)域中的指定位置對應(yīng)于所述第一區(qū)域中的第三區(qū)域的第一地址。
15.如權(quán)利要求13所述的堆??刂破?,其中,所述第一區(qū)域包括用于存儲從中斷處理返回控制所需的任務(wù)控制信息的第二區(qū)域;和直接位于該第二區(qū)域之后的第三區(qū)域,以存儲除所述任務(wù)控制信息之外的CPU內(nèi)部信息,以及在所述特定任務(wù)的任務(wù)堆棧的第一區(qū)域中的指定位置是通過將第一區(qū)域中所述第三區(qū)域的第一地址通過指定的地址差值的校正獲得的。
16.如權(quán)利要求15所述的堆??刂破鳎渲?,所述地址差值保存在地址差值存儲單元中,該單元表示存儲所述特定任務(wù)中使用的CPU信息所需的區(qū)域。
17.如權(quán)利要求15所述的堆??刂破?,其中,所述地址差值事先給定為一常量。
18.如權(quán)利要求15所述的管理堆棧方法,其中,所述地址差值通過執(zhí)行所述特定任務(wù)來設(shè)置。
19.一種用在根據(jù)權(quán)利要求5至8中任一項的方法中或在以根據(jù)權(quán)利要求15至18中任一項的堆??刂破髦械?、用于自動形成地址差值的編譯器。
全文摘要
當在空閑任務(wù)運行期間產(chǎn)生中斷時,在將CPU寄存器的值存儲在當前堆棧區(qū)域中之后,該當前堆棧區(qū)域轉(zhuǎn)換為僅用于處理中斷的堆棧區(qū)域。此時,堆棧具有將堆棧區(qū)域重疊在僅用于處理中斷的堆棧區(qū)域之上的結(jié)構(gòu)。當空閑處理期間產(chǎn)生中斷時,使用處理中斷的堆棧,以便覆蓋其中存儲CPU寄存器值的區(qū)域。因此,通過一般的使用中斷處理中使用的堆棧來減小RAM的使用量,其中在多任務(wù)系統(tǒng)中將堆棧用于空閑處理。
文檔編號G06F9/48GK1584840SQ200410005428
公開日2005年2月23日 申請日期2004年2月18日 優(yōu)先權(quán)日2003年7月30日
發(fā)明者小玉將義, 小林圭太 申請人:松下電器產(chǎn)業(yè)株式會社