一種任務(wù)間隊列通信方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實施例涉及數(shù)據(jù)通信的技術(shù)領(lǐng)域,尤其涉及一種任務(wù)間隊列通信方法及裝置。
【背景技術(shù)】
[0002]基于操作系統(tǒng)的應(yīng)用軟件開發(fā),由于操作系統(tǒng)的調(diào)度,都會面臨任務(wù)間數(shù)據(jù)通信和同步的問題。Windows環(huán)境下比較成熟的任務(wù)間通信技術(shù)就是使用臨界區(qū)、互斥量、信號量、消息隊列等現(xiàn)有的任務(wù)間通信與同步的技術(shù)。以現(xiàn)有技術(shù)的消息隊列為例,一般具備如下模塊:
[0003]消息實體緩沖模塊,用于存儲若干條目的消息內(nèi)容;
[0004]消息隊列信號量模塊,用于計量隊列緩沖區(qū)所包含的消息數(shù)目;
[0005]消息隊列互斥量模塊,用于保證隊列同一時刻只能被同一任務(wù)(線程)訪問修改的互斥機(jī)制。
[0006]現(xiàn)有消息隊列的技術(shù)一般提供以下操作步驟:
[0007]步驟一:線程向消息隊列插入消息,先等待互斥量模塊的所有權(quán),獲得隊列訪問權(quán)限后,把待插入的消息內(nèi)容放置到隊列尾部,然后把信號量模塊的計數(shù)加一,最后釋放互斥量模塊的所有權(quán),至此一次插入消息的操作即完成;
[0008]步驟二:提取消息,先等待消息隊列信號量模塊有信號,等待成功后信號計數(shù)減一,然后等待互斥量模塊的所有權(quán),獲得訪問權(quán)限后,把隊列首部的消息移除,然后釋放互斥量模塊的所有權(quán),至此一次提取消息的操作即完成。
[0009]但是,因為目前的互斥量、信號量技術(shù)是在Windows環(huán)境下開發(fā)的,僅使用于大型軟件,并不適用在嵌入式軟件中開發(fā)的線程通信機(jī)制,因此,如何在簡單的小型嵌入式系統(tǒng)中改善微處理器軟件開發(fā)中經(jīng)常遇到的任務(wù)間數(shù)據(jù)通信與同步的問題,使得能夠靈活、簡單而又有效的實現(xiàn)任務(wù)間通信與同步的功能是有待解決的問題。
【發(fā)明內(nèi)容】
[0010]本發(fā)明實施例的目的在于提出一種任務(wù)間隊列通信方法及裝置,能夠解決如何提供一種適用于小型MCU軟件開發(fā)的任務(wù)之間數(shù)據(jù)通信方法的問題。
[0011]為達(dá)此目的,本發(fā)明實施例采用以下技術(shù)方案:
[0012]第一方面,任務(wù)間隊列通信方法,所述方法包括:
[0013]分配連續(xù)的內(nèi)存作為任務(wù)間通信報文的報文隊列緩沖區(qū);
[0014]為報文隊列中的每個報文添加一用于標(biāo)記所述報文有效性的報文標(biāo)記;
[0015]根據(jù)所述報文隊列中報文的有效性控制報文插入操作以及報文讀取操作。
[0016]優(yōu)選地,根據(jù)所述報文隊列中報文的有效性控制報文插入操作以及報文讀取操作的步驟,包括:
[0017]采用循環(huán)迭代方式在所述報文隊列緩沖區(qū)插入或提取所述報文。
[0018]優(yōu)選地,所述采用循環(huán)迭代方式在所述報文隊列緩沖區(qū)插入或提取所述報文的步驟包括:
[0019]向所述報文隊列緩沖區(qū)插入或提取報文時,將用于指示報文插入位置的插入迭代指針或用于指示報文提取位置的提取迭代指針向后移位,當(dāng)指針已移動至所述報文隊列緩沖區(qū)的隊末時則將所述指針移動至報文隊列緩沖區(qū)的隊首。
[0020]優(yōu)選地,所述向所述報文隊列緩沖區(qū)插入或提取報文時,將用于指示報文插入位置的插入迭代指針或用于指示報文提取位置的提取迭代指針向后移位的步驟,包括:
[0021]根據(jù)所述報文插入迭代指針?biāo)甘疚恢玫膱笪膶?yīng)的報文標(biāo)記來判斷所述報文有效性;
[0022]若所述報文無效,則將待插入的報文實體拷貝至該位置,并且標(biāo)記這條報文為有效,然后將所述報文插入迭代指針移動至下一位置;
[0023]若所述報文有效則報文隊列緩沖區(qū)無法再次插入報文。
[0024]優(yōu)選地,所述向所述報文隊列緩沖區(qū)插入或提取報文時,將用于指示報文插入位置的插入迭代指針或用于指示報文提取位置的提取迭代指針向后移位的步驟,包括:
[0025]根據(jù)所述報文提取迭代指針?biāo)甘疚恢玫膱笪膶?yīng)的報文標(biāo)記來判斷所述報文有效性;
[0026]若所述報文有效則讀取所述報文,并標(biāo)記所述報文為無效,再將所述報文提取迭代指針移動至下一位置;
[0027]若所述報文無效,則說明報文隊列緩沖區(qū)無有效報文。
[0028]第二方面,一種任務(wù)間隊列通信裝置,所述裝置包括:
[0029]分配模塊,用于分配連續(xù)的內(nèi)存作為任務(wù)間通信報文的報文隊列緩沖區(qū);
[0030]添加模塊,用于為報文隊列中的每個報文添加一用于標(biāo)記所述報文有效性的報文標(biāo)記;
[0031]控制模塊,用于根據(jù)所述報文隊列中報文的有效性控制報文插入操作以及報文讀取操作。
[0032]優(yōu)選地,所述控制模塊,包括:
[0033]迭代模塊,用于采用循環(huán)迭代方式在所述報文隊列緩沖區(qū)插入或提取所述報文。
[0034]優(yōu)選地,所述迭代模塊,包括:
[0035]移位單元,用于向所述報文隊列緩沖區(qū)插入或提取報文時,將用于指示報文插入位置的插入迭代指針或用于指示報文提取位置的提取迭代指針向后移位;
[0036]移動單元,用于當(dāng)指針已移動至所述報文隊列緩沖區(qū)的隊末時則將所述指針移動至報文隊列緩沖區(qū)的隊首。
[0037]優(yōu)選地,所述移位單元,用于:
[0038]根據(jù)所述報文插入迭代指針?biāo)甘疚恢玫膱笪膶?yīng)的報文標(biāo)記來判斷所述報文有效性;
[0039]若所述報文無效,則將待插入的報文實體拷貝至該位置,并且標(biāo)記這條報文為有效,然后將所述報文插入迭代指針移動至下一位置;
[0040]若所述報文有效則報文隊列緩沖區(qū)無法再次插入報文。
[0041]優(yōu)選地,所述移位單元,用于:
[0042]根據(jù)所述報文提取迭代指針?biāo)甘疚恢玫膱笪膶?yīng)的報文標(biāo)記來判斷所述報文有效性;
[0043]若所述報文有效則讀取所述報文,并標(biāo)記所述報文為無效,再將所述報文提取迭代指針移動至下一位置;
[0044]若所述報文無效,則說明報文隊列緩沖區(qū)無有效報文。
[0045]本發(fā)明實施例通過分配連續(xù)的內(nèi)存作為任務(wù)間通信報文的報文隊列緩沖區(qū);為報文隊列中的每個報文添加一用于標(biāo)記所述報文有效性的報文標(biāo)記;根據(jù)所述報文隊列中報文的有效性控制報文插入操作以及報文讀取操作,從而沒有使用大型操作系統(tǒng)的內(nèi)核對象,只是給隊列每個元素添加了一個成員:報文有效標(biāo)記,以此來互斥隊列的插入和移除操作,同樣能實現(xiàn)任務(wù)間的通信及同步;而且這種方法在小型的MCU軟件開發(fā)中易于實現(xiàn),代碼規(guī)模小,以此簡化了許多嵌入式軟件面臨的任務(wù)間數(shù)據(jù)同步操作。
【附圖說明】
[0046]圖1是本發(fā)明實施例任務(wù)間隊列通信的方法第一實施例的方法流程圖;
[0047]圖2是本發(fā)明實施例任務(wù)間隊列通信的方法第二實施例的方法流程圖;
[0048]圖3是本發(fā)明實施例任務(wù)間隊列通信的裝置的功能模塊示意圖;
[0049]圖4是本發(fā)明實施例控制模塊303的功能模塊示意圖;
[0050]圖5是本發(fā)明實施例迭代模塊401的功能模塊示意圖;
[0051]圖6是本發(fā)明實施例任務(wù)間隊列通信的裝置的功能模塊示意圖。
【具體實施方式】
[0052]下面結(jié)合附圖和實施例對本發(fā)明實施例作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖?,此處所描述的具體實施例僅僅用于解釋本發(fā)明實施例,而非對本發(fā)明實施例的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明實施例相關(guān)的部分而非全部結(jié)構(gòu)。
[0053]實施例一
[0054]參考圖1,圖1是本發(fā)明實施例任務(wù)間隊列通信的方法第一實施例的方法流程圖。
[0055]在實施例一中,所述任務(wù)間隊列通信的方法包括:
[0056]步驟101,分配連續(xù)的內(nèi)存作為任務(wù)間通信報文的報文隊列緩沖區(qū);
[0057]具體的,緩沖區(qū)域可以為[0,N-1]的一維數(shù)組,該一維數(shù)組上存儲的內(nèi)容包括位置信息以及位置標(biāo)識,該位置標(biāo)識有以下三種情況:
[0058]第一種情況,僅存儲位置的序號,例如,數(shù)組的序號位置為0,1,2,…