成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

7E頭解析的那些事兒(幀格式分析實例)

開發 前端
作為一名嵌入式工程師,經常需要通過UART與外設打交道,而對于串行總線來說,往往我們必須要進行幀同步。通常的做法是把信令包含在2個0x7E的中間。

[[431168]]

0. 前言

作為一名嵌入式工程師,經常需要通過UART與外設打交道,而對于串行總線來說,往往我們必須要進行幀同步。通常的做法是把信令包含在2個0x7E的中間。

除此之外還有HDLC、PPP等協議也會到有此應用場景。

那么如何從這些數據幀中提取有效數據呢?

本文通過一個簡單的實例給大家詳細講述如何從幀中提取有效的協議信令。

1. 幀格式要求

首先我們明確下幀提取的一些要求:

(1)把信息字段中出現的每一個0x7E字節轉變為2字節序列(0x7D,0x5E)。

(2)若信息字段中出現一個0x7D的字節(即出現了和轉義字符一樣的比特組合),則把轉義字符0x7D轉變為2字節序列(0x7D,0x5D)。

舉例:一個PPP幀的數據部分:

  1. 7D 5E FE 27 7D 5D 7D 5D 65 7D 5E 

那么實際上真正的數據是

  1. 7E FE 27 7D 7D 65 

轉換圖解:

同樣的,如果要發送數據,則反過來。

2. 設計

  • 底層傳上來的每一短幀長度不固定
  • 底層傳上來的每一短幀7e頭位置不固定,可能有可能沒有,可能有1個7e也可能有2個7e
  • 默認每一幀數據最多2個7e

比如:我們從底層收上來的原始數據幀格式如下:

那么我們要能夠提取兩個7e之間的協議數據幀,同時還原幀中的所有的7e。

很顯然我們希望最終解析后結果如下:

  1. 7e 0f 0e 30 27 1c 00 27 1c 01 27 1c 02 7e 00 29 7e  
  2. 7e 11 73 7e  
  3. 7e 00 27 1c 01 27 1c 02 7e 00 29 7e  

幀解析詳細設計流程圖

3.代碼

不上代碼的就是耍流氓

首先看下如果下發數據幀,如何將所有的7e和7d做替換:函數hdlc_send(char * data,UINT8 len)實現如下:

int hdlc_rcv_frm(UINT8 *data,int len)實現如下

測試代碼如下:

  1. int main() 
  2.  int len; 
  3.   
  4.  char data1[6]={0x7e,0xf,0xe,0x30,0x27,0x1c};  
  5.  char data2[6]={0x0,0x27,0x1c,0x1,0x27,0x1c}; 
  6.  char data3[8]={0x2,0x7d,0x5e,0x0,0x29,0x7e,0x0,0x7e}; 
  7.  char data4[6]={0x11,0x73,0x7e,0x30,0x27,0x7e};  
  8.  char data5[6]={0x0,0x27,0x1c,0x1,0x27,0x1c}; 
  9.  char data6[6]={0x2,0x7d,0x5e,0x0,0x29,0x7e};  
  10.  
  11. #if 0 
  12.  printf("************測試hdlc_send()******************\n"); 
  13.  
  14.  len = hdlc_send(data1,6); 
  15.  
  16.  printf("********************end**********************\n\n"); 
  17. #endif 
  18.  printf("\n************測試hdlc_rcv_frm()******************\n"); 
  19.  hdlc_rcv_frm(data1,6); 
  20.  hdlc_rcv_frm(data2,6); 
  21.  hdlc_rcv_frm(data3,8); 
  22.   
  23.  hdlc_rcv_frm(data4,6); 
  24.  hdlc_rcv_frm(data5,6); 
  25.  hdlc_rcv_frm(data6,6); 
  26.  printf("********************end**************************\n"); 
  27. 運行結果如下: 

運行結果如下:

注意

本代碼仍然有一些bug,暫時沒有修改,所以實際項目慎用。小心數組越界啊!

完整代碼鏈接:

鏈接:https://pan.baidu.com/s/1rPEDC3erLpPRH0OnkfNH_A

提取碼:wzxq

 

責任編輯:武曉燕 來源: 一口Linux
相關推薦

2009-06-16 08:58:30

微軟Windows 7操作系統

2021-11-11 23:16:33

前端數據格式Web

2023-04-11 07:34:40

分布式系統算法

2021-03-18 09:01:53

軟件開發軟件選型

2021-06-02 08:33:31

TPCTPC-H系統

2018-09-26 06:50:19

2011-02-25 14:35:00

2022-02-08 17:39:04

MySQL服務器存儲

2013-12-26 14:23:03

定位系統GPS監測

2021-06-09 13:28:40

密碼安全身份認證數據安全

2018-02-02 13:58:59

數據存儲

2010-04-07 13:13:19

Visual Stud

2012-07-19 15:30:00

Linux

2017-08-09 08:25:35

DBA數據庫OLAP

2022-08-04 10:18:32

棧遷移?寄存器內存

2022-11-04 07:57:59

編程編碼編譯器

2013-07-09 13:50:05

2021-05-10 08:58:09

Harbor架構Registry 服務

2010-10-15 10:31:00

2021-02-01 14:17:53

裝飾器外層函數里層函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产a区 | 99re6在线视频| 日本一区二区视频 | 亚洲国产成人精品女人 | 黄色片视频免费 | 亚洲一区二区三区四区视频 | 免费视频一区二区 | 亚洲精品区 | 亚洲一区在线免费观看 | 久草福利 | 中文字幕国产精品 | 黄色一级大片在线免费看产 | 国产欧美一区二区三区在线看 | a级在线免费观看 | 欧美一区二区三区视频 | 国产精品九九九 | 中文字幕在线第二页 | 欧美亚洲国产日韩 | 91麻豆精品一区二区三区 | 国产日本精品视频 | 欧美在线天堂 | 成人做爰69片免费观看 | 久久的色| 日韩欧美一区二区三区四区 | 久久蜜桃av一区二区天堂 | 国家aaa的一级看片 h片在线看 | 色综合网站 | 日韩精品一区二区久久 | 午夜视频一区 | 国产91综合 | 一级欧美一级日韩片 | 久久精品青青大伊人av | 国产一级在线观看 | 麻豆成人在线视频 | 亚洲一区在线日韩在线深爱 | 99免费视频 | 国产精品久久久久久久久婷婷 | 青青操91 | 久久综合一区二区三区 | 操亚洲| 国产福利一区二区 |