一種嵌入式系統中串口分時復用方法
2023-08-08 01:59:56
專利名稱:一種嵌入式系統中串口分時復用方法
技術領域:
本發明涉及一種串ロ分時復用方法。
背景技術:
串ロ,即串行接ロ,廣泛應用於通信終端設備和エ業控制中,如RS-232、RS-242、RS485等。串ロ多路復用是指在一條物理串行接口上實現多個數據鏈路連接(DLC),使得可以同時在一條串行接口上存在多個會話,比如語音、數據、USSD等。而分時復用(TDMA,TimeDivision Multiplex Access)則是在網絡中應用於用一條線路傳輸多路數據,基於分時段應用線路的技木,簡單點說,就是把多個工作的每個工作都分成多個時間段,然後各個工作的各個時間段交叉使用,這樣就好像多個工作同時運行。 隨著數位化智能化的發展,嵌入式行業發展迅速,其中很大一部分應用是自動控制,串ロ無疑是設備控制的最佳選擇,如何實現高效、精確、實時的串ロ通信是嵌入式控制編程的一大任務。目前很多晶片的功能是多元化的,其外設也不會針對某個特殊應用特別設計,因此就可能出現串口數量不夠等問題,此時,如何巧妙高效的復用串ロ是降低系統複雜程度、提升系統健壯性的關鍵。在一些應用中,通過增加開關和設置軟體參數,並對寄存器進行控制的方式,解決在同一串口上驅動功能與調試輸出功能分時復用的問題,以保證串ロ驅動功能與調試輸出功能之間順暢地進行切換。這種應用中,匹配終端所需要執行的功能設置ー個標誌位,並在如手機串ロ與功能模塊之間增加ー屏蔽開關,使串ロ驅動與調試輸出互斥,通過所述標誌位表示如串ロ驅動的狀態,調試輸出根據該狀態而呈現出另一種狀態,據以實現串ロ驅動功能與調試輸出功能之間的切換。這種方式只能分時段的進行相關功能的切換,相互制約,串ロ並不能得到有效地使用。Linux系統為終端設備提供了豐富的接ロ,巧妙的運用這些接ロ函數能解決ー些常規思路不能解決的問題,而且還不會影響當前常規的應用,其中ioctl 函數能根據參數的不同回傳特定的數據或者參數,發明人認為對Linux提供的接ロ函數進行探索來解決串ロ分時復用方面的問題尤其可行性。
發明內容
因此,本發明從串ロ驅動入手,提供ー種嵌入式系統中串ロ分時復用方法,在不影響原有線路規程的情況下,實現了直接獲取串口數據的目的,從而實現串ロ復用。本發明採用以下技術方案
該發明ー種嵌入式系統中串ロ分時復用方法,包括
1)在驅動層根據接收到的數據的幀頭和幀尾篩選目標數據;
2)把篩選出的所述目標數據送入數據緩衝區;
3)調用ioctlO函數把數據緩衝區的所述目標數據拷貝到應用層;4)從應用層獲取所述目標數據。依據本發明的上述嵌入式系統中串ロ分時復用方法,從串ロ驅動入手,從串ロ接收函數篩選目標數據,把篩選出來的目標數據送入數據緩衝區,利用ioctlO函數把數據緩衝區的數據拷貝到應用層,這樣既不影響原有的線路規程,還實現了直接獲取串口數據的目的,從而實現串ロ服用。上述嵌入式系統中串ロ分時復用方法,所述步驟I)中篩選目標數據的過程是通過數據幀頭和幀尾來確定幀尾是否是所需要的數據幀,若是,則將對應的目標數據放入到數據緩衝區,同時,數據緩衝區標誌位置位;如果不是則不做處理。上述嵌入式系統中串ロ分時復用方法,串ロ建立連接後,接收函數按字節開始接收數據,在接收到幀頭ー計數器開始計數,並在接收到幀尾後停止計數,通過計數器的計數判斷數據的類型。上述嵌入式系統中串ロ分時復用方法,如果收到應用層獲取所述目標數據的命令 後,首先判斷該命令與數據緩衝區所存放數據是否對應,若對應,則讀取緩衝區標誌,如果是標誌位置位,則使用copy_to_user O函數把對應的命令巾貞拷貝到itctl O函數傳輸的地址,並返回約定好的返回值,確認返回值後緩衝區標誌清零。
圖I為依據本發明的一種驅動層篩選數據的流程圖。圖2為依據本發明的一種應用層獲取數據的流程圖。圖3為內核層ioctl O函數處理流程圖。
具體實施例方式應用於控制領域的數據一般都是約定好的具有幀頭和幀尾的命令幀,但由於依據本發明的方法顯然也可以應用於其他數據的篩選和應用,針對不同的數據,其幀長和幀頭都有規範定義,因此,應用本發明的方法,匹配不同的數據類型,可以獲得所需要的目標數據。在以下的內容中,以命令幀為例進行說明,也在於在控制領域的數據一般都是約定好的具有幀頭和幀尾的命令幀,且也相對最為重要。應當理解的是,在如圖I至3所示的流程中,針對命令幀數據的獲得,其他數據的排除可知,數據類型多樣同樣存在於控制領域,且也據此可知相應不同的目標數據的獲得,可以針對不同的數據,最終獲取所需要的數據類型。針對其他類型的數據,概括的表現在與如說明書附圖I至3所示的命令幀相同的處理流程中。參照說明書附圖1,針對以命令幀為目標數據,串ロ接收函數按字節開始接受數據,依據幀頭特徵,接收到幀頭,分配一個計數器,在接收到幀頭後開始計數,依據命令幀的字節數,接收到既定的字節數後通過判斷是否接收到對應的幀尾,從而依據命令真的長度確定接收到的數據是否為命令幀。在此過程中,如果在既定的字節數後的字節並非幀尾,丟掉該數據,或者轉由Linux終端設備線路規程處理,減少運算量。在一些應用中,某些幀頭會有命令幀標識,同通過該標識確定數據類型,可以據此省略命令幀獲取的後續步驟。
在圖I所示的流程中,在計數器累積的數值等於命令幀字節數時,通過判斷幀尾確定是否為命令幀,若非,則對下ー幀數據進行判斷;若是,則將該幀數據拷貝到數據緩衝區,同時該數據緩衝區標誌置位,以備調用。如圖2所示,是應用層調用ioctl O函數獲取數據的流程,串ロ驅動的ioctl O函數在被調用後,如果是應用層獲取數據的命令,則判斷數據緩衝區的標誌,如果標誌置位,則使用C0py_t0_User函數把數據緩衝區的命令幀拷貝到itctl O函數傳入的地址,並返回約定好的特定的返回值。進而,依據說明書附圖3,應用層獲取數據的步驟為應用層獲取數據的函數接ロ是ioctl O函數,調用該函數時需要兩個參數獲取數據的命令和數據返回地址。調用函數後,如果返回值為所述的約定好的特定的返回值,則返回地址中就是需要的命令幀。在前述的內容中,在數據緩衝區的數據被應用層調取後,緩衝區的標誌清零。
經過大量的長時間實驗,依據本發明的在嵌入式系統中應用的串ロ分時復用方法能夠相對高效的接收串口數據,復用的串ロ能完成兩個獨立的功能,互不影響。
權利要求
1.一種嵌入式系統中串口分時復用方法,其特徵在於,包括 1)在驅動層根據接收到的數據的幀頭和幀尾篩選目標數據; 2)把篩選出的所述目標數據送入數據緩衝區; 3)調用ioctlO函數把數據緩衝區的所述目標數據拷貝到應用層; 4)從應用層獲取所述目標數據。
2.根據權利要求I所述的嵌入式系統中串口分時復用方法,其特徵在於,所述步驟I)中篩選目標數據的過程是通過數據幀頭和幀尾來確定幀尾是否是所需要的數據幀,若是, 則將對應的目標數據放入到數據緩衝區,同時,數據緩衝區標誌位置位;如果不是則不做處理。
3.根據權利要求2所述的嵌入式系統中串口分時復用方法,其特徵在於,串口建立連接後,接收函數按字節開始接收數據,在接收到幀頭一計數器開始計數,並在接收到幀尾後停止計數,通過計數器的計數判斷數據的類型。
4.根據權利要求2或3所述的嵌入式系統中串口分時復用方法,其特徵在於,如果收到應用層獲取所述目標數據的命令後,首先判斷該命令與數據緩衝區所存放數據是否對應,若對應,則讀取緩衝區標誌,如果是標誌位置位,則使用copy_to_user O函數把對應的命令幀拷貝到itctlO函數傳輸的地址,並返回約定好的返回值,確認返回值後緩衝區標誌清零。
全文摘要
本發明公開了一種嵌入式系統中串口分時復用方法,包括1)在驅動層根據接收到的數據的幀頭和幀尾篩選目標數據;2)把篩選出的所述目標數據送入數據緩衝區;3)調用ioctl函數把數據緩衝區的所述目標數據拷貝到應用層;4)從應用層獲取所述目標數據。依據本發明的串口分時復用方法不影響原有線路規程的情況下,實現了直接獲取串口數據的目的,從而實現串口復用。
文檔編號G06F13/38GK102866976SQ20121034366
公開日2013年1月9日 申請日期2012年9月17日 優先權日2012年9月17日
發明者劉國興, 李同磊, 魏光旭, 徐勤浦 申請人:山東神戎電子股份有限公司