1. gzyueqian
      13352868059

      嵌入式開(kāi)發(fā):了解可移植類型

      更新時(shí)間: 2022-08-12 10:07:14來(lái)源: 粵嵌教育瀏覽量:8726

        編寫(xiě)嵌入式軟件的一個(gè)獨(dú)特挑戰(zhàn)是,它要求嵌入式開(kāi)發(fā)人員不僅要理解硬件的微小細(xì)節(jié),還要理解他們用來(lái)激活硬件的編程語(yǔ)言。有時(shí)候,最簡(jiǎn)單的概念比人們想象的要復(fù)雜得多。在理解C語(yǔ)言中的基本變量類型時(shí)尤其如此。

        每個(gè)程序員都熟悉char、integer、long等常見(jiàn)的變量類型。許多編程語(yǔ)言都包含這些變量類型,但它們不一定代表不同語(yǔ)言之間相同的物理內(nèi)存空間。事實(shí)上,在C編程的嵌入式世界中,用于存儲(chǔ)整數(shù)的字節(jié)數(shù)會(huì)因編譯器和目標(biāo)平臺(tái)而異!任何新的開(kāi)發(fā)人員都可能認(rèn)為情況肯定不是這樣,但是看看圖1中三個(gè)不同嵌入式微控制器的實(shí)驗(yàn)結(jié)果。

        

        圖1–使用Sizeof()獲取存儲(chǔ)每種數(shù)據(jù)類型的字節(jié)數(shù)

        這不僅對(duì)軟件與內(nèi)存映射設(shè)備的接口方式有非常實(shí)際的影響,而且還會(huì)影響軟件中計(jì)算和其他功能的性能。這也使得幾乎不可能將代碼從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái),使編寫(xiě)可重用的代碼變得非常困難,但是,從ISO C99開(kāi)始,嵌入式開(kāi)發(fā)人員人員的可移植性問(wèn)題有了一個(gè)解決方案。

        ISO C99標(biāo)準(zhǔn)通過(guò)名為stdint.h的頭文件引入了可移植數(shù)據(jù)類型。該頭文件包含在編譯器中,創(chuàng)建固定寬度的數(shù)據(jù)類型。固定寬度數(shù)據(jù)類型確保8位變量是8位,16位變量是16位,以此類推。這確保了使用這些數(shù)據(jù)類型的C代碼在不同的平臺(tái)上具有相同的寬度!圖2顯示了一些常見(jiàn)的有符號(hào)和無(wú)符號(hào)整數(shù)值。

        

        圖2–常見(jiàn)的整數(shù)類型

        這些只是在stdint.h中定義的變量類型的幾個(gè)例子。強(qiáng)烈建議任何開(kāi)發(fā)人員花一些時(shí)間檢查此標(biāo)頭。有一些非常有用的宏可以用來(lái)獲得該數(shù)據(jù)類型可以存儲(chǔ)的最小值和最大值。這對(duì)于初始化變量和代碼中的邊界檢查都很有用。甚至還有int_fast8_t這樣的類型定義,它被定義為最快的8位有符號(hào)整數(shù)類型。甚至還有至少有一定寬度的類型的定義,比如uint_least16_t。

        如果你仍在使用內(nèi)置的編譯器變量類型char、int、long等,那么這是研究stdint.h并開(kāi)始編寫(xiě)代碼的大好時(shí)機(jī),你可以編寫(xiě)一次代碼,然后從此開(kāi)始移植。請(qǐng)記住,這個(gè)頭文件內(nèi)置在C99中,如果使用的編譯器不是C99或更高版本,可能需要構(gòu)建自己的stdint.h版本。從長(zhǎng)遠(yuǎn)來(lái)看,這絕對(duì)值得嵌入式開(kāi)發(fā)人員一試!

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

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

      
      

      1. 亚洲欧美日韩天堂一区二区 | 亚洲国产婷婷综合在线精品 | 中日韩视频在线观看一区二区三区不卡 | 日韩精品一区二区在线观看 | 亚州精品自在线拍视频播放 | 一本精品热在线视频 |