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