久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2573|回復: 9
打印 上一主題 下一主題
收起左側

解碼一個報文一般怎樣寫程序?

[復制鏈接]
跳轉到指定樓層
樓主
ID:333483 發表于 2022-2-10 15:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
比如一個報文的格式為:$AA,111,BB,222,<$$>

通過串口接收進來存在數組buffer里,然后根據這個AA 111 BB 222的不同執行不同的操作這樣的程序設計思路是什么?

我是這樣寫的
if((USART_RX2_BUF[0] == '$')&&(USART_RX2_BUF[1] == 'A')&&(USART_RX2_BUF[2] == 'A'))
{
   if((USART_RX2_BUF[4] == '1')&&(USART_RX2_BUF[1] == '1')&&(USART_RX2_BUF[1] == '1'))       
    {
       執行的操作...
    }                       
}


這樣感覺效率很低,一般這種情況應該怎么設計程序。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:311903 發表于 2022-2-10 16:02 | 只看該作者
$AA,111,BB,222,<$$>  建議 將這幀報文拆開,頭部為 $ ,收到頭部后,接下來是  14個字節的數據部分(AA,111,BB,222,),再接下來是 尾部 <$$> ,這樣為正常的一幀,然后再處理數據部分的內容
回復

使用道具 舉報

板凳
ID:313048 發表于 2022-2-10 16:06 | 只看該作者
如果長度格式都是一樣的,則可以直接用scanf進行解析,前提是保證數據正確,不丟包等。
回復

使用道具 舉報

地板
ID:333483 發表于 2022-2-10 17:02 | 只看該作者
xws245925587 發表于 2022-2-10 16:02
$AA,111,BB,222,  建議 將這幀報文拆開,頭部為 $ ,收到頭部后,接下來是  14個字節的數據部分(AA,111,BB ...

比如我拆開了,吧AA111BB222存在了數組a里面,那我不是還是要比對if(a[0]==A&&a[1]==A)嗎?如果這個AA有很多種比如BB CC DD ...這樣我就要用很多個if,這樣感覺程序執行的效率就很低,一般是不是不該這樣寫,這種情況應該怎么設計結構?
回復

使用道具 舉報

5#
ID:879348 發表于 2022-2-10 17:27 | 只看該作者
不用擔心效率,按照人腦思維習慣寫是最好的
回復

使用道具 舉報

6#
ID:415064 發表于 2022-2-10 17:29 | 只看該作者
memcmp
回復

使用道具 舉報

7#
ID:824490 發表于 2022-2-10 19:04 | 只看該作者
只是書寫時看上去效率低,實際運行效率可能并不低。你試試轉譯成匯編對比一下。
回復

使用道具 舉報

8#
ID:624769 發表于 2022-2-10 19:35 來自手機 | 只看該作者
很多人的通病,總以為看上去復雜,效率低,殊不知,往往看上去很簡單的,其實反而效率是極低的。一個是程序員容易看,一個是單片機容易執行,你更看重哪個?
回復

使用道具 舉報

9#
ID:625730 發表于 2022-2-10 22:02 | 只看該作者
a2966124 發表于 2022-2-10 17:02
比如我拆開了,吧AA111BB222存在了數組a里面,那我不是還是要比對if(a[0]==A&&a[1]==A)嗎?如果這個AA有 ...

首先報文要收全,然后再根據報文定義去解析,如果每一部分是多個字符的字符串,就先分解成字符串,然后再去比較,不一定要按一個個數組單元去比較,那樣比較費神、費眼。
回復

使用道具 舉報

10#
ID:311903 發表于 2022-2-11 08:30 | 只看該作者
a2966124 發表于 2022-2-10 17:02
比如我拆開了,吧AA111BB222存在了數組a里面,那我不是還是要比對if(a[0]==A&&a[1]==A)嗎?如果這個AA有 ...

如果是固定的,設計一個結構體啊,例如,
struct _demo{
   char cmd_1[3];  //AA
   char data_1[4];  //111
   char cmd_2[3];  //BB
   char data_2[4];  //222
}
后面判斷字符串用 strcmp之類的標準函數就可以了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精品久久国产精品 | 欧美操操操 | 精品欧美一区二区中文字幕视频 | 免费一区二区 | 黑人巨大精品欧美一区二区免费 | 国产成人精品免费视频大全最热 | 韩国毛片一区二区三区 | 国产精品亚洲视频 | 亚洲一区二区三区视频 | 日日摸夜夜添夜夜添特色大片 | 麻豆av网站 | 欧美日韩一区二区在线 | 国产精品欧美一区二区三区 | 亚洲协和影视 | 日韩成人精品在线观看 | 激情欧美日韩一区二区 | 99爱在线观看 | 中文字幕精品视频 | 日韩久久中文字幕 | 中文字幕在线电影观看 | 欧美精品1区2区3区 免费黄篇 | 天堂av资源 | 免费看黄色小视频 | 精品日韩在线 | 一级毛片视频 | 羞羞涩涩在线观看 | 成人av一区二区亚洲精 | 久久久性| 免费视频一区 | 自拍视频国产 | 中文字幕伊人 | 日韩一区二区三区视频在线播放 | 精品一区二区久久久久久久网精 | 亚洲精品免费在线观看 | 91素人| 日韩精品在线播放 | 国产一二三视频在线观看 | 免费观看成人性生生活片 | 欧美日韩亚洲二区 | 在线国产一区二区 | 中文字幕在线三区 |