共用體與通信協(xié)議
經(jīng)常會(huì)遇到這種協(xié)議:

就是每一位代表一個(gè)狀態(tài),
比如:
接收的是0x01代表溫度故障,二進(jìn)制是 0000 0001
0x02代表濕度故障,二進(jìn)制是 0000 0010
0x03代表溫度/濕度都故障,二進(jìn)制是 0000 0011
.......

針對(duì)上面這種協(xié)議,可以利用共用體和位域編寫.
下面講解共用體,?位域的知識(shí):


例如:
union data
{
int i;
char ch;
float f;
}
上面的?i,ch,f都公用的一段內(nèi)存,如果改變其中的一個(gè),另外的兩個(gè)變量也會(huì)有相同的變化.


通過(guò)上面位域和公用體的講解,大致了解了這里的特性.
可以通過(guò)他們的特性,進(jìn)行協(xié)議的編寫.
比如:
先建立一個(gè)結(jié)構(gòu)體:(是利用了位域的)

然后再建立一個(gè)共用體

這樣all和bit兩個(gè)變量就被聯(lián)合在一起了.
也就是我給all賦值,然后bit就會(huì)有改變.
這樣我在接收到協(xié)議后,給all賦值,就直接可以去查看bit的相應(yīng)位,得到某個(gè)器件是否發(fā)生故障了.
標(biāo)簽: