專利名稱:單片機操作系統(tǒng)的模塊化實現(xiàn)方法
技術領域:
本發(fā)明涉及通信自動化和控制領域,具體涉及在單片機匯編操作系統(tǒng)中操作系統(tǒng)和應用進程的實現(xiàn)方式。
背景技術:
在通信領域、自動化和控制領域中,系統(tǒng)的控制往往分為多級控制,而單片機例如8031/8051等的匯編系統(tǒng)又常用作子系統(tǒng)的控制,用來處理諸如單板級子系統(tǒng)的工作。在8031/8051子系統(tǒng)中,它的操作系統(tǒng)和應用程序結構安排是否合理對于提高子系統(tǒng)的安全性、可靠性起了重要的作用,同時也可以減少應用程序設計的復雜度,使得應用程序的實現(xiàn)更加簡易,可讀。
現(xiàn)有的8031/8051匯編系統(tǒng),還沒有一個現(xiàn)成的操作系統(tǒng)專門用于系統(tǒng)控制。整個子系統(tǒng)的控制全部由應用程序完成,一方面它要完成所有操作系統(tǒng)的功能,另一方面又要完成應用程序的功能,兩者完全融合為一體。這樣的實現(xiàn)方式增加了系統(tǒng)的復雜度,同時也不利于系統(tǒng)的擴充和應用。在一個普遍應用8031/8051匯編系統(tǒng)作為子系統(tǒng)控制的操作系統(tǒng)中,存在多個子系統(tǒng),而每個子系統(tǒng)又必須完成一套完整的操作系統(tǒng)功能。如在一個采用8031/8051匯編系統(tǒng)作為子系統(tǒng)控制的交換機系統(tǒng)中,它的子系統(tǒng)類型很多用戶子系統(tǒng)、雙音多頻子系統(tǒng)、交換網(wǎng)子系統(tǒng)、多頻互控子系統(tǒng)、中繼子系統(tǒng)、測試子系統(tǒng)等,一方面這些子系統(tǒng)需完成的應用功能很復雜,另一方面它又要完成操作系統(tǒng)中時鐘控制系統(tǒng)、內存管理系統(tǒng)、消息調度系統(tǒng)及子系統(tǒng)和主控系統(tǒng)進行消息通訊等功能。如果所有這些功能全部都由應用程序來完成,會使得應用程序非常復雜,很容易出錯,同時對子系統(tǒng)的擴充也很麻煩,每增加一項子系統(tǒng)或子系統(tǒng)功能,都要對系統(tǒng)結構做出調整。另外對于維護也很難,畢竟系統(tǒng)太復雜了,它既有來自操作系統(tǒng)的,又有來自應用程序的。
發(fā)明內容
本發(fā)明的目的在于提供一種單片機操作系統(tǒng)的模塊化實現(xiàn)方法,適合于所有子系統(tǒng)的獨立的操作系統(tǒng),同時給應用程序提供了標準的接口,使得應用程序只關注于具體應用的實現(xiàn)即可。
本發(fā)明的目的是這樣實現(xiàn)的本發(fā)明公開了一種單片機操作系統(tǒng)的模塊化實現(xiàn)方法,用于對主控系統(tǒng)與子系統(tǒng)組成的控制系統(tǒng)中的子系統(tǒng)進行控制,包括設置系統(tǒng)調度的步驟,用于完成任務的調度功能,通過消息的觸發(fā)對應用進程進行調度,同時完成存放消息的內存緩沖區(qū)的管理工作;設置中斷處理步驟,用于完成中斷處理功能,通過內部時鐘周期性地產(chǎn)生中斷,在中斷里對中斷任務進行周期性調度;設置定時掃描步驟,用于完成時鐘管理功能,為用戶提供定時和定時取消的服務;設置消息通訊的步驟,用于完成進程間的消息通訊,提供子系統(tǒng)內進程間的通訊及子系統(tǒng)與主控系統(tǒng)進程間的通訊。
所述設置系統(tǒng)調度的步驟包括對系統(tǒng)環(huán)境進行初始化工作,對時鐘數(shù)據(jù)區(qū)進行處理,根據(jù)消息及進程調度表對應用進程進行調度;所述設置中斷處理步驟包括保存中斷環(huán)境,根據(jù)中斷任務周期性掃描控制表對任務進行調度,退出中斷時恢復中斷前的環(huán)境;所述設置定時掃描步驟包括根據(jù)進程控制進行定時器的設定,在每次中斷處理中,簡單地置一個調度標志;每次掃描定時數(shù)據(jù)區(qū)前,先檢查該標志是否已置上,如已置上,則對該標志清0并對定時數(shù)據(jù)區(qū)進行掃描處理;否則不處理。
所述設置消息通訊的步驟包括時鐘級任務和基本級進程間進行通訊,基本級進程間相互通訊,子系統(tǒng)和主控系統(tǒng)進程間進行通訊;系統(tǒng)處理時首先需要確定是子系統(tǒng)內進程間的通訊還是子系統(tǒng)和主控系統(tǒng)進程間的通訊。
所述初始化工作包括設置堆棧起始地址、中斷定時系統(tǒng)的初試設置、寄存器組的設定、系統(tǒng)控制字的設定,建立消息調度隊列、空閑內存管理隊列、準備打包隊列、消息包發(fā)送隊列,初始化定時器數(shù)據(jù)區(qū)。
所述對時鐘數(shù)據(jù)區(qū)進行處理包括檢查定時器定時是否到,如果是,則給設置定時器的進程產(chǎn)生定時消息。
所述定時消息被調度前,檢查定時器數(shù)據(jù)區(qū)的校驗值和當時定時器中的校驗值是否相同。
所述調度進程表、周期性掃描控制表、中斷任務調度表存儲于與操作系統(tǒng)存儲地址不同的存儲空間。
所述的系統(tǒng)調度還包括應用進程執(zhí)行完畢,將所述消息掛入空閑隊列,并重新開始時鐘數(shù)據(jù)區(qū)處理。
所述保存中斷環(huán)境是采用壓棧的方式,保存中斷寄存器、中斷向量、基本級操作選用的寄存器組,另外還需切換寄存器組,并重新設置中斷時間,以備下次中斷的產(chǎn)生。
所述周期性掃描控制表由多個字節(jié)組成,一個字節(jié)的一位代表一個需進行處理的任務。
所述中斷任務包括每次中斷掃描,只調度周期性掃描控制表的那個字節(jié)中需調度的任務,下一個中斷到來時則掃描調度表中下一個字節(jié)中需調度的任務,對周期性掃描控制表進行循環(huán)調度。
所述對定時數(shù)據(jù)區(qū)進行掃描處理包括定時器加1操作,當定時器值滿則根據(jù)數(shù)據(jù)區(qū)中保留的進程號產(chǎn)生超時消息,并將校驗值帶入產(chǎn)生的消息中以備處理。
所述時鐘級任務和基本級進程間的通訊為單向的通訊方式,包括系統(tǒng)申請一個空閑的內存區(qū),在數(shù)據(jù)區(qū)中填入需接受該消息的進程、發(fā)送的消息類型、消息的長度和消息內容,并將該消息掛入消息調度隊列,等待調度系統(tǒng)將該消息發(fā)送到相應的進程。
所述基本級進程間的相互通訊為雙向通訊方式,包括系統(tǒng)申請一個空閑的內存區(qū),在數(shù)據(jù)區(qū)中填入需接受進程、發(fā)送進程、消息類型、消息的長度和消息內容拷貝到消息區(qū)中,并重新申請另一個新的內存區(qū),將上個消息的地址存入消息內容區(qū),將當前消息的地址作為消息內容保存下來,作為發(fā)送消息發(fā)送到負責打包、拆包的進程處。
所述子系統(tǒng)和主控系統(tǒng)進程間的通訊通過串口通訊或者采用與外部共享內存區(qū)的方式。
所述與外部共享內存區(qū)的方式包括兩部分基本級的進程處理,用于將發(fā)送主控系統(tǒng)的消息內容進行打包以便在一個數(shù)據(jù)包中存放更多的消息;接受主控系統(tǒng)來的消息,對消息包進行拆包,并將消息發(fā)送到接受進程;對共享內存區(qū)的讀、寫操作,用于完成和主控系統(tǒng)間消息數(shù)據(jù)包可靠性傳輸。
所述應用進程可通過調用操作系統(tǒng)提供的原語完成定時器的設定與取消、消息的發(fā)送與接收。
本發(fā)明降低了所述子系統(tǒng)的復雜程度,從功能和結構上把操作系統(tǒng)和應用程序完全分離開來,大大提高了普遍應用8031/8051等單片機匯編系統(tǒng)作為子系統(tǒng)控制的多級系統(tǒng)的效率。
圖1為本發(fā)明的各個系統(tǒng)模塊示意圖;圖2為本發(fā)明的調度系統(tǒng)模塊的實現(xiàn)流程;圖3為本發(fā)明的中斷系統(tǒng)模塊的實現(xiàn)流程;圖4為本發(fā)明的定時系統(tǒng)模塊的實現(xiàn)流程;圖5為本發(fā)明的定時系統(tǒng)模塊中定時器設置流程;圖6為本發(fā)明的定時系統(tǒng)模塊中定時器取消流程;圖7為本發(fā)明的通訊系統(tǒng)模塊中時鐘級任務和基本級進程間的通訊流程;圖8為本發(fā)明的通訊系統(tǒng)模塊中基本級進程間的通訊和子系統(tǒng)內與主控系統(tǒng)內進程的通訊流程;圖9為圖8中本發(fā)明對消息進行打包和拆包的流程。
具體實施例方式
首先介紹8031/8051匯編系統(tǒng)中操作系統(tǒng)的實現(xiàn)原理,然后介紹提供給應用程序應用的接口和應用程序的結構。
圖中涉及的步驟如下步驟21環(huán)境初始化化步驟22對定時器數(shù)據(jù)區(qū)進行處理步驟23判斷調度隊列是否為空步驟24判斷是否為超時消息步驟25判斷校驗值是否正確步驟26取出隊列中的消息,根據(jù)進程調度表進行調度步驟27將消息歸還空閑內存管理隊列步驟31保存中斷環(huán)境步驟32找到中斷任務調度表的需處理的字節(jié),準備處理第0位任務步驟33判斷當前任務是否需調度步驟34取出中斷任務調度表進行調度步驟35判斷是否所有任務全部調度步驟36找任務控制字節(jié)中的下一位步驟37通過彈?;謴图拇嫫鹘M、中斷向量、中斷寄存器、切換回原先的寄存器組步驟38退出中斷步驟41判斷定時標志是否置上步驟42對該標志清查步驟43判斷當前數(shù)據(jù)區(qū)是否設置了定時步驟44定時器定時值加1步驟45判斷定時時間是否滿步驟46產(chǎn)生超時消息,并將消息掛入消息調度隊列步驟47判斷是否所有定時均處理步驟48找到下一個定時器數(shù)據(jù)區(qū)步驟51根據(jù)定時器找到該定時器的數(shù)據(jù)區(qū)步驟52將定時器值取反后填入定時器值區(qū)域,并將設定定時器的進程號填入步驟61根據(jù)定時器找到該定時器的數(shù)據(jù)區(qū)步驟62將該定時器的定時器值區(qū)域清0,并將該定時器的校驗碼加1步驟71申請一個空閑的內存區(qū)步驟72在緩存區(qū)中填入需接受該消息的進程、發(fā)送的消息類型、消息的長度和消息內容步驟73該消息掛入消息調度隊列步驟81判斷是否是子系統(tǒng)內的消息步驟82申請一個空閑的內存區(qū),將接受進程、發(fā)送進程、消息類型、消息長度,消息內容拷入步驟83該消息掛入消息調度隊列步驟84申請一塊空閑內存區(qū),將接受進程、發(fā)送進程、消息類型、消息長度和消息內容填入步驟85重新申請另一個新的內存區(qū),將當前消息的地址作為消息內容保存下來,作為發(fā)送消息發(fā)送到負責打包、拆包的進程處步驟91判斷當前消息類型步驟92將消息掛入準備打包隊列步驟93判斷當前是否允許打包步驟94置不允許打包,并申請一空閑內存區(qū)步驟95從準備打包隊列中取出消息,并進行打包,歸還內存緩沖區(qū)步驟96判斷包是否已滿步驟97判斷準備打包隊列是否為空步驟98判斷包是否可裝下當前消息步驟99將數(shù)據(jù)包掛入消息包發(fā)送隊列步驟101將消息包拆包,并掛入消息調度隊列步驟102判斷當前是否允許打包步驟103置不允許打包,并申請一空閑內存區(qū)步驟104從準備打包隊列中取出消息,并進行打包,歸還內存緩沖區(qū)步驟105判斷包是否已滿步驟106判斷準備打包隊列是否為空步驟107判斷包是否可裝下當前消息步驟108將數(shù)據(jù)包掛入消息包發(fā)送隊列一、操作系統(tǒng)的構成操作系統(tǒng)分為以下幾個方面,見圖1調度系統(tǒng)14、中斷系統(tǒng)11、定時系統(tǒng)13、通訊系統(tǒng)12,下面會詳細介紹每個系統(tǒng)的實現(xiàn)原理。
8031/8051匯編系統(tǒng)不同的指令執(zhí)行時間不同,一般按照雙字節(jié)指令執(zhí)行時間來計算,每個指令執(zhí)行需兩納秒,如中斷處理按十毫秒計算,即所有的中斷任務處理必須在十毫秒內完成,也就是說最多可執(zhí)行五千條指令,所以應用處理必須盡可能快,操作系統(tǒng)的處理也這樣。因此,下面系統(tǒng)各功能的實現(xiàn)均需考慮執(zhí)行的效率,特別是中斷處理不能占用太多時長。
1、調度系統(tǒng)系統(tǒng)中對所有程序的處理分成兩個優(yōu)先級別一個是處理消息的進程,它的優(yōu)先級別低,稱之為應用進程基本進程15,它可以被高優(yōu)先級的時鐘任務中斷;另外一個是在時鐘中斷中處理的程序,它的優(yōu)先級別高,稱之為應用進程中斷任務16,見圖1。
在8031/8051匯編系統(tǒng)中,系統(tǒng)所做的工作包括兩方面一方面對硬件進行周期性的掃描,將掃描得到內容進行處理并上報主控系統(tǒng),另一方面接受主控系統(tǒng)傳遞下來的消息,將消息傳送到相應的應用進程去執(zhí)行。對所有的數(shù)據(jù)通訊采用消息傳遞的處理方式,而不采用共享數(shù)據(jù)區(qū)的方式。對在基本級應用進程間的通訊或同主控系統(tǒng)進程間的通訊均采用消息通訊的方式;而在中斷處理中,掃描硬件所得到的信息也通過消息的方式發(fā)送到相應的基本級進程進行處理。
系統(tǒng)調度首先對環(huán)境進行初始化工作,這其中包括設置堆棧起始地址、中斷定時系統(tǒng)的初試設置、寄存器組的設定、系統(tǒng)控制字的設定,建立消息調度隊列、空閑內存管理隊列、準備打包隊列、消息包發(fā)送隊列,初始化定時器數(shù)據(jù)區(qū),步驟21。初始化工作完成后,對定時器數(shù)據(jù)區(qū)進行檢查,步驟22,用以發(fā)現(xiàn)是否有定時器定時到,如果有,則給設置定時器的進程產(chǎn)生定時消息。隨后檢查消息調度隊列中是否有消息存在,如有則進行調度,需根據(jù)進程調度表調度相應的進程,并把該消息通過寄存器傳送給應用進程進行處理,步驟23。還包括判斷該消息是否為超時消息,步驟24。在應用進程執(zhí)行完畢后,將該消息掛入空閑內存管理隊列,并重新開始掃描定時器數(shù)據(jù)區(qū),步驟27。對定時消息進行調度前,步驟26需進行特別的檢查,檢查定時器數(shù)據(jù)區(qū)中定時器的校驗值和當前定時器中的校驗值是否相同,步驟25,以防止定時消息掛入消息調度隊列后用戶又取消了該定時器。
在不同的子系統(tǒng)中,系統(tǒng)調度的應用進程不同,因此將進程調度表放在和操作系統(tǒng)不在同一處的程序存儲空間,從而使得操作系統(tǒng)具有獨立性。
2、中斷系統(tǒng)在中斷處理中,首先要保存中斷環(huán)境,步驟31,使得在中斷處理結束退出中斷時,能夠繼續(xù)進行中斷前的處理。環(huán)境的保存采用壓棧的方式,要保存的中斷環(huán)境包括中斷寄存器、中斷向量、基本級操作選用的寄存器組,另外還需切換寄存器組(即在中斷處理中和調度進程處理中采用不同的寄存器組),并重新設置中斷時間,以備下次中斷的產(chǎn)生。
在上述環(huán)境準備好以后,按照周期性掃描控制表進行調度。周期性掃描控制表是這樣的一種表,它由多個字節(jié)組成,一個字節(jié)的一位代表一個需進行處理的任務,這樣共有八個任務可進行處理。相應的存在一個中斷任務調度表,對這8個任務可進行調度。每次中斷掃描,只調度周期性掃描控制表的那個字節(jié)中需調度的任務,下一個中斷到來時則掃描調度表中下一個字節(jié)中需調度的任務,對周期性掃描控制表進行循環(huán)調度。對每個任務的處理并不是每次都需要進行調度,而是根據(jù)實際的需要,對表中的每個任務的調度識別,用“0”和“1”來進行區(qū)分,某一比特為“0”,則該比特所對應的任務在本次中斷中無需調度,而為“1”的比特所對應的任務則需調度。這樣可以根據(jù)需要控制不同任務的調度周期,如每次中斷調度一次、每隔一個中斷調度一次、每隔四個中斷調度一次、每隔十個中斷調度一次等。
中斷任務處理的周期性掃描控制表可以是如下結構第7 6 5 4 3 2 1 0位
上面是20個字節(jié),每個字節(jié)有8位,代表可處理8個時鐘級中斷處理任務。其中第0個任務每個中斷均需調度一次;第1個任務每4個中斷調度一次;第2個任務每20個中斷調度一次;第3個任務每10個中斷調度一次;第4個任務每20個中斷調度一次;不存在任務5到任務7。
在退出中斷前,根據(jù)壓棧的先后順序進行相反的彈棧處理,先后彈出寄存器組、中斷向量、中斷寄存器、切換回原先的寄存器組,步驟37。所有中斷任務處理完畢后,需退出中斷,步驟38。具體過程見圖3。
周期性掃描控制表和中斷任務調度表同樣由于不同的子系統(tǒng)而不同,也和操作系統(tǒng)放在不同的程序存儲空間,從而使得操作具有獨立性。
3、定時系統(tǒng)采用定時數(shù)據(jù)區(qū)管理的方式來進行控制,每個定時器對應于固定的定時數(shù)據(jù)區(qū),進程需進行哪個定時器的設定由進程控制。每個定時器數(shù)據(jù)區(qū)安排了以下內容兩個字節(jié)的定時設定值保留區(qū),一個字節(jié)用以記錄設定定時器的進程號,還有一個字節(jié)用來進行校驗。
在進行定時設定時,根據(jù)定時器號找到相應的定時器數(shù)據(jù)區(qū),步驟51,記錄下用戶設定的時長,同時記錄下當前的進程號。由于8031系統(tǒng)的單字節(jié)運行方式,系統(tǒng)執(zhí)行減一操作比較困難,因此將定時值取反后放入定時設定值保留區(qū),步驟52,以便在掃描定時器數(shù)據(jù)區(qū)時,執(zhí)行加1的操作即可,見圖5。
在進行定時取消操作時,根據(jù)定時器號找到相應的定時器數(shù)據(jù)區(qū),步驟61,將定時設定值保留區(qū)清零,同時將該定時器數(shù)據(jù)區(qū)的校驗值加1,步驟62,見圖6。
定時器數(shù)據(jù)區(qū)的檢測原理上應該在中斷里完成,因為中斷的周期性是有保障的,它是周期性地掃描定時器數(shù)據(jù)區(qū),并對設置定時的定時器執(zhí)行加1的操作,當定時器滿時則產(chǎn)生超時消息。而這里定時器數(shù)據(jù)區(qū)的調度由調度系統(tǒng)進行調度,同樣是每個中斷周期調度一次,中斷處理只是在每次中斷中置一個需對定時器數(shù)據(jù)區(qū)進行調度的標志。這樣做的目的是為了減少中斷任務執(zhí)行所需的時間。需掃描所有的定時器數(shù)據(jù)區(qū),對定時設定值保留區(qū)中為“0”的定時器不進行處理;對不為0的定時器進行加1的操作,如定時器值滿則根據(jù)數(shù)據(jù)區(qū)中保留的進程號產(chǎn)生超時消息,并將校驗值帶入產(chǎn)生的消息中以備處理。見圖4。
4、通訊系統(tǒng)由于本系統(tǒng)的設計采用消息驅動的方式,因此進程間的通訊就是一個很重要的內容。進程間的通訊分為以下幾種時鐘級任務和基本級進程間的通訊、基本級進程間的相互通訊、子系統(tǒng)和主控系統(tǒng)進程間的通訊。時鐘級任務和基本級進程間的通訊是一種單向的通訊,時鐘級任務可以向基本級進程發(fā)送消息,反之則不行。其它兩種通訊則是雙向的。子系統(tǒng)和主控系統(tǒng)間的通訊一般有兩種方式,一種是通過串口通訊的方式,另一種是采用與外部共享內存區(qū)的方式,即子系統(tǒng)向共享內存區(qū)中寫入數(shù)據(jù),主控系統(tǒng)可以讀取該數(shù)據(jù)。而主控系統(tǒng)同樣可以向該共享內存區(qū)中寫入數(shù)據(jù),而子系統(tǒng)進行讀取。下面對子系統(tǒng)和主控系統(tǒng)間進程通訊的設計就采用共享內存區(qū)的方式進行說明。
消息區(qū)的管理分成系統(tǒng)區(qū)和用戶數(shù)據(jù)區(qū),系統(tǒng)區(qū)用來控制消息的流程,它包括接受消息的進程號、發(fā)送消息的進程號、發(fā)送的消息類型、發(fā)送消息的長度。用戶數(shù)據(jù)區(qū)則包含用戶需發(fā)送的信息。
時鐘級任務和基本級進程間的通訊采用了一種單獨的通訊方式,它通過寄存器將需發(fā)送的信息帶入。見圖7,系統(tǒng)首先申請一個空閑的內存區(qū),步驟71,在數(shù)據(jù)緩存區(qū)中填入需接受該消息的進程、發(fā)送的消息類型、消息的長度和消息內容,步驟72,并將該消息掛入消息調度隊列,步驟73,等待調度系統(tǒng)將該消息發(fā)送到相應的進程。
基本級進程間的相互通訊和子系統(tǒng)與主控系統(tǒng)內進程的通訊采用了另外一種控制方式。見圖8,系統(tǒng)處理時首先需要確定是子系統(tǒng)內進程間的通訊還是子系統(tǒng)和主控系統(tǒng)進程間的通訊,步驟81。如果是子系統(tǒng)內的通訊,它的處理比較簡單,和時鐘級任務和基本級進程間的通訊相同,系統(tǒng)首先申請一個空閑的內存區(qū),在數(shù)據(jù)區(qū)中填入需接受消息的進程號、發(fā)送消息的進程號、發(fā)送的消息類型、消息的長度,并將消息內容拷貝到消息區(qū)中,步驟82,并將該消息掛入消息調度隊列,步驟83,等待調度系統(tǒng)將該消息發(fā)送到相應的進程。
如果是子系統(tǒng)和主控系統(tǒng)間的通訊,它的處理比較復雜。以共享內存區(qū)方式的通訊方式進行說明。它的處理分成兩部分,一部分是基本級的進程處理,它負責對需發(fā)送到主控系統(tǒng)的消息內容進行打包,以便在一個數(shù)據(jù)包中能夠存放更多的消息;接受主控系統(tǒng)來的消息,對消息包進行拆包,并將消息發(fā)送到接受進程;另外一方面是對共享內存區(qū)的讀、寫操作,它負責完成和主控系統(tǒng)間消息數(shù)據(jù)包可靠性傳輸,這部分的實現(xiàn)是在時鐘中斷里完成的,是一個中斷級的任務。
如果消息是發(fā)往主控系統(tǒng)的,首先用戶申請一塊空閑內存區(qū),將需要接受該消息的進程號、消息類型、消息長度和消息內容填入,步驟84。
由于基本級的進程優(yōu)先級別相同,負責打包、拆包的進程占用時間的長短不會影響到用戶進程的處理。在這里,重新申請一個新的內存區(qū),將當前消息的地址作為消息內容保存下來,作為發(fā)送消息發(fā)送到負責打包、拆包的進程處,步驟85。
在負責打包、拆包的進程處,首先檢查消息的內容,步驟91,如果是發(fā)送消息,則根據(jù)和主控系統(tǒng)的約定,對消息進行打包處理,步驟92--98,可同時將多個消息打入一個數(shù)據(jù)包中,并掛入消息包發(fā)送隊列,步驟99,見圖9左半部分。如果是接受消息,則對數(shù)據(jù)包進行分拆,分拆成一個一個的消息掛入調度隊列等待調度,步驟101--108,見圖9右半部分。
在時鐘級的發(fā)送接受任務處,采用1比特的滑動窗口進行數(shù)據(jù)包的發(fā)送、接受控制,將消息包發(fā)送隊列中的數(shù)據(jù)包寫入共享內存區(qū)中,同時讀取共享內存區(qū)中的數(shù)據(jù),在完成讀取校驗后把該數(shù)據(jù)包作為接受消息發(fā)送到負責打包、拆包的進程處,等待對消息進行拆包處理。
二、應用系統(tǒng)的構成由于應用進程是采用消息驅動的方式進行工作的,也就是說接受了什么樣的消息進行什么樣的處理。在對消息處理時,可以按照進程的狀態(tài)進行劃分,即在特定的狀態(tài)下只處理特定的消息,消息處理完后遷移到下一個狀態(tài),再等待消息進行處理,對在該狀態(tài)下的其它消息不進行處理。
應用進程可通過調用操作系統(tǒng)提供的原語完成這些有關的功能,這些功能包括定時器的設定與取消、消息的發(fā)送與接受等。對系統(tǒng)提供的這些功能的調用通過直接調用相關原語的地址來實現(xiàn)的。
8031/8051匯編系統(tǒng)提供了64K的程序存貯空間,通過編譯應用程序,可以知道應用程序的大小。將應用程序安排在不同的存儲空間,操作系統(tǒng)直接調用存儲空間的地址,從而將各個應用程序完全分開,進行單獨編譯與調試。
時鐘級的發(fā)送接受任務處,采用1比特的滑動窗口通訊協(xié)議進行數(shù)據(jù)包的發(fā)送、接受控制。對于1比特的滑動窗口通訊協(xié)議就不詳細介紹了。只有一點需說明,在數(shù)據(jù)包發(fā)送成功后,需將當前允許打包標志置上。
對應用進程調用系統(tǒng)提供原語的方式,是通過直接調用相關原語的地址來實現(xiàn)的。
如下定義所示SENDEQU 0050HOUTPUT EQU 0053HSET EQU 0056HRESET EQU 0059HGETBUF EQU 005CH而在操作系統(tǒng)的相應地址處則作如下處理ORG 0050HLJMP SENDLJMP OUTPUTLJMP SETLJMP RESETLJMP GETBUF這樣一來,可以使得各個應用程序完全分開,進行單獨編譯與調試。
權利要求
1.一種單片機操作系統(tǒng)的模塊化實現(xiàn)方法,用于對主控系統(tǒng)與子系統(tǒng)組成的控制系統(tǒng)中的子系統(tǒng)進行控制,其特征在于,包括設置系統(tǒng)調度的步驟,用于完成任務的調度功能,通過消息的觸發(fā)對應用進程進行調度,同時完成存放消息的內存緩沖區(qū)的管理工作;設置中斷處理的步驟,用于完成中斷處理功能,通過內部時鐘周期性地產(chǎn)生中斷,在中斷里對中斷任務進行周期性調度;設置定時掃描的步驟,用于完成時鐘管理功能,為用戶提供定時和定時取消的服務;設置消息通訊的步驟,用于完成進程間的消息通訊,提供子系統(tǒng)內進程間的通訊及子系統(tǒng)與主控系統(tǒng)進程間的通訊。
2.如權利要求1所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述系統(tǒng)調度的步驟包括對系統(tǒng)環(huán)境進行初始化工作,對時鐘數(shù)據(jù)區(qū)進行處理,根據(jù)消息及進程調度表對應用進程進行調度;所述中斷處理的步驟包括保存中斷環(huán)境,根據(jù)中斷任務周期性掃描控制表對任務進行調度,退出中斷時恢復中斷前的環(huán)境;所述定時掃描的步驟包括根據(jù)進程控制進行定時器的設定,在每次中斷處理中,置一個調度標志;每次掃描定時數(shù)據(jù)區(qū)前,先檢查該標志,并對定時數(shù)據(jù)區(qū)進行掃描處理;所述消息通訊的步驟包括時鐘級任務和基本級進程間進行通訊,基本級進程間相互通訊,子系統(tǒng)和主控系統(tǒng)進程間進行通訊。
3.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述初始化工作包括設置堆棧起始地址、中斷定時系統(tǒng)的初試設置、寄存器組的設定、系統(tǒng)控制字的設定,建立消息調度隊列、空閑內存管理隊列、準備打包隊列、消息包發(fā)送隊列,初始化定時器數(shù)據(jù)區(qū)。
4.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述對時鐘數(shù)據(jù)區(qū)進行處理包括檢查定時器定時是否到,如果是,則給設置定時器的進程產(chǎn)生定時消息。
5.如權利要求4所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述定時消息被調度前,檢查定時器數(shù)據(jù)區(qū)的校驗值和當時定時器中的校驗值是否相同。
6.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述調度進程表、周期性掃描控制表、中斷任務調度表存儲于與操作系統(tǒng)存儲地址不同的存儲空間。
7.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述的系統(tǒng)調度還包括應用進程執(zhí)行完畢,將所述消息掛入空閑隊列,并重新開始時鐘數(shù)據(jù)區(qū)處理。
8.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述保存中斷環(huán)境是采用壓棧的方式,保存中斷寄存器、中斷向量、基本級操作選用的寄存器組,另外還需切換寄存器組,并重新設置中斷時間,以備下次中斷的產(chǎn)生。
9.如權利要求2或6所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述周期性掃描控制表由多個字節(jié)組成,一個字節(jié)的一位代表一個需進行處理的任務。
10.如權利要求2或6所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述中斷任務是指每次中斷掃描,只調度周期性掃描控制表的那個字節(jié)中需調度的任務,下一個中斷到來時則掃描調度表中下一個字節(jié)中需調度的任務,對周期性掃描控制表進行循環(huán)調度。
11.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述對定時數(shù)據(jù)區(qū)進行掃描處理包括定時器加1操作,當定時器值滿則根據(jù)數(shù)據(jù)區(qū)中保留的進程號產(chǎn)生超時消息,并將校驗值帶入產(chǎn)生的消息中以備處理。
12.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述時鐘級任務和基本級進程間的通訊為單向的通訊方式,包括通過寄存器將需發(fā)送的信息帶入,系統(tǒng)申請一個空閑的內存區(qū),在數(shù)據(jù)區(qū)中填入需接受該消息的進程號、發(fā)送的消息類型、消息的長度和消息內容,并將該消息掛入消息調度隊列,等待調度系統(tǒng)將該消息發(fā)送到相應的進程。
13.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述基本級進程間的相互通訊為雙向通訊方式,包括系統(tǒng)處理時首先需要確定是子系統(tǒng)內進程間的通訊還是子系統(tǒng)和主控系統(tǒng)進程間的通訊,如果是子系統(tǒng)內的通訊,系統(tǒng)首先申請一個空閑的內存區(qū),在數(shù)據(jù)區(qū)中填入需接受消息的進程號、發(fā)送消息的進程號、發(fā)送的消息類型、消息的長度,并將消息內容拷貝到消息區(qū)中,并將該消息掛入消息調度隊列,等待調度系統(tǒng)將該消息發(fā)送到相應的進程;如果是子系統(tǒng)和主控系統(tǒng)間的通訊,則系統(tǒng)申請一個空閑的內存區(qū),在數(shù)據(jù)區(qū)中填入需接受進程、發(fā)送進程、消息類型、消息的長度和消息內容拷貝到消息區(qū)中,并重新申請另一個新的內存區(qū),將上個消息的地址存入消息內容區(qū),將當前消息的地址作為消息內容保存下來,作為發(fā)送消息發(fā)送到負責打包、拆包的進程處。
14.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述子系統(tǒng)和主控系統(tǒng)進程間的通訊通過串口通訊方式或者采用與外部共享內存區(qū)的方式。
15.如權利要求14所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述與外部共享內存區(qū)的方式包括基本級進程處理,用于將發(fā)送主控系統(tǒng)的消息內容進行打包以便在一個數(shù)據(jù)包中存放更多的消息;接受主控系統(tǒng)來的消息,對消息包進行拆包,并將消息發(fā)送到接受進程;對共享內存區(qū)的讀、寫操作,用于完成和主控系統(tǒng)間消息數(shù)據(jù)包可靠性傳輸。
16.如權利要求2所述的單片機操作系統(tǒng)的模塊化實現(xiàn)方法,其特征在于,所述應用進程可通過調用操作系統(tǒng)提供的原語完成定時器的設定與取消、消息的發(fā)送與接收。
全文摘要
本發(fā)明涉及一種單片機操作系統(tǒng)及實現(xiàn)方法,用于對主控系統(tǒng)與子系統(tǒng)組成的控制系統(tǒng)中的子系統(tǒng)進行控制,包括設置系統(tǒng)調度,用于完成任務的調度功能,通過消息的觸發(fā)對應用進程進行調度,同時完成存放消息的內存緩沖區(qū)的管理工作;設置中斷處理,用于完成中斷處理功能,通過內部時鐘周期性地產(chǎn)生中斷,在中斷里對中斷任務進行周期性調度;設置定時掃描,用于完成時鐘管理功能,為用戶提供定時和定時取消的服務;設置消息通訊,用于完成進程間的消息通訊,提供子系統(tǒng)內進程間的通訊及子系統(tǒng)與主控系統(tǒng)進程間的通訊。本發(fā)明降低了子系統(tǒng)的復雜程度,把操作系統(tǒng)和應用程序完全分離開來,大大提高了單片機匯編系統(tǒng)作為子系統(tǒng)控制的多級系統(tǒng)的效率。
文檔編號G06F9/54GK1558329SQ200410046460
公開日2004年12月29日 申請日期2004年6月9日 優(yōu)先權日2004年2月9日
發(fā)明者王永新, 朱西延 申請人:中興通訊股份有限公司