1. 程式人生 > >串列埠資料解析通用方法

串列埠資料解析通用方法

#region 解析方法2
                // Listening = true;////設定標記,說明我已經開始處理資料,一會兒要使用系統UI的。
                isReceive = true;
                //將資料新增到快取區
                buffer.AddRange(receiveByte);
                List<int> indexList = new List<int>();//儲存包頭包尾位置
                for (int i = 0; i < buffer.Count; i++)
                {
                    //如果發現包頭獲取包尾就記錄
                    if (buffer[i] == 0x7E)
                    {
                        indexList.Add(i);
                    }
                }

                //儲存接收資料包中包含的完整包
                List<byte[]> bufferList = new List<byte[]>();
                if (indexList.Count >= 2)
                {
                    //按位置擷取資料包
                    for (int x = 0; x < indexList.Count; x++)
                    {
                        List<byte> list = new List<byte>();
                        if ((x + 1) < indexList.Count)
                        {
                            for (int y = indexList[x]; y <= indexList[x + 1]; y++)
                            {
                                list.Add(buffer[y]);
                            }
                            bufferList.Add(list.ToArray());
                        }
                    }
                }

                //解析資料包
                for (int j = 0; j < bufferList.Count; j++)
                {
                        //解析
                    
                    }
                }
               
                    //解析完成後移除緩衝區原資料
                    for (int h = 0; h < indexList.Count; h++)
                    {
                        if ((h + 1) < indexList.Count)
                        {
                            buffer.RemoveRange(indexList[h], indexList[h + 1] + 1);
                        }
                    }
                

                //判斷剩餘緩衝區是否還包含有包頭或包尾,如果都不包含,直接清除緩衝區
                for (int g = 0; g < buffer.Count; g++)
                {
                    if (buffer[g] == 0x7E)
                    {

                    }
                    else
                    {
                        buffer.Clear();
                    }
                }

                Console.WriteLine();
                #endregion

相關推薦

串列資料解析通用方法

#region 解析方法2                 // Listening = true;////設定標記,說明我已經開始處理資料,一會兒要使用系統UI的。                 isReceive = true;                 //將

串列資料接收LCD液晶顯示

       接上篇部落格,對串列埠接收到的資料在LCD液晶上進行顯示,這裡只顯示了一個數據,拿了數組裡面的一個數據進行了顯示。硬體連線上:A板PA9---->B板PA10,A板PA10--->B板PA9。 #include "led.

伺服器資料恢復通用方法/伺服器硬碟故障導致資料丟失解決方案

[伺服器資料恢復原因推斷] 伺服器資料丟失情況很多,通常無法明確伺服器資料丟失的原因,常見的丟失原因有:伺服器硬碟出現故障,管理員或者伺服器自動進行fsck操作,這一操作可能造成更加嚴重資料丟失或者導致伺服器資料恢復的難度增加。伺服器資料丟失後執行mkfs操作,若操作未完成則容易導致部分塊組全部

解決Linux下串列資料接收不全的異常問題

1、引言     最近在Linux下除錯串列埠程式,遇到了串列埠資料接收不全的異常問題,經過將近一上午的努力終於找到問題根源,特此分享給大家,此次除錯過程中用到了主要用到了minicom工具,至於minicom的使用大家可以自行查詢相關資料。 2、正文  

STM32 不斷進入串列中斷問題 解決方法

STM32 有時候會不斷進入中斷,解決方法如下 1.串列埠初始化配置時,需要開啟ORE 溢位中斷,如下紅色程式碼所示 void Usart_Init(void) {     GPIO_InitTypeDef GPIO_InitStructure;

[轉]WEB頁獲取串列資料

本文轉自:https://www.cnblogs.com/rockyhm/p/3434200.html 最近做一個B/S的專案,需要讀取電子秤的值,之前一直沒做過,也沒有經驗,於是在網上找到很多  大致分兩種 使用ActiveX控制元件,JS呼叫MSCOMM32.dll的串列埠控制元件對串

基於C# Winform的串列資料接收

https://blog.csdn.net/woolnil/article/details/78048272 今天,我分享一篇文章,講述 基於C# Winform的串列埠資料接收程式設計(適合大概明白WinForm程式設計的同學,沒有接觸過WinForm的同學下載原始碼學習)

利用定時中斷接收不定長度的串列資料

在使用串列埠時,通常會遇到一些功能,如在TFT螢幕上顯示串列埠收到的字串,這些字串直接是對方printf過來的,沒有任何協議,此時為了保證顯示內容是一整個句子(通常句子傳送會有間隔),這是我們可以用定時器進行判斷是否接收完成。 以stm32f4為例,程式碼基於正點原子的例程,為了閱讀

串列資料轉乙太網

1.概述   串列埠轉乙太網目前可以採用串列埠轉乙太網模組來實現,變得非常簡單易用,但是在該技術中出現的一些新問題、使用誤區需要引起注意。串列埠轉乙太網並不是簡單傳輸媒介的變化,而是串列埠到TCP/IP的協議轉化。其中關係到的關鍵技術包括:TCP/IP的工作模式問題、串列埠

用電能耗監測DTU工業級閘道器RS485串列資料採集

方案需求 隨著社會的發展,用電戶大量增加,使用者分散,管理不便,傳統抄表方式需要投入大量的人工和時間成本,急需一種自動化的、方便的、先進的秒錶方式。 傳統人工抄表方式效率低下,經常會出現漏抄、誤抄的情況。 傳統人工抄表方式需要投入大量的人工成本,耗費大量的時間,效率低下。 傳統自己抄表方式需要佈置大量

Ubuntu USB串列資料 讀取及顯示

顯示串列埠接受的資料命令      1.1 在終端輸入   lsusb  顯示所有連線的usb裝置      1.2 在終端輸入   ls /dev/ttyA* 顯示所有連線的虛擬USB裝置埠號

串列資料通過Tcp轉到伺服器實現資料轉發

主要目的:通過串列埠獲取外設的資料,轉發到伺服器進行處理並在Web端顯示裝置的資訊。 主要用到的知識點: 第一:串列埠通訊相關的知識。 1.串列埠通訊用到的兩個標頭檔案: #include <QtSerialPort/QSerialPort> #inclu

STM32高階開發(12)-在GCC中使用printf列印串列資料

在大家使用keil或是iar開發stm32等arm晶片的時候,想來最不陌生的就是使用print通過串列埠輸出一些資料,用來除錯或是其他作用。但是要明確的是由於keil iar gcc 他們使用的標準C語言庫雖然都遵循一個標準,但他們底層的函式實現方式都是不同的,那麼在GCC中

記一次linux下串列資料丟包解決過程

專案中兩個晶片之間用串列埠進行通訊,由於傳輸格式中有校驗位,在資料量很大的時候總是校驗失敗。於是花了很長的時間最終解決了這個問題。 首先串列埠丟資料有兩種情況(明顯排除傳送端傳送的資料不對),第一種是通道也就是串列埠線或者連線口不行,無法承受很高的波特率(我使用的波特率是9

WINce串列驅動解析

在WinCE中,串列埠驅動實際上就是一個流裝置驅動,具體架構如圖: 串列埠驅動本身分為MDD層和PDD層。MDD層對上層的Device Manager提供了標準的流裝置驅動介面(COM_xxx),PDD層實現了HWOBJ結構及結構中若干針對於串列埠硬體操作的函式指標,這

讀取外部串列資料----01

Linux: 1,為了方便,先安裝一個串列埠除錯助手Socat,以及可以通過工具開啟兩個串列埠 我這裡運行了一個網上的一個python程式碼(virtualCom.py),可以模擬出兩個串列埠 檢視一個串列埠的資訊  或 用上面安裝的圖形工具socat,開啟命令是 sudo  &

STM32多串列共用printf列印串列資料

(1)問題描述: 多串列埠共用printf函式,百度到的資料大部分是建議重新寫一個xx_printf(format, …)。但是使用起來還是不方便,就此問題而言加上一個判斷語句便可解決。 (2)解決方法: printf函式最後呼叫的是int

英偉達tk1板的串列資料收發出錯問題

最近在做一個專案,需要用到英偉達的tk1板做開發,其中利用到了tk1上的串列埠做開發。 其中遇到了一個隱藏的bug,在用tk1板傳輸資料時,tk1的驅動會把部分資料如連續的多格0或者0x11這類資料吃掉,到串列埠上讀的時候發現有遠比我要傳送的資料要少。 因為一開始做的時候,

自定義串列資料協議傳送hex檔案

hex檔案格式:Intel HEX is a file format that conveys binary information in ASCII text form. It is commonly used for programming microcontroller

高通平臺bootloader裡面串列log輸出配置方法

1:在modem端將相應的gpio設定成相應功能。 2:在/lk/project/xxx.mk開啟uart輸出log功能。 3:在platform/msm_shared/uart.c中定義uart幾輸出log, #if PLATFORM_MSM7X30 static uns