[發明專利]一種基于狀態機和環形隊列的串口命令解析方法在審
| 申請號: | 201710462136.8 | 申請日: | 2017-06-19 |
| 公開(公告)號: | CN107302531A | 公開(公告)日: | 2017-10-27 |
| 發明(設計)人: | 王在義;王啟葉;韓大偉 | 申請(專利權)人: | 青島華潞佳電子科技有限公司 |
| 主分類號: | H04L29/06 | 分類號: | H04L29/06;H04L12/879;H04L12/861;H04L1/00 |
| 代理公司: | 青島中天匯智知識產權代理有限公司37241 | 代理人: | 史文樊,劉曉 |
| 地址: | 266000 山*** | 國省代碼: | 山東;37 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 狀態機 環形 隊列 串口 命令 解析 方法 | ||
1.一種基于狀態機和環形隊列的串口命令解析方法,其特征在于,包括如下步驟:
S1:定義串口通信協議;
S2:定義狀態機的狀態;
S3:設置先進先出的環形循環數據緩沖區;
S4:當上位機下發數據后,下位機采用DMA的方式將接收到的數據從外設讀取到接收數組中,同時在程序主函數中不停地檢測DMA是否接收到新的數據,當檢測到新入的數據時則立即將新入的數據寫入到環形數據緩沖區中;當環形數據緩沖區中有數據時,在程序的主函數中同時進行數據的讀出,讀出時依照狀態機的狀態進行數據的解析。
2.根據權利要求1所述的基于狀態機和環形隊列的串口命令解析方法,其特征在于,所述步驟S1中,定義串口通信協議包含以下幾個域:(1)幀頭;(2)幀長度;(3)功能碼;(4)幀數據體;(5)校驗和。
3.根據權利要求2所述的基于狀態機和環形隊列的串口命令解析方法,其特征在于,所述數據幀頭設置兩個。
4.根據權利要求3所述的基于狀態機和環形隊列的串口命令解析方法,其特征在于,所述步驟S2中,定義狀態機有以下幾種狀態:(1)數據幀頭檢查接收狀態;(2)數據幀長檢查接收狀態;(3)功能碼檢查接收狀態;(4)幀數據體接收狀態;(5)數據幀校驗和檢查狀態。
5.根據權利要求1或2或3或4所述的基于狀態機和環形隊列的串口命令解析方法,其特征在于,先進先出的環形循環數據緩沖區的設置方法為:
設置一個大小為SIZE的線性數據緩沖區,用Tail指針指向該緩沖區中接收到的有效數據位置即寫入數據的位置,用Head指針指向該緩沖區中已經處理的有效數據位置即讀出的數據位置,初始化時,Head指針和Tail指針都指到0的位置;當串口接收到數據存放到緩沖區后,Tail就加1,當Tail大于SIZE-1時,將Tail更新為0;當系統從緩沖區取出一個數據進行分析,Head就加1,當Head大于SIZE-1時,將Head更新0。
6.根據權利要求4所述的基于狀態機和環形隊列的串口命令解析方法,其特征在于,按照下列步驟對讀出的數據進行解析:
S61:狀態機的初始狀態為數據幀頭檢查接收狀態,依次對讀出的數據進行幀頭檢查,若該數據與通信協議中預設的第一個幀頭不相等則該數據無效,繼續讀取下一個數據,直到讀取的兩個數據與預設的兩個幀頭數據相等,此時幀頭數據讀取成功,更改狀態機的狀態為數據幀長檢查接收狀態;
S62:繼續讀取下一個數據進行幀長度檢查,如果該數據滿足通信協議中對數據體長度的要求,則得到幀長度數據的同時更改狀態機的狀態為功能碼檢查接收狀態;否則則表明該數據無效,更改狀態機的狀態為幀頭檢查接收狀態,返回步驟S61;
S63:繼續讀取下一個數據進行功能碼檢查,如果該數據滿足通信協議中對功能碼的要求,則更改狀態機的狀態為幀數據體接收狀態;否則則表明該數據無效,更改狀態機的狀態為幀頭檢查接收狀態,返回步驟S61;
S64:根據步驟S2獲得的幀長度數據,連續讀取幀長度所要求的長度的數據作為幀數據體數據,然后更改狀態機的狀態為數據幀校驗和檢查狀態,進入步驟S65;
S65:對步驟S4獲得的幀數據體進行校驗和檢查,若校驗和正確則執行功能碼規定的相應操作,否則則表明該數據無效,更改狀態機的狀態為幀頭檢查接收狀態,返回步驟S61。
7.根據權利要求6所述的基于狀態機和環形隊列的串口命令解析方法,其特征在于,狀態機在接收時,在字節與字節之間設置接收時間閾值,如果超過該時間閾值則該數據無效,返回步驟S61。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于青島華潞佳電子科技有限公司,未經青島華潞佳電子科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710462136.8/1.html,轉載請聲明來源鉆瓜專利網。





