專利名稱:實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法
技術(shù)領域:
本發(fā)明屬于對計算機操作系統(tǒng)性能所作的改進,涉及的是一種實現(xiàn)嵌入式系統(tǒng)任務間自適應通訊的方法,具體是一種實現(xiàn)嵌入式系統(tǒng)和實時系統(tǒng)任務間消息發(fā)送的方法,尤其涉及一種實現(xiàn)嵌入式系統(tǒng)由通訊守護任務向其它任務發(fā)送消息的方法。
背景技術(shù):
一個典型的通訊系統(tǒng)通常為多CPU的分布式系統(tǒng),每個單板上分布著若干個任務,執(zhí)行特定的工作。從上層應用的角度來看,單板內(nèi)的任務和單板間的任務通過消息的方式進行交互。對于板間通訊,設計者通常會設計一個通訊守護任務,負責從底層驅(qū)動接收板間來的數(shù)據(jù),按照消息格式構(gòu)造成消息后分發(fā)到各任務。同時也負責從本板上的各任務接收消息,轉(zhuǎn)發(fā)給底層驅(qū)動,通過物理鏈路把消息發(fā)送到其它單板上的任務。
在一個通訊系統(tǒng)中,有些單板的板間通訊流量非常大,通訊守護任務被頻繁調(diào)度,收到板間來的消息后,調(diào)用操作系統(tǒng)提供的消息發(fā)送接口把消息發(fā)送到目的任務。在操作系統(tǒng)內(nèi)部,消息發(fā)送首先是把消息拷貝到目的任務的任務郵箱里,再釋放信號量引起任務的調(diào)度,使處于阻塞態(tài)的目的任務躍遷到運行態(tài)。可見,通訊守護任務每發(fā)送一次消息,都會引起一次任務的切換。消息流量越大,任務切換的次數(shù)就越多,由此帶來的系統(tǒng)開銷就會越大。
有些單板會同時與其它多個單板存在板間的通訊,根據(jù)需求的不同,就會同時存在多種的通訊物理鏈路,例如10/100M以太網(wǎng)、232/485串口、雙口RAM等,而采用的通訊協(xié)議也會不同,例如TCP/IP、HDLC、用戶自定義的協(xié)議等。在這種情況下,一個單板就會有多個通訊守護任務,每個守護任務對應一種通訊協(xié)議。在實際情況中,有些單板間的通訊流量會一直維持很高,有些會一直很低,還有些會上下波動,流量的變化量可能會很大。通訊守護任務按照前面所述的轉(zhuǎn)發(fā)消息的方式,對小流量的通訊方式,這種方式對系統(tǒng)性能不會有任何影響。但是,如前所述,大通訊流量會造成頻繁的任務切換,導致任務處理消息的能力大大降低。對于通訊流量上下波動的情況,通訊任務的這種處理方式也不夠靈活,造成不必要的CPU資源浪費。
發(fā)明內(nèi)容
本發(fā)明的目的是提出了一種實現(xiàn)嵌入式系統(tǒng)任務間自適應通訊的方法,具體是一種實現(xiàn)嵌入式系統(tǒng)和實時系統(tǒng)任務間消息發(fā)送的方法,用于提高任務間的消息發(fā)送效率,特別針對嵌入式系統(tǒng)中的通訊守護任務向其它任務發(fā)送消息的情況。
本發(fā)明是這樣實現(xiàn)的一種實現(xiàn)嵌入式系統(tǒng)任務間自適應通訊的方法,其特征在于還包括以下步驟定義消息緩沖隊列,為通訊守護任務以外的每個任務定義一個消息緩沖隊列;估算消息流量,估算出每種通訊方式的最大消息流量和平均消息流量的波動范圍,根據(jù)消息流量確定消息的發(fā)送方式,估算方式采用預設定時器,并在定時時間內(nèi)對收到的消息計數(shù),即可初步確定該通信方式的消息流量。
所述消息緩沖隊列為一個全局的消息結(jié)構(gòu)指針數(shù)組,該數(shù)組的每個元素都是一個地址,用于存放某一個任務對應的消息緩沖隊列頭指針;在消息結(jié)構(gòu)的定義中增加一個指向下一條消息結(jié)構(gòu)的指針域,該指針在源任務向目的任務發(fā)送消息時被初始化為NULL。
當通信守護任務收到一條板間消息時,若發(fā)現(xiàn)目的任務對應的隊列頭指針為空,則將該消息指針直接賦給目的任務對應的隊列頭指針,并置其下一條消息指針域為空,否則將其賦給隊列中最后一條消息的下一條消息指針域,同時置其下一條消息指針域為空。
所述估算消息流量為某種通訊方式的最大消息流量對本系統(tǒng)來說較小,并且平均消息流量不會隨時間有較大的波動,則通訊守護任務在收到底層驅(qū)動傳來的消息數(shù)據(jù)后,加上消息頭,把該消息插入消息緩沖隊列,并立刻調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),把消息發(fā)送到目的任務。
所述估算消息流量為某種通訊方式的最大消息流量對本系統(tǒng)而言較大,并且平均消息流量不會隨時間有較大的波動,則采用下述的步驟處理第一步.在通訊守護任務入口處申請一個定時器,用于定時地從通訊守護任務向其它任務發(fā)送消息,定時器時長由估算或經(jīng)驗獲得;第二步.通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號,把消息插入對應的消息緩沖隊列,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù);第三步.定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務;第四步.目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
所述估算消息流量為某種通訊方式的平均消息流量隨時間有較大的波動,則采用下述的步驟處理第一步.申請一個定時器,該定時器用于定時地從守護任務向其它任務發(fā)送消息,初始定時器時長可以設置為10毫秒;第二步.聲明一個全局的消息計數(shù)變量,用于記錄一個定時周期內(nèi)守護任務收到的消息數(shù);第三步.通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號把消息插入對應的消息緩沖隊列,并把消息計數(shù)變量遞增,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù);第四步.定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務;第五步.查看消息計數(shù)變量,并除以定時器時長轉(zhuǎn)換為單位時間的消息個數(shù),如果該值的變化不大,說明在這個定時周期內(nèi)消息流量變化不大,此時定時器的時長保持不變,如果單位時間的消息數(shù)有較大的變化,定時器時長就需要調(diào)整,調(diào)整的策略是若消息流量顯著增大,則將定時器時長增加50%,反之則減少50%,如此經(jīng)過幾次反復的收斂后所設定的定時器時長必然會符合該通信流量的要求;第六步.對消息變量計數(shù)值清零;第七步.目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
實現(xiàn)嵌入式系統(tǒng)任務間自適應通訊的方法,對應消息流量較小,包括下列步驟第一步創(chuàng)建通訊守護任務根據(jù)本系統(tǒng)與外界通訊方式的種類,為每種通訊方式創(chuàng)建一個通訊守護任務,并為每個守護任務創(chuàng)建一個任務郵箱;第二步定義消息緩沖隊列為通訊守護任務以外的每個任務定義一個消息緩沖隊列;
第三步估算消息流量當通訊方式的最大消息流量對本系統(tǒng)來說較小,并且平均消息流量不會隨時間有較大的波動,那么通訊守護任務在收到底層驅(qū)動傳來的消息數(shù)據(jù)后,加上消息頭,把該消息插入消息緩沖隊列,并立刻調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),把消息發(fā)送到目的任務。
所述實現(xiàn)嵌入式系統(tǒng)任務間自適應通訊的方法,對應消息流量較大,包括下列步驟第一步創(chuàng)建通訊守護任務根據(jù)本系統(tǒng)與外界通訊方式的種類,為每種通訊方式創(chuàng)建一個通訊守護任務,并為每個守護任務創(chuàng)建一個任務郵箱;第二步定義消息緩沖隊列為通訊守護任務以外的每個任務定義一個消息緩沖隊列;第三步估算消息流量當通訊方式的最大消息流量對本系統(tǒng)而言較大,并且平均消息流量不會隨時間有較大的波動,采用下述的步驟處理(1)在通訊守護任務入口處申請一個定時器,該定時器用于定時地從守護任務向其它任務發(fā)送消息,定時器時長由估算或經(jīng)驗獲得,(2)通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號,把消息插入對應的消息緩沖隊列,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),(3)定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務,(4)目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
所述實現(xiàn)嵌入式系統(tǒng)任務間自適應通訊的方法,對應消息流量波動,包括下列步驟第一步創(chuàng)建通訊守護任務根據(jù)本系統(tǒng)與外界通訊方式的種類,為每種通訊方式創(chuàng)建一個通訊守護任務,并為每個守護任務創(chuàng)建一個任務郵箱;第二步定義消息緩沖隊列為通訊守護任務以外的每個任務定義一個消息緩沖隊列,該隊列的實現(xiàn)可以參見圖2的詳細描述;第三步估算消息流量當通訊方式的平均消息流量隨時間有較大的波動,采用下述的步驟處理(1)申請一個定時器,該定時器用于定時地從守護任務向其它任務發(fā)送消息,初始定時器時長可以設置為10毫秒,(2)聲明一個全局的消息計數(shù)變量,用于記錄一個定時周期內(nèi)守護任務收到的消息數(shù),(3)通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號把消息插入對應的消息緩沖隊列,并把消息計數(shù)變量遞增,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),(4)定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務,(5)查看消息計數(shù)變量,并除以定時器時長轉(zhuǎn)換為單位時間的消息個數(shù),如果該值的變化不大,說明在這個定時周期內(nèi)消息流量變化不大,此時定時器的時長保持不變,如果單位時間的消息數(shù)有較大的變化,定時器時長就需要調(diào)整。調(diào)整的策略是若消息流量顯著增大,則將定時器時長增加50%,反之則減少50%,如此經(jīng)過幾次反復的收斂后所設定的定時器時長必然會符合該通信流量的要求,(6)對消息變量計數(shù)值清零,(7)目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
所述從消息緩沖隊列中取出消息后進行的處理在任務的入口函數(shù)中,進入一個無限循環(huán),阻塞在操作系統(tǒng)提供的消息接收函數(shù)上,當有消息到來時,任務躍遷到運行態(tài),從任務郵箱中取出消息,該消息數(shù)據(jù)為一個指針,指向本任務對應的消息緩沖隊列頭;任務從緩沖隊列中取出第一條消息,并調(diào)整隊列頭指針,使之指向隊列的下一條消息;隨即任務轉(zhuǎn)入消息處理例程,處理結(jié)束后,又從緩沖隊列中取出下一條消息進行處理,如此循環(huán)直至緩沖隊列中沒有消息;任務又進入下一次循環(huán)。
本發(fā)明可根據(jù)消息流量,自適應調(diào)整通訊守護任務發(fā)送消息的頻率,減少因消息發(fā)送、接收、任務切換所帶來的開銷。采用本發(fā)明所述的方法,可以減少通訊中任務切換的次數(shù),大大提高通訊的效率和系統(tǒng)的整體性能。所述方法具有適用范圍廣、可靠性高、實時性強的特點。
圖1是通常采用的通訊守護任務流程;圖2是消息緩沖隊列結(jié)構(gòu);圖3是通訊守護任務在小通訊流量情況下的消息發(fā)送流程;圖4是通訊守護任務在大通訊流量情況下的消息發(fā)送流程;圖5是通訊守護任務在通訊流量波動情況下的消息發(fā)送流程;圖6是目的任務接收消息流程。
具體實施例方式
下面結(jié)合附圖對技術(shù)方案的實施作進一步的詳細描述圖1介紹了通常采用的通訊守護任務流程。在通訊守護任務的入口函數(shù)中,任務進入一個無限循環(huán),調(diào)用操作系統(tǒng)提供的消息接收函數(shù),等待從底層驅(qū)動傳來的板間消息,此時通訊守護任務處于阻塞態(tài)。一旦有消息到來,通訊守護任務躍遷到運行態(tài),從任務郵箱中取出收到的消息,根據(jù)該消息的目的任務,調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),把消息轉(zhuǎn)發(fā)到目的任務。然后通訊守護任務進入下一次循環(huán)。
圖2介紹了消息緩沖隊列的實現(xiàn)方法。在消息結(jié)構(gòu)的定義中增加一個指向下一條消息結(jié)構(gòu)的指針域,該指針在源任務向目的任務發(fā)送消息時被初始化為NULL。
申請一個全局的消息結(jié)構(gòu)指針數(shù)組,該數(shù)組的每個元素都是一個地址,存放某一個任務對應的消息緩沖隊列頭指針。
當通信守護任務收到一條板間消息時,若發(fā)現(xiàn)目的任務對應的隊列頭指針為空,則將該消息指針直接賦給目的任務對應的隊列頭指針,并置其下一條消息指針域為空,否則將其賦給隊列中最后一條消息的下一條消息指針域,同時置其下一條消息指針域為空。如此就形成了圖2所示的消息緩沖隊列。在此過程中完全無內(nèi)存的拷貝過程,因此對系統(tǒng)的性能無任何影響。
圖3介紹了通訊守護任務在小通訊流量情況下的消息發(fā)送流程。在通訊守護任務的入口函數(shù)中,任務進入一個無限循環(huán),調(diào)用操作系統(tǒng)提供的消息接收函數(shù),等待從底層驅(qū)動傳來的板間消息,此時通訊守護任務處于阻塞態(tài)一旦有消息到來,通訊守護任務躍遷到運行態(tài),從任務郵箱中取出收到的消息,根據(jù)該消息的目的任務,把消息插入到對應的緩沖隊列尾,調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),把消息發(fā)送到目的任務。然后通訊守護任務進入下一次循環(huán)。
圖4介紹了通訊守護任務在大通訊流量情況下的消息發(fā)送流程。在通訊守護任務的入口函數(shù)中,首先申請一個定時器,該定時器用于定時地從通訊守護任務向其它任務發(fā)送消息,定時器時長由估算或經(jīng)驗獲得。隨即任務進入無限循環(huán)中,調(diào)用操作系統(tǒng)提供的消息接收函數(shù),等待從底層驅(qū)動傳來的板間消息,此時通訊守護任務處于阻塞態(tài),一旦有消息到來,通訊守護任務躍遷到運行態(tài),從任務郵箱中取出收到的消息,根據(jù)該消息的目的任務,把消息插入到對應的緩沖隊列尾,然后通訊守護任務進入下一次循環(huán)。
定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務。
申請一個新的定時器,定時器時長保持不變。
圖5介紹了通訊守護任務在通訊流量波動情況下的消息發(fā)送流程。首先申請一個全局的消息計數(shù)變量,用于記錄一個定時周期內(nèi)通訊守護任務收到的消息數(shù)。
在通訊守護任務的入口函數(shù)中,全局消息計數(shù)變量置零,申請一個定時器,該定時器用于定時地從通訊守護任務向其它任務發(fā)送消息,定時器初始時長由估算或經(jīng)驗獲得。
任務進入一個無限循環(huán),調(diào)用操作系統(tǒng)提供的消息接收函數(shù),等待從底層驅(qū)動傳來的板間消息,此時通訊守護任務處于阻塞態(tài)。一旦有消息到來,通訊守護任務躍遷到運行態(tài),從任務郵箱中取出收到的消息,根據(jù)該消息的目的任務,把消息插入到對應的緩沖隊列尾,并且把消息變量計數(shù)變量遞增,然后通訊守護任務進入下一次循環(huán)。
定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務。
查看消息計數(shù)變量,如果該變量的值變化不大,說明在這個定時周期內(nèi)消息流量變化不大,此時定時器的時長保持不變。如果消息計數(shù)變量的值有較大的變化,定時器時長就需要調(diào)整。定時器時長的調(diào)整策略由用戶決定。
申請一個新的定時器,定時器時長為調(diào)整以后的值。
消息變量計數(shù)變量清零。
圖6介紹了目的任務接收消息的流程。在任務的入口函數(shù)中,進入一個無限循環(huán),阻塞在操作系統(tǒng)提供的消息接收函數(shù)上,當有消息到來時,任務躍遷到運行態(tài),從任務郵箱中取出消息,該消息數(shù)據(jù)為一個指針,指向本任務對應的消息緩沖隊列頭。任務從緩沖隊列中取出第一條消息,并調(diào)整隊列頭指針,使之指向隊列的下一條消息。隨即任務轉(zhuǎn)入消息處理例程,處理結(jié)束后,又從緩沖隊列中取出下一條消息進行處理,如此循環(huán)直至緩沖隊列中沒有消息。任務又進入下一次循環(huán)。
權(quán)利要求
1.一種實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,其特征在于還包括以下步驟定義消息緩沖隊列,為通訊守護任務以外的每個任務定義一個消息緩沖隊列;估算消息流量,估算出每種通訊方式的最大消息流量和平均消息流量的波動范圍,根據(jù)消息流量確定消息的發(fā)送方式,估算方式采用預設定時器,并在定時時間內(nèi)對收到的消息計數(shù),即可初步確定該通信方式的消息流量。
2.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,其特征在于所述消息緩沖隊列為一個全局的消息結(jié)構(gòu)指針數(shù)組,該數(shù)組的每個元素都是一個地址,用于存放某一個任務對應的消息緩沖隊列頭指針;在消息結(jié)構(gòu)的定義中增加一個指向下一條消息結(jié)構(gòu)的指針域,該指針在源任務向目的任務發(fā)送消息時被初始化為NULL。
3.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,其特征在于當通信守護任務收到一條板間消息時,若發(fā)現(xiàn)目的任務對應的隊列頭指針為空,則將該消息指針直接賦給目的任務對應的隊列頭指針,并置其下一條消息指針域為空,否則將其賦給隊列中最后一條消息的下一條消息指針域,同時置其下一條消息指針域為空。
4.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,其特征在于所述估算消息流量為某種通訊方式的最大消息流量對本系統(tǒng)來說較小,并且平均消息流量不會隨時間有較大的波動,則通訊守護任務在收到底層驅(qū)動傳來的消息數(shù)據(jù)后,加上消息頭,把該消息插入消息緩沖隊列,并立刻調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),把消息發(fā)送到目的任務。
5.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,其特征在于所述估算消息流量為某種通訊方式的最大消息流量對本系統(tǒng)而言較大,并且平均消息流量不會隨時間有較大的波動,則采用下述的步驟處理第一步.在通訊守護任務入口處申請一個定時器,用于定時地從通訊守護任務向其它任務發(fā)送消息,定時器時長由估算或經(jīng)驗獲得;第二步.通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號,把消息插入對應的消息緩沖隊列,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù);第三步.定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務;第四步.目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
6.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,其特征在于所述估算消息流量為某種通訊方式的平均消息流量隨時間有較大的波動,則采用下述的步驟處理第一步.申請一個定時器,該定時器用于定時地從守護任務向其它任務發(fā)送消息,初始定時器時長可以設置為10毫秒;第二步.聲明一個全局的消息計數(shù)變量,用于記錄一個定時周期內(nèi)守護任務收到的消息數(shù);第三步.通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號把消息插入對應的消息緩沖隊列,并把消息計數(shù)變量遞增,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù);第四步.定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務;第五步.查看消息計數(shù)變量,并除以定時器時長轉(zhuǎn)換為單位時間的消息個數(shù),如果該值的變化不大,說明在這個定時周期內(nèi)消息流量變化不大,此時定時器的時長保持不變,如果單位時間的消息數(shù)有較大的變化,定時器時長就需要調(diào)整,調(diào)整的策略是若消息流量顯著增大,則將定時器時長增加50%,反之則減少50%,如此經(jīng)過幾次反復的收斂后所設定的定時器時長必然會符合該通信流量的要求;第六步.對消息變量計數(shù)值清零;第七步.目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
7.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,包括下列步驟第一步創(chuàng)建通訊守護任務根據(jù)本系統(tǒng)與外界通訊方式的種類,為每種通訊方式創(chuàng)建一個通訊守護任務,并為每個守護任務創(chuàng)建一個任務郵箱;第二步定義消息緩沖隊列為通訊守護任務以外的每個任務定義一個消息緩沖隊列;第三步估算消息流量當通訊方式的最大消息流量對本系統(tǒng)來說較小,并且平均消息流量不會隨時間有較大的波動,那么通訊守護任務在收到底層驅(qū)動傳來的消息數(shù)據(jù)后,加上消息頭,把該消息插入消息緩沖隊列,并立刻調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),把消息發(fā)送到目的任務。
8.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,包括下列步驟第一步創(chuàng)建通訊守護任務根據(jù)本系統(tǒng)與外界通訊方式的種類,為每種通訊方式創(chuàng)建一個通訊守護任務,并為每個守護任務創(chuàng)建一個任務郵箱;第二步定義消息緩沖隊列為通訊守護任務以外的每個任務定義一個消息緩沖隊列;第三步估算消息流量當通訊方式的最大消息流量對本系統(tǒng)而言較大,并且平均消息流量不會隨時間有較大的波動,采用下述的步驟處理(1)在通訊守護任務入口處申請一個定時器,該定時器用于定時地從守護任務向其它任務發(fā)送消息,定時器時長由估算或經(jīng)驗獲得,(2)通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號,把消息插入對應的消息緩沖隊列,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),(3)定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務,(4)目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
9.如權(quán)利要求1所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,包括下列步驟第一步創(chuàng)建通訊守護任務根據(jù)本系統(tǒng)與外界通訊方式的種類,為每種通訊方式創(chuàng)建一個通訊守護任務,并為每個守護任務創(chuàng)建一個任務郵箱;第二步定義消息緩沖隊列為通訊守護任務以外的每個任務定義一個消息緩沖隊列;第三步估算消息流量當通訊方式的平均消息流量隨時間有較大的波動,采用下述的步驟處理(1)申請一個定時器,該定時器用于定時地從守護任務向其它任務發(fā)送消息,初始定時器時長可以設置為10毫秒,(2)聲明一個全局的消息計數(shù)變量,用于記錄一個定時周期內(nèi)守護任務收到的消息數(shù),(3)通訊守護任務收到底層驅(qū)動傳來的消息數(shù)據(jù)后,根據(jù)該消息的目的任務號把消息插入對應的消息緩沖隊列,并把消息計數(shù)變量遞增,此時并不調(diào)用操作系統(tǒng)提供的消息發(fā)送函數(shù),(4)定時器到時后,遍歷每個消息緩沖隊列,如果隊列中有消息,則把該隊列的頭指針發(fā)送到目的任務,(5)查看消息計數(shù)變量,并除以定時器時長轉(zhuǎn)換為單位時間的消息個數(shù),如果該值的變化不大,說明在這個定時周期內(nèi)消息流量變化不大,此時定時器的時長保持不變,如果單位時間的消息數(shù)有較大的變化,定時器時長就需要調(diào)整。調(diào)整的策略是若消息流量顯著增大,則將定時器時長增加50%,反之則減少50%,如此經(jīng)過幾次反復的收斂后所設定的定時器時長必然會符合該通信流量的要求,(6)對消息變量計數(shù)值清零,(7)目的任務收到該消息后,依次從消息緩沖隊列中取出消息,進行處理。
10.如權(quán)利要求7至9中任意一項所述實現(xiàn)嵌入式系統(tǒng)中任務間自適應通訊的方法,其特征在于所述從消息緩沖隊列中取出消息后進行的處理在任務的入口函數(shù)中,進入一個無限循環(huán),阻塞在操作系統(tǒng)提供的消息接收函數(shù)上,當有消息到來時,任務躍遷到運行態(tài),從任務郵箱中取出消息,該消息數(shù)據(jù)為一個指針,指向本任務對應的消息緩沖隊列頭;任務從緩沖隊列中取出第一條消息,并調(diào)整隊列頭指針,使之指向隊列的下一條消息;隨即任務轉(zhuǎn)入消息處理例程,處理結(jié)束后,又從緩沖隊列中取出下一條消息進行處理,如此循環(huán)直至緩沖隊列中沒有消息;任務又進入下一次循環(huán)。
全文摘要
本發(fā)明屬于對計算機操作系統(tǒng)性能所作的改進,具體涉及一種實現(xiàn)嵌入式系統(tǒng)任務間自適應通訊的方法,尤其涉及一種實現(xiàn)嵌入式系統(tǒng)由通訊守護任務向其它任務發(fā)送消息的方法。本發(fā)明所述方法包括為通訊守護任務以外的每個任務定義一個消息緩沖隊列;估算出每種通訊方式的最大消息流量和平均消息流量的波動范圍,根據(jù)消息流量確定消息的發(fā)送方式。本發(fā)明可根據(jù)消息流量,自適應調(diào)整通訊守護任務發(fā)送消息的頻率,減少因消息發(fā)送、接收、任務切換所帶來的開銷。采用本發(fā)明所述的方法,可以減少通訊中任務切換的次數(shù),大大提高通訊的效率和系統(tǒng)的整體性能。所述方法具有適用范圍廣、可靠性高、實時性強的特點。
文檔編號H04L29/02GK1571376SQ03139900
公開日2005年1月26日 申請日期2003年7月16日 優(yōu)先權(quán)日2003年7月16日
發(fā)明者張華強, 楊新, 蔣鯤鵬, 危才華, 繆敬, 王陳, 蘆東昕 申請人:深圳市中興通訊股份有限公司