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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2822|回復(fù): 9
收起左側(cè)

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

[復(fù)制鏈接]
ID:333483 發(fā)表于 2022-2-10 15:52 | 顯示全部樓層 |閱讀模式
比如一個報文的格式為:$AA,111,BB,222,<$$>

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

我是這樣寫的
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'))       
    {
       執(zhí)行的操作...
    }                       
}


這樣感覺效率很低,一般這種情況應(yīng)該怎么設(shè)計程序。
回復(fù)

使用道具 舉報

ID:311903 發(fā)表于 2022-2-10 16:02 | 顯示全部樓層
$AA,111,BB,222,<$$>  建議 將這幀報文拆開,頭部為 $ ,收到頭部后,接下來是  14個字節(jié)的數(shù)據(jù)部分(AA,111,BB,222,),再接下來是 尾部 <$$> ,這樣為正常的一幀,然后再處理數(shù)據(jù)部分的內(nèi)容
回復(fù)

使用道具 舉報

ID:313048 發(fā)表于 2022-2-10 16:06 | 顯示全部樓層
如果長度格式都是一樣的,則可以直接用scanf進(jìn)行解析,前提是保證數(shù)據(jù)正確,不丟包等。
回復(fù)

使用道具 舉報

ID:333483 發(fā)表于 2022-2-10 17:02 | 顯示全部樓層
xws245925587 發(fā)表于 2022-2-10 16:02
$AA,111,BB,222,  建議 將這幀報文拆開,頭部為 $ ,收到頭部后,接下來是  14個字節(jié)的數(shù)據(jù)部分(AA,111,BB ...

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

使用道具 舉報

ID:879348 發(fā)表于 2022-2-10 17:27 | 顯示全部樓層
不用擔(dān)心效率,按照人腦思維習(xí)慣寫是最好的
回復(fù)

使用道具 舉報

ID:415064 發(fā)表于 2022-2-10 17:29 | 顯示全部樓層
memcmp
回復(fù)

使用道具 舉報

ID:824490 發(fā)表于 2022-2-10 19:04 | 顯示全部樓層
只是書寫時看上去效率低,實際運(yùn)行效率可能并不低。你試試轉(zhuǎn)譯成匯編對比一下。
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2022-2-10 19:35 來自觸屏版 | 顯示全部樓層
很多人的通病,總以為看上去復(fù)雜,效率低,殊不知,往往看上去很簡單的,其實反而效率是極低的。一個是程序員容易看,一個是單片機(jī)容易執(zhí)行,你更看重哪個?
回復(fù)

使用道具 舉報

ID:625730 發(fā)表于 2022-2-10 22:02 | 顯示全部樓層
a2966124 發(fā)表于 2022-2-10 17:02
比如我拆開了,吧AA111BB222存在了數(shù)組a里面,那我不是還是要比對if(a[0]==A&&a[1]==A)嗎?如果這個AA有 ...

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

使用道具 舉報

ID:311903 發(fā)表于 2022-2-11 08:30 | 顯示全部樓層
a2966124 發(fā)表于 2022-2-10 17:02
比如我拆開了,吧AA111BB222存在了數(shù)組a里面,那我不是還是要比對if(a[0]==A&&a[1]==A)嗎?如果這個AA有 ...

如果是固定的,設(shè)計一個結(jié)構(gòu)體啊,例如,
struct _demo{
   char cmd_1[3];  //AA
   char data_1[4];  //111
   char cmd_2[3];  //BB
   char data_2[4];  //222
}
后面判斷字符串用 strcmp之類的標(biāo)準(zhǔn)函數(shù)就可以了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区在线视频 | 日韩久久久久久 | 国产精品久久久久久久免费大片 | 国产区精品在线观看 | 欧美精品在欧美一区二区 | 欧美极品视频 | 国产视频在线一区二区 | 日韩一二三区视频 | 国产美女一区二区三区 | 欧美日韩在线一区二区 | 手机看黄av免费网址 | 亚洲va国产日韩欧美精品色婷婷 | 亚洲精品短视频 | 久久一二 | 视频一区 国产精品 | 欧美日一区 | av在线免费观看网站 | 久久久久久久久久性 | 日本精品久久久一区二区三区 | 美日韩中文字幕 | 国产精品美女久久久久久久久久久 | 久久国产精99精产国高潮 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 成人毛片在线观看 | 中文字幕在线一区 | 精品久久影院 | 久久99精品久久 | 精品久久电影 | 狠狠操狠狠干 | 91精品久久久久久久久久 | 国产精品高潮呻吟久久 | 亚洲成av| 成人精品一区二区三区中文字幕 | 影音先锋中文字幕在线观看 | 四虎最新 | 蜜桃视频在线观看免费视频网站www | 日本一本视频 | 精品福利一区二区三区 | 一级大片免费 | 浴室洗澡偷拍一区二区 | 欧美综合一区二区三区 |