在嵌入式開(kāi)發(fā)中難免會(huì)涉及到非常多的標(biāo)志位處理,特別是玩單片機(jī)、裸機(jī)開(kāi)發(fā)的朋友,比如跟一些模塊配合聯(lián)調(diào)會(huì)遇到各種信號(hào)是否到位、成功等等狀態(tài),而這些信號(hào)大多都是bool類(lèi)型,1個(gè)bit即可進(jìn)行標(biāo)識(shí)。當(dāng)然如果僅僅是幾個(gè)標(biāo)志,直接拿個(gè)uint8_t的整形來(lái)進(jìn)行標(biāo)識(shí)也不會(huì)影響什么,但如果特別多的話(huà)似乎就比較廢RAM了。然而為了更好的管理這些標(biāo)志位等,有個(gè)如下幾種方式供大家更好的管理這些標(biāo)志位 :
1、位域直接標(biāo)識(shí)
采用位域是管理這些標(biāo)志位比較直接且方便的方式,代碼如下所示:
這些標(biāo)志位的操作無(wú)非就是置位,清零、以及讀取三種方式。
但如代碼中這樣的操作方式在語(yǔ)句或語(yǔ)義表達(dá)上還是不夠直觀。
bug菌經(jīng)常談到,代碼可以不寫(xiě)注釋?zhuān)贿^(guò)你的每個(gè)變量、函數(shù)名稱(chēng)等需要足夠的直觀,所以很多朋友習(xí)慣把這些標(biāo)志封裝起來(lái)。
2、枚舉+移位
為了更好的表達(dá)一般會(huì)對(duì)標(biāo)志位進(jìn)行進(jìn)一步的封裝,如下代碼所示:
當(dāng)然封裝成函數(shù)是相對(duì)比較耗時(shí)的,不過(guò)代碼也會(huì)更加的易懂,如果確實(shí)容忍不了函數(shù)封裝帶來(lái)的時(shí)間消耗,把函數(shù)修改為宏代碼片段或者內(nèi)斂函數(shù)(當(dāng)然前提是編譯器支持)也是可行的。
3、宏列表
或許這里才是本文的重中之重~
以前跟大家介紹過(guò),用宏自動(dòng)化的生成各種代碼片段,以使得代碼更加的緊湊。當(dāng)然可讀性會(huì)相對(duì)降低一點(diǎn),但對(duì)于重復(fù)性代碼就不需要太多考慮了。
如果以前有過(guò)類(lèi)似代碼處理的朋友,應(yīng)該看這段代碼還是比較輕松的吧,如果有點(diǎn)生疏,可以一層一層展開(kāi)了解。
其主要的功能就是通過(guò)宏替換和代碼拼接符號(hào),自動(dòng)的生成通用的代碼片段,這樣做的好處就是不再需要我們?cè)诖a中定義一大堆setflag、clrflag、getflag等函數(shù)。
通過(guò)上面的代碼當(dāng)我們向TAGLIST宏中添加一個(gè)標(biāo)識(shí)符,即可生成一系列相關(guān)的操作函數(shù)等。
這樣一方面可以及簡(jiǎn)化代碼,同時(shí)也避免一些人工編碼帶來(lái)的錯(cuò)誤。
審核編輯:劉清
-
單片機(jī)
+關(guān)注
關(guān)注
6042文章
44617瀏覽量
637481 -
RAM
+關(guān)注
關(guān)注
8文章
1369瀏覽量
114880 -
嵌入式開(kāi)發(fā)
+關(guān)注
關(guān)注
18文章
1035瀏覽量
47655 -
裸機(jī)
+關(guān)注
關(guān)注
0文章
39瀏覽量
6415
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論