1. gzyueqian
      13352868059

      嵌入式開(kāi)發(fā):創(chuàng)建和使用可移植類型的7個(gè)技巧

      更新時(shí)間: 2022-08-01 09:27:45來(lái)源: 粵嵌教育瀏覽量:7708

        對(duì)于嵌入式開(kāi)發(fā)人員來(lái)說(shuō),編寫(xiě)可重用、可移植且經(jīng)得起時(shí)間考驗(yàn)的軟件至關(guān)重要。下面是在C中創(chuàng)建和使用可移植類型的7個(gè)技巧。

        技巧1 – 使用stdint.h

        使用內(nèi)置數(shù)據(jù)類型會(huì)導(dǎo)致不同編譯器之間的可移植性問(wèn)題。C標(biāo)準(zhǔn)沒(méi)有指定整數(shù)的存儲(chǔ)大小,這導(dǎo)致一些編譯器供應(yīng)商使用2或4個(gè)字節(jié)來(lái)存儲(chǔ)整數(shù),結(jié)果可能是災(zāi)難性的。

        使用內(nèi)置數(shù)據(jù)類型的安全替代方法是使用stdint.h固定寬度整數(shù)。這些數(shù)據(jù)類型uint8_t、int8_t、uint16_t、int16_t、uint32_t和int32_t指定存儲(chǔ)數(shù)據(jù)所需的存儲(chǔ)位數(shù)。移植這些數(shù)據(jù)類型中的任何一種都會(huì)在任何編譯器中導(dǎo)致相同的行為,并且不會(huì)導(dǎo)致四個(gè)字節(jié)的存儲(chǔ)突然變成兩個(gè)字節(jié)。

        技巧2 – 使用stdbool.h

        開(kāi)發(fā)人員有時(shí)可能會(huì)決定他們想要一種可以存儲(chǔ)簡(jiǎn)單的真或假值的數(shù)據(jù)類型。通過(guò)包含stdbool.h,可以將標(biāo)準(zhǔn)布爾數(shù)據(jù)類型及其真或假定義引入到項(xiàng)目中。

        提示3 – 不要自定義定義 TRUE、FALSE、bool

        在上一個(gè)技巧中,推薦使用標(biāo)準(zhǔn)庫(kù)文件 stdbool.h。一些嵌入式開(kāi)發(fā)人員可能沒(méi)有意識(shí)到 stdbool 的存在,或者可能決定不使用它。相反,他們自定義定義 bool、true 和 false。這樣做的問(wèn)題是,當(dāng)移植具有自定義版本的代碼時(shí),可能會(huì)發(fā)生不匹配,即嘗試重新定義 true、false 和 bool 并且編譯器會(huì)抱怨。不要?jiǎng)?chuàng)建自己的版本,只需遵循技巧2。

        技巧4 – 遠(yuǎn)離自定義整數(shù)類型

        使用 typedef 創(chuàng)建簡(jiǎn)潔明了的類型名稱是編寫(xiě)嵌入式軟件的好方法。當(dāng)開(kāi)發(fā)人員開(kāi)始定義看起來(lái)非常接近標(biāo)準(zhǔn)整數(shù)類型的非標(biāo)準(zhǔn)整數(shù)類型時(shí),問(wèn)題就出現(xiàn)了。例如,取下面的自定義類型

        typedef volatile uint16_t vuint16_t;

        在軟件中看到 vuint16_t 會(huì)令人困惑。v是什么? 混淆 volatile 關(guān)鍵字可能很危險(xiǎn)! 不應(yīng)該強(qiáng)迫開(kāi)發(fā)人員編寫(xiě) volatile 以便閱讀代碼的開(kāi)發(fā)人員知道該變量是 volatile 嗎? 讀取 vuint16_t 很容易被誤讀為 uint16_t 或更糟糕的是,嵌入式開(kāi)發(fā)人員可能會(huì)意外鍵入 uint16_t 并完全錯(cuò)過(guò) v。

        堅(jiān)持使用標(biāo)準(zhǔn)類型,并在任何閱讀或維護(hù)代碼的人面前直接使用 volatile 等重要關(guān)鍵字。

        

        技巧5 – 自定義類型應(yīng)該有 _t

        定義自定義類型時(shí),使用 _t 來(lái)匹配固定寬度的整數(shù)類型,它簡(jiǎn)單明了。以以下為例;

        typedef enum

        {

        STATE_1,

        STATE_2

        }State_t;

        很明顯,State_t 是一個(gè) typedef。

        技巧6 – 使用枚舉自定義類型

        創(chuàng)建類似于技巧5中所示的自定義數(shù)據(jù)類型可以大大提高嵌入式軟件的可讀性和可維護(hù)性。在#define 定義上使用枚舉有很多優(yōu)點(diǎn)。enum 的使用易于維護(hù),移植(甚至到 C++)和 enum 將顯示在調(diào)試器監(jiān)視窗口中。對(duì)枚舉進(jìn)行類型定義的能力是 C 語(yǔ)言中非常強(qiáng)大的工具,因此請(qǐng)明智地使用它!

        技巧7 – 不要混淆底層類型

        使用 typedef 的危險(xiǎn)之一是很容易混淆底層類型。例如,如果新類型未正確命名,則結(jié)構(gòu)的 typedef 可以隱藏?cái)?shù)據(jù)是結(jié)構(gòu)的事實(shí)。嵌入式開(kāi)發(fā)人員應(yīng)該能夠閱讀和識(shí)別數(shù)據(jù)的底層類型,而無(wú)需搜索文檔或源代碼。回顧技巧4,用 v 掩蓋 volatile 是相同的想法,生成的數(shù)據(jù)類型需要以簡(jiǎn)潔明了的方式清楚地表明它所代表的內(nèi)容。

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲欧洲日本在线视频 | 日本综合久久久久久久久久久 | 在线播放十八禁视频无遮挡 | 日韩一区二区三免费高清 | 亚洲精品自在在线 | 一本一道久久a久久精品综合 |