本發(fā)明涉及串口通信技術(shù)領(lǐng)域,具體而言,涉及一種多串口通信方法及裝置。
背景技術(shù):
串口通信是單片機(jī)、數(shù)字信號(hào)處理器等嵌入式系統(tǒng)之間,以及嵌入式系統(tǒng)與個(gè)人電腦或無線模塊之間一種普遍使用的點(diǎn)到點(diǎn)的通信方法。工控機(jī)、嵌入式電腦和pac通常連接多個(gè)rs232、rs485/422、can等串口通信設(shè)備,現(xiàn)有技術(shù)采用一個(gè)或兩個(gè)線程(或進(jìn)程)管理一個(gè)串口,多個(gè)串口需要由多個(gè)線程(或進(jìn)程)進(jìn)行管理。
每個(gè)線程(或進(jìn)程)都需要占用一些操作系統(tǒng)的資源,在不同線程(或進(jìn)程)之間進(jìn)行切換也要消耗cpu的運(yùn)行時(shí)間。在多個(gè)線程(或進(jìn)程)中接收到的數(shù)據(jù)不能保持原來的順序,對(duì)控制系統(tǒng)的性能會(huì)有不良影響。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種多串口通信方法及裝置,以解決上述問題。
本發(fā)明較佳實(shí)施例提供一種多串口通信方法,應(yīng)用于能夠與多個(gè)從設(shè)備通信連接的主控設(shè)備,所述主控設(shè)備包括多個(gè)串口,所述主控設(shè)備通過各所述串口分別與各所述從設(shè)備通信連接,所述方法包括:
進(jìn)入通信線程,初始化各所述串口的工作狀態(tài)變量及各所述串口的時(shí)間記錄;
檢測(cè)各所述串口的通信狀態(tài),查找出未實(shí)現(xiàn)通信收發(fā)的串口;
調(diào)用串口掃描函數(shù),根據(jù)未實(shí)現(xiàn)通信收發(fā)的串口的當(dāng)前通信指令及數(shù)據(jù)收發(fā)狀態(tài)信息修改該串口的工作狀態(tài)變量,使用查詢方式實(shí)現(xiàn)該串口的通信收發(fā);
調(diào)用指定函數(shù)交出該通信線程的當(dāng)前時(shí)間片;
檢測(cè)是否完成所有串口通信,若是,則發(fā)出通信已完成事件。
進(jìn)一步地,所述發(fā)出通信已完成事件的步驟之后,所述方法還包括:
判斷是否到達(dá)預(yù)先分配給所述通信線程的指定運(yùn)行時(shí)間,若未到達(dá),則調(diào)用指定函數(shù)交出該通信線程的剩余時(shí)間片,以將該剩余時(shí)間片進(jìn)行再分配。
進(jìn)一步地,所述調(diào)用串口掃描函數(shù),根據(jù)未實(shí)現(xiàn)通信收發(fā)的串口的當(dāng)前通信指令及數(shù)據(jù)收發(fā)狀態(tài)信息修改該串口的工作狀態(tài)變量,使用查詢方式實(shí)現(xiàn)該串口的通信收發(fā)的步驟,包括:
檢測(cè)系統(tǒng)總線是否處于空閑狀態(tài),若處于空閑狀態(tài),則初始化發(fā)送參數(shù),將系統(tǒng)總線設(shè)置為發(fā)送狀態(tài),發(fā)送通信指令;
判斷通信指令是否發(fā)送完成,若發(fā)送完成,則初始化接收參數(shù),將系統(tǒng)總線設(shè)置為等待接收狀態(tài);
判斷是否接收到數(shù)據(jù),若接收到數(shù)據(jù),則將系統(tǒng)總線設(shè)置為接收狀態(tài);
判斷是否接收完一幀數(shù)據(jù),若接收完一幀數(shù)據(jù),則對(duì)接收到的數(shù)據(jù)進(jìn)行處理,并將系統(tǒng)總線設(shè)置為空閑狀態(tài)。
進(jìn)一步地,所述判斷通信指令是否發(fā)送完成的步驟之后,所述方法還包括:
判斷通信指令發(fā)送是否超過預(yù)設(shè)時(shí)長(zhǎng),若超過預(yù)設(shè)時(shí)長(zhǎng),則為系統(tǒng)總線設(shè)置超時(shí)故障標(biāo)志。
進(jìn)一步地,所述判斷是否接收到數(shù)據(jù)的步驟之后,所述方法還包括:
判斷等待接收狀態(tài)是否超過預(yù)設(shè)時(shí)長(zhǎng),若超過預(yù)設(shè)時(shí)長(zhǎng),則為系統(tǒng)總線設(shè)置超時(shí)故障標(biāo)志。
進(jìn)一步地,所述檢測(cè)是否完成所有串口通信,若是,則發(fā)出通信已完成事件的步驟,包括:
檢測(cè)所有串口是否已實(shí)現(xiàn)通信指令發(fā)送及數(shù)據(jù)接收和處理過程,若已完成,則清除通信指令計(jì)數(shù)器,并為系統(tǒng)總線設(shè)置通信完成標(biāo)志。
本發(fā)明另一較佳實(shí)施例提供一種多串口通信裝置,應(yīng)用于能夠與多個(gè)從設(shè)備通信連接的主控設(shè)備,所述主控設(shè)備包括多個(gè)串口,所述主控設(shè)備通過各所述串口分別與各所述從設(shè)備通信連接,所述多串口通信裝置包括:
初始化模塊,用于進(jìn)入通信線程,初始化各所述串口的工作狀態(tài)變量及各所述串口的時(shí)間記錄;
查找模塊,用于檢測(cè)各所述串口的通信狀態(tài),查找出未實(shí)現(xiàn)通信收發(fā)的串口;
修改模塊,用于調(diào)用串口掃描函數(shù),根據(jù)未實(shí)現(xiàn)通信收發(fā)的串口的當(dāng)前通信指令及數(shù)據(jù)收發(fā)狀態(tài)信息修改該串口的工作狀態(tài)變量,使用查詢方式實(shí)現(xiàn)該串口的通信收發(fā);
第一調(diào)用模塊,用于調(diào)用指定函數(shù)交出該通信線程的當(dāng)前時(shí)間片;
檢測(cè)模塊,用于檢測(cè)是否完成所有串口通信,若是,則發(fā)出通信已完成事件。
進(jìn)一步地,所述多串口通信裝置還包括判斷模塊及第二調(diào)用模塊;
所述判斷模塊用于判斷是否到達(dá)預(yù)先分配給所述通信線程的指定運(yùn)行時(shí)間;
所述第二調(diào)用模塊用于在所述判斷模塊判斷結(jié)果為否時(shí),調(diào)用指定函數(shù)交出該通信線程的剩余時(shí)間片,以將該剩余時(shí)間片進(jìn)行再分配。
進(jìn)一步地,所述修改模塊包括檢測(cè)單元、發(fā)送參數(shù)初始化單元、第一判斷單元、接收參數(shù)初始化單元、第二判斷單元、設(shè)置單元、第三判斷單元以及處理單元;
所述檢測(cè)單元用于檢測(cè)系統(tǒng)總線是否處于空閑狀態(tài);
所述發(fā)送參數(shù)初始化單元用于在系統(tǒng)總線處于空閑狀態(tài)時(shí),初始化發(fā)送參數(shù),將系統(tǒng)總線設(shè)置為發(fā)送狀態(tài),發(fā)送通信指令;
所述第一判斷單元用于判斷通信指令是否發(fā)送完成;
所述接收參數(shù)初始化單元用于在通信指令發(fā)送完成時(shí),初始化接收參數(shù),將系統(tǒng)總線設(shè)置為等待接收狀態(tài);
所述第二判斷單元用于判斷是否接收到數(shù)據(jù);
所述設(shè)置單元用于在接收到數(shù)據(jù)時(shí),將系統(tǒng)總線設(shè)置為接收狀態(tài);
所述第三判斷單元用于判斷是否接收完一幀數(shù)據(jù);
所述處理單元用于在接收完一幀數(shù)據(jù)時(shí),對(duì)接收到的數(shù)據(jù)進(jìn)行處理,并將系統(tǒng)總線設(shè)置為空閑狀態(tài)。
進(jìn)一步地,所述修改模塊還包括第四判斷單元及故障標(biāo)志設(shè)置單元;
所述第四判斷單元用于判斷通信指令發(fā)送是否超過預(yù)設(shè)時(shí)長(zhǎng);
所述故障標(biāo)志設(shè)置單元用于在超過預(yù)設(shè)時(shí)長(zhǎng)時(shí),為系統(tǒng)總線設(shè)置超時(shí)故障標(biāo)志。
本發(fā)明實(shí)施例提供的多串口通信方法及裝置,通過函數(shù)調(diào)用及循環(huán)查詢方式來實(shí)現(xiàn)多串口的通信收發(fā),減少了系統(tǒng)資源的占用并減少了cpu的運(yùn)行時(shí)間。并且,在完成掃描實(shí)現(xiàn)串口通信收發(fā)后即發(fā)出通信已完成事件,有利于其它線程統(tǒng)一處理通信數(shù)據(jù)。本發(fā)明提供的多串口通信方案,能夠在單線程中實(shí)現(xiàn)多串口的通信收發(fā),減少了cpu消耗并提高了系統(tǒng)性能。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說明如下。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對(duì)范圍的限定,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1為本發(fā)明較佳實(shí)施例提供的一種多串口通信方法的應(yīng)用場(chǎng)景示意圖。
圖2為本發(fā)明較佳實(shí)施例提供的主控設(shè)備的示意性結(jié)構(gòu)框圖。
圖3為本發(fā)明較佳實(shí)施例提供的多串口通信方法的流程圖。
圖4為圖3中步驟s105的子步驟的流程圖。
圖5為本發(fā)明較佳實(shí)施例提供的多串口通信裝置的功能模塊框圖。
圖6為本發(fā)明較佳實(shí)施例提供的修改模塊的功能模塊框圖。
圖7為本發(fā)明較佳實(shí)施例提供的修改模塊的另一功能模塊框圖。
圖標(biāo):100-主控設(shè)備;110-多串口通信裝置;111-初始化模塊;112-查找模塊;113-修改模塊;1131-檢測(cè)單元;1132-發(fā)送參數(shù)初始化單元;1133-第一判斷單元;1134-接收參數(shù)初始化單元;1135-第二判斷單元;1136-設(shè)置單元;1137-第三判斷單元;1138-處理單元;1139-第四判斷單元;11310-故障標(biāo)志設(shè)置單元;114-第一調(diào)用模塊;115-檢測(cè)模塊;116-判斷模塊;117-第二調(diào)用模塊;120-處理器;130-存儲(chǔ)器;200-從設(shè)備。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和示出的本發(fā)明實(shí)施例的組件可以以各種不同的配置來布置和設(shè)計(jì)。因此,以下對(duì)在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例?;诒景l(fā)明的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋。同時(shí),在本發(fā)明的描述中,除非另有明確的規(guī)定和限定,術(shù)語“安裝”、“設(shè)置”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機(jī)械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連,可以是兩個(gè)元件內(nèi)部的連通。對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以具體情況理解上述術(shù)語在本發(fā)明中的具體含義。
請(qǐng)參閱圖1,為本發(fā)明實(shí)施例提供的多串口通信方法的應(yīng)用場(chǎng)景示意圖。該場(chǎng)景中包括主控設(shè)備100和從設(shè)備200。所述主控設(shè)備100通過網(wǎng)絡(luò)與所述從設(shè)備200通信連接,以進(jìn)行數(shù)據(jù)通信或交互。在本實(shí)施例中,所述從設(shè)備200可以包括多個(gè),多個(gè)所述從設(shè)備200與所述主控設(shè)備100通信連接。其中,所述主控設(shè)備100包括多個(gè)串口,所述主控設(shè)備100通過各串口分別與各從設(shè)備200通信連接。所述主控設(shè)備100可以是但不限于工控機(jī)、嵌入式電腦及pac等。
請(qǐng)參閱圖2,為本發(fā)明實(shí)施例提供的主控設(shè)備100的示意性結(jié)構(gòu)框圖。在本實(shí)施例中,所述主控設(shè)備100包括多串口通信裝置110、處理器120及存儲(chǔ)器130。其中,所述存儲(chǔ)器130與所述處理器120之間直接或間接的電性連接,以實(shí)現(xiàn)數(shù)據(jù)的傳輸或交互。所述多串口通信裝置110包括至少一個(gè)可以軟件或固件的形式存儲(chǔ)于所述存儲(chǔ)器130中或固化在所述主控設(shè)備100的操作系統(tǒng)中的軟件功能模塊。所述處理器120用于執(zhí)行所述存儲(chǔ)器130中存儲(chǔ)的可執(zhí)行模塊,例如所述多串口通信裝置110包括的軟件功能模塊或計(jì)算機(jī)程序。
請(qǐng)參閱圖3,是本發(fā)明實(shí)施例提供的一種應(yīng)用于上述主控設(shè)備100的多串口通信方法的流程圖。所應(yīng)說明的是,本發(fā)明提供的方法不以圖3及以下所述的具體順序?yàn)橄拗?。下面將?duì)圖3中示出的各步驟進(jìn)行詳細(xì)說明。
步驟s101,進(jìn)入通信線程,初始化各所述串口的工作狀態(tài)變量及各所述串口的時(shí)間記錄。
步驟s103,檢測(cè)各所述串口的通信狀態(tài),查找出未實(shí)現(xiàn)通信收發(fā)的串口。
在本實(shí)施例中,在進(jìn)入通信線程的入口之后,則首先對(duì)主控設(shè)備100的多個(gè)串口的工作狀態(tài)進(jìn)行初始化??梢哉{(diào)用初始化函數(shù)對(duì)各串口進(jìn)行初始化,包括對(duì)各串口的工作狀態(tài)變量進(jìn)行初始化以及對(duì)各串口的時(shí)間記錄進(jìn)行初始化。
檢測(cè)當(dāng)前系統(tǒng)通信是否已經(jīng)終止,若已終止,則關(guān)閉所有串口,并退出該通信線程。若通信還未終止,則檢測(cè)各所述串口的通信狀態(tài),查找出未實(shí)現(xiàn)通信收發(fā)的串口。例如,若串口的總數(shù)量為n,設(shè)定查找的初始變量為i,其中i=1,2……n。首先將i取值為1,檢測(cè)是否完成第1個(gè)串口的通信收發(fā),若已完成第1個(gè)串口的通信收發(fā),則增大i值,將i取值為2,再檢測(cè)是否完成第2個(gè)串口的通信收發(fā)。若檢測(cè)到第1個(gè)串口未實(shí)現(xiàn)通信收發(fā),則進(jìn)行后續(xù)的串口掃描過程。按此邏輯,直到檢測(cè)出所有串口中未實(shí)現(xiàn)通信收發(fā)的串口為止。
步驟s105,調(diào)用串口掃描函數(shù),根據(jù)未實(shí)現(xiàn)通信收發(fā)的串口的當(dāng)前通信指令及數(shù)據(jù)收發(fā)狀態(tài)信息修改該串口的工作狀態(tài)變量,使用查詢方式實(shí)現(xiàn)該串口的通信收發(fā)。
請(qǐng)參閱圖4,在本實(shí)施例中,步驟s105可以包括步驟s1051、步驟s1053、步驟s1055以及步驟s1057四個(gè)子步驟。
步驟s1051,檢測(cè)系統(tǒng)總線是否處于空閑狀態(tài),若處于空閑狀態(tài),則初始化發(fā)送參數(shù),將系統(tǒng)總線設(shè)置為發(fā)送狀態(tài),發(fā)送通信指令。
步驟s1053,判斷通信指令是否發(fā)送完成,若發(fā)送完成,則初始化接收參數(shù),將系統(tǒng)總線設(shè)置為等待接收狀態(tài)。
步驟s1055,判斷是否接收到數(shù)據(jù),若接收到數(shù)據(jù),則將系統(tǒng)總線設(shè)置為接收狀態(tài)。
步驟s1057,判斷是否接收完一幀數(shù)據(jù),若接收完一幀數(shù)據(jù),則對(duì)接收到的數(shù)據(jù)進(jìn)行處理,并將系統(tǒng)總線設(shè)置為空閑狀態(tài)。
在本實(shí)施例中,對(duì)于查找出的未實(shí)現(xiàn)通信收發(fā)的串口可調(diào)用串口掃描函數(shù)進(jìn)行串口掃描以實(shí)現(xiàn)串口通信收發(fā)??蛇x地,在本實(shí)施例中,各串口都包含有工作狀態(tài)變量、時(shí)間記錄、通信指令、串口掃描函數(shù)和初始化串口工作狀態(tài)的函數(shù)。
在進(jìn)入串口掃描函數(shù)后,首先檢測(cè)系統(tǒng)總線是否處于空閑狀態(tài),若當(dāng)前系統(tǒng)總線不是處于空閑狀態(tài),則檢測(cè)系統(tǒng)總線是否處于發(fā)送狀態(tài),類似地,若當(dāng)前系統(tǒng)總線不處于發(fā)送狀態(tài),則檢測(cè)當(dāng)前系統(tǒng)總線是否處于等待接收狀態(tài),若當(dāng)前系統(tǒng)總線也不為等待接收狀態(tài),再檢測(cè)當(dāng)前系統(tǒng)是否處于接收狀態(tài)。按此邏輯,以確認(rèn)出當(dāng)前系統(tǒng)總線的工作狀態(tài)。
若檢測(cè)到當(dāng)前系統(tǒng)總線處于空閑狀態(tài),則進(jìn)行發(fā)送參數(shù)的初始化并將系統(tǒng)總線設(shè)置為發(fā)送狀態(tài)。通過查找出的串口的某一串口向一從設(shè)備200發(fā)送通信指令。
可選地,在本實(shí)施例中,可預(yù)先對(duì)通信指令的發(fā)送時(shí)長(zhǎng)進(jìn)行設(shè)定。所述多串口通信方法還包括判斷通信指令發(fā)送是否超過預(yù)設(shè)時(shí)長(zhǎng),若超過預(yù)設(shè)時(shí)長(zhǎng),則為系統(tǒng)總線設(shè)置超時(shí)故障標(biāo)志的步驟。
在進(jìn)入通信指令發(fā)送狀態(tài)后,對(duì)通信指令發(fā)送狀態(tài)進(jìn)行檢測(cè)。在檢測(cè)到通信指令發(fā)送完成后,則對(duì)接收參數(shù)進(jìn)行初始化,并將系統(tǒng)總線設(shè)置為等待接收狀態(tài)。若檢測(cè)到通信指令發(fā)送時(shí)長(zhǎng)超過了預(yù)設(shè)時(shí)長(zhǎng),則為系統(tǒng)總線設(shè)置超時(shí)故障標(biāo)志。
在進(jìn)入等待接收狀態(tài)后,對(duì)系統(tǒng)總線的等待接收狀態(tài)進(jìn)行檢測(cè)以判斷該串口是否接收到從設(shè)備200所發(fā)送的數(shù)據(jù),一旦接收到從設(shè)備200發(fā)送的數(shù)據(jù),則將系統(tǒng)總線設(shè)置為接收狀態(tài)。
可選地,在本實(shí)施例中,可預(yù)先對(duì)系統(tǒng)等待接收時(shí)長(zhǎng)進(jìn)行設(shè)定。本實(shí)施例提供的多串口通信方法還包括判斷等待接收狀態(tài)是否超過預(yù)設(shè)時(shí)長(zhǎng),若超過預(yù)設(shè)時(shí)長(zhǎng),則為系統(tǒng)總線設(shè)置超時(shí)故障標(biāo)志的步驟。
在系統(tǒng)總線進(jìn)入接收狀態(tài)后,即檢測(cè)該串口是否接收完一幀數(shù)據(jù),在接收完一幀數(shù)據(jù)后,則對(duì)接收到的數(shù)據(jù)進(jìn)行處理,并將系統(tǒng)總線設(shè)置為空閑狀態(tài)。至此,完成上述過程之后,則表明該串口實(shí)現(xiàn)了一次通信收發(fā)。
步驟s107,調(diào)用指定函數(shù)交出該通信線程的當(dāng)前時(shí)間片。
步驟s109,檢測(cè)是否完成所有串口通信,若是,則發(fā)出通信已完成事件。
在本實(shí)施例中,當(dāng)串口實(shí)現(xiàn)通信收發(fā)后,系統(tǒng)將調(diào)用指定函數(shù),交出該通信線程的當(dāng)前時(shí)間片,以便cpu切換至其他串口的掃描??蛇x地,系統(tǒng)設(shè)置有通信指令計(jì)數(shù)器??蛇x地,檢測(cè)是否完成所有串口通信可通過檢測(cè)所有串口是否已實(shí)現(xiàn)通信指令發(fā)送及數(shù)據(jù)接收和處理過程來執(zhí)行,若已完成,則清除通信指令計(jì)數(shù)器,并為系統(tǒng)總線設(shè)置通信完成標(biāo)志,發(fā)出通信已完成事件。若并非所有串口都已完成通信指令發(fā)送及數(shù)據(jù)接收和處理過程,則將通信指令計(jì)數(shù)器的計(jì)數(shù)值加1,并返回掃描函數(shù)入口,循環(huán)進(jìn)行串口掃描。
步驟s1011,判斷是否到達(dá)預(yù)先分配給所述通信線程的指定運(yùn)行時(shí)間,若未到達(dá),則調(diào)用指定函數(shù)交出該通信線程的剩余時(shí)間片,以將該剩余時(shí)間片進(jìn)行再分配。
可選地,在本實(shí)施例中,為了提高操作系統(tǒng)效率,可以預(yù)先給該線程分配一指定運(yùn)行時(shí)間。在完成所有串口通信收發(fā)之后,則檢測(cè)是否到達(dá)系統(tǒng)預(yù)先分配給該通信線程的指定運(yùn)行時(shí)間,若還未到達(dá),則表明時(shí)間還有剩余,則調(diào)用指定函數(shù)來釋放該通信線程的剩余時(shí)間片。如此可以讓操作系統(tǒng)切換至其他線程來執(zhí)行,提升效率。
本實(shí)施例提供的多串口通信方法,使用函數(shù)調(diào)用和循環(huán)查詢的方式替代了現(xiàn)有技術(shù)中線程切換來對(duì)多串口進(jìn)行管理,占用的系統(tǒng)資源更少,且減少了cpu運(yùn)行時(shí)間。并且,在單線程中進(jìn)行多個(gè)串口的掃描,使串口實(shí)現(xiàn)通信收發(fā),如此,在正常通信條件下,多個(gè)串口收發(fā)的數(shù)據(jù)不會(huì)與其他掃描周期的數(shù)據(jù)混淆。此外,在完成掃描實(shí)現(xiàn)所有串口通信后,即產(chǎn)生一通信已完成事件,有利于其它線程統(tǒng)一處理通信數(shù)據(jù)。
請(qǐng)參閱圖5,為本發(fā)明實(shí)施例提供的一種多串口通信裝置110的功能模塊框圖。所述多串口通信裝置110包括初始化模塊111、查找模塊112、修改模塊113、第一調(diào)用模塊114、檢測(cè)模塊115、判斷模塊116以及第二調(diào)用模塊117。
所述初始化模塊111用于進(jìn)入通信線程,初始化各所述串口的工作狀態(tài)變量及各所述串口的時(shí)間記錄。具體地,該初始化模塊111可用于執(zhí)行圖3中所示的步驟s101,具體的操作方法可參考步驟s101的詳細(xì)描述。
所述查找模塊112用于檢測(cè)各所述串口的通信狀態(tài),查找出未實(shí)現(xiàn)通信收發(fā)的串口。具體地,該查找模塊112可用于執(zhí)行圖3中所示的步驟s103,具體的操作方法可參考步驟s103的詳細(xì)描述。
所述修改模塊113用于調(diào)用串口掃描函數(shù),根據(jù)未實(shí)現(xiàn)通信收發(fā)的串口的當(dāng)前通信指令及數(shù)據(jù)收發(fā)狀態(tài)信息修改該串口的工作狀態(tài)變量,使用查詢方式實(shí)現(xiàn)該串口的通信收發(fā)。具體地,該修改模塊113可用于執(zhí)行圖3中所示的步驟s105,具體的操作方法可參考步驟s105的詳細(xì)描述。
所述第一調(diào)用模塊114用于調(diào)用指定函數(shù)交出該通信線程的當(dāng)前時(shí)間片。具體地,該第一調(diào)用模塊114可用于執(zhí)行圖3中所示的步驟s107,具體的操作方法可參考步驟s107的詳細(xì)描述。
所述檢測(cè)模塊115用于檢測(cè)是否完成所有串口通信,若是,則發(fā)出通信已完成事件。具體地,該檢測(cè)模塊115可用于執(zhí)行圖3中所示的步驟s109,具體的操作方法可參考步驟s109的詳細(xì)描述。
所述判斷模塊116用于判斷是否到達(dá)預(yù)先分配給所述通信線程的指定運(yùn)行時(shí)間。所述第二調(diào)用模塊117用于在所述判斷模塊116判斷結(jié)果為否時(shí),調(diào)用指定函數(shù)交出該通信線程的剩余時(shí)間片,以將該剩余時(shí)間片進(jìn)行再分配。具體地,該判斷模塊116和第二調(diào)用模塊117可共同用于執(zhí)行圖3中所示的步驟s1011,具體的操作方法可參考步驟s1011的詳細(xì)描述。
請(qǐng)參閱圖6,在本實(shí)施例中,所述修改模塊113包括檢測(cè)單元1131、發(fā)送參數(shù)初始化單元1132、第一判斷單元1133、接收參數(shù)初始化單元1134、第二判斷單元1135、設(shè)置單元1136、第三判斷單元1137以及處理單元1138。
所述檢測(cè)單元1131用于檢測(cè)系統(tǒng)總線是否處于空閑狀態(tài)。所述發(fā)送參數(shù)初始化單元1132用于在系統(tǒng)總線處于空閑狀態(tài)時(shí),初始化發(fā)送參數(shù),將系統(tǒng)總線設(shè)置為發(fā)送狀態(tài),發(fā)送通信指令。具體地,該檢測(cè)單元1131和發(fā)送參數(shù)初始化單元1132可共同用于執(zhí)行圖4中所示的步驟s1051,具體的操作方法可參考步驟s1051的詳細(xì)描述。
所述第一判斷單元1133用于判斷通信指令是否發(fā)送完成。所述接收參數(shù)初始化單元1134用于在通信指令發(fā)送完成時(shí),初始化接收參數(shù),將系統(tǒng)總線設(shè)置為等待接收狀態(tài)。具體地,該第一判斷單元1133和接收參數(shù)初始化單元1134可共同用于執(zhí)行圖4中所示的步驟s1053,具體的操作方法可參考步驟s1053的詳細(xì)描述。
所述第二判斷單元1135用于判斷是否接收到數(shù)據(jù)。所述設(shè)置單元1136用于在接收到數(shù)據(jù)時(shí),將系統(tǒng)總線設(shè)置為接收狀態(tài)。具體地,該第二判斷單元1135和設(shè)置單元1136可共同用于執(zhí)行圖4中所示的步驟s1055,具體的操作方法可參考步驟s1055的詳細(xì)描述。
所述第三判斷單元1137用于判斷是否接收完一幀數(shù)據(jù)。所述處理單元1138用于在接收完一幀數(shù)據(jù)時(shí),對(duì)接收到的數(shù)據(jù)進(jìn)行處理,并將系統(tǒng)總線設(shè)置為空閑狀態(tài)。具體地,該第三判斷單元1137和處理單元1138可共同用于執(zhí)行圖4中所示的步驟s1057,具體的操作方法可參考步驟s1057的詳細(xì)描述。
請(qǐng)參閱圖7,在本實(shí)施例中,所述修改模塊113還包括第四判斷單元1139及故障標(biāo)志設(shè)置單元11310。
所述第四判斷單元1139用于判斷通信指令發(fā)送是否超過預(yù)設(shè)時(shí)長(zhǎng)。
所述故障標(biāo)志設(shè)置單元11310用于在超過預(yù)設(shè)時(shí)長(zhǎng)時(shí),為系統(tǒng)總線設(shè)置超時(shí)故障標(biāo)志。
綜上所述,本發(fā)明提供的多串口通信方法及裝置,應(yīng)用于包括多個(gè)串口的主控設(shè)備100,通過函數(shù)調(diào)用及循環(huán)查詢方式來實(shí)現(xiàn)多串口的通信收發(fā),減少了系統(tǒng)資源的占用并減少了cpu的運(yùn)行時(shí)間。并且,在完成掃描實(shí)現(xiàn)串口通信收發(fā)后即發(fā)出通信已完成事件,有利于其它線程統(tǒng)一處理通信數(shù)據(jù)。本發(fā)明提供的多串口通信方案,能夠在單線程中實(shí)現(xiàn)多串口的通信收發(fā),減少了cpu消耗并提高了系統(tǒng)性能。
在本申請(qǐng)所提供的實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,也可以通過其它的方式實(shí)現(xiàn)。以上所描述的裝置實(shí)施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的實(shí)施例的裝置、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)方式中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步定義和解釋。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。