1. gzyueqian
      13352868059

      嵌入式開(kāi)發(fā):嵌入式軟件編程的五個(gè)技巧

      更新時(shí)間: 2023-02-27 07:20:25來(lái)源: 粵嵌教育瀏覽量:8475


        大多數(shù)軟件開(kāi)發(fā)人員都接受過(guò)某種教育或培訓(xùn),其他人則是自學(xué)成才。但真正的編程學(xué)習(xí)是通過(guò)實(shí)踐經(jīng)驗(yàn)和知識(shí)交流。在編程過(guò)程中,他們會(huì)遇到有用的技術(shù),或者在代碼審查期間從同事那里獲得建議。即使是非常有經(jīng)驗(yàn)的程序員也會(huì)不時(shí)收到寶貴的提示。因此,傳遞自己的經(jīng)驗(yàn)是非常有價(jià)值的。本文給嵌入式開(kāi)發(fā)人員五個(gè)有用的建議:

        使用后將指針設(shè)置為NULL

        指針是語(yǔ)言中非常有用和強(qiáng)大的功能。但它們會(huì)導(dǎo)致錯(cuò)誤。一個(gè)常見(jiàn)的錯(cuò)誤是代碼使用的指針值無(wú)效。例如,如果它指的是一個(gè)已動(dòng)態(tài)分配但已被放棄的內(nèi)存。使用無(wú)效指針可能會(huì)產(chǎn)生負(fù)面影響,這種影響只有在長(zhǎng)時(shí)間后才會(huì)變得明顯,因此很難發(fā)現(xiàn)。如果在使用后常規(guī)地將指針設(shè)置為NULL,則稍后的錯(cuò)誤使用將導(dǎo)致立即發(fā)生錯(cuò)誤,很容易進(jìn)行本地化。

        程序員使用C中的“int”表示無(wú)符號(hào)數(shù)據(jù)

        在C語(yǔ)言中,int數(shù)據(jù)類型幾乎是標(biāo)準(zhǔn)的。事實(shí)上,在最初的語(yǔ)言定義中,它是函數(shù)的默認(rèn)返回?cái)?shù)據(jù)類型(應(yīng)該是無(wú)效的,但后來(lái)才出現(xiàn))。大多數(shù)C程序員傾向于選擇int作為變量,除非數(shù)據(jù)類型明顯不適合。他們真的應(yīng)該選擇無(wú)符號(hào),因?yàn)闊o(wú)符號(hào)的數(shù)據(jù)比有符號(hào)的數(shù)據(jù)多。最好仔細(xì)查看需要存儲(chǔ)的值范圍。它是未簽名還是已簽名?你需要8位、16位、32位或更多位嗎?令人驚訝的是,時(shí)間/日期計(jì)數(shù)器經(jīng)常被簽名,導(dǎo)致Y2K錯(cuò)誤。

        謹(jǐn)防過(guò)度完美

        軟件何時(shí)準(zhǔn)備就緒?顯而易見(jiàn)的答案是,如果它提供了所有指定的函數(shù)而沒(méi)有已知的錯(cuò)誤。有許多情況會(huì)危及完工:許多嵌入式開(kāi)發(fā)工程師都是完美主義者,他們總是看到事情,他們可以“改進(jìn)”自己的代碼。如果沒(méi)有盡可能多的關(guān)心和監(jiān)督,一個(gè)項(xiàng)目可能會(huì)在他們手中變得糟糕。另一種不太明顯的情況是,代碼是為特定目的或項(xiàng)目編寫的,然后在其他地方重復(fù)使用。“建立在經(jīng)驗(yàn)基礎(chǔ)上”非常容易。“并在重用之前改進(jìn)代碼。如果不小心,這將成為版本管理的噩夢(mèng)。

        

        事件標(biāo)志或信號(hào)是在RTOS上發(fā)送簡(jiǎn)單邏輯信息的最有效方式

        現(xiàn)代RTOS,就像我們自己的Nucleus RTOS一樣,包含多種功能。由于這樣的操作系統(tǒng)是可擴(kuò)展的,開(kāi)發(fā)人員可以選擇要使用的功能,而不會(huì)因?yàn)榇a大小而丟失未使用的功能。在任何多線程設(shè)計(jì)中,任務(wù)間通信都很重要。因此,應(yīng)提供各種功能,并應(yīng)仔細(xì)選擇。如果一個(gè)任務(wù)只需要為另一個(gè)任務(wù)標(biāo)記一個(gè)事件,那么最簡(jiǎn)單的通信方法——事件標(biāo)志或信號(hào)——可能是最有效的選擇。

        遞歸代碼看起來(lái)很優(yōu)雅,但很危險(xiǎn)

        許多數(shù)學(xué)過(guò)程可以用遞歸函數(shù)來(lái)描述,即用直接或間接調(diào)用自己的函數(shù)來(lái)描述。這可能是解決使用最少代碼的問(wèn)題的一種看似優(yōu)雅的方式。下面是一個(gè)簡(jiǎn)單的例子:

        void printbase(int number, int base)

        {

        if (number >= base)

        {

        printbase(number/base, base);

        }

        printf("%X", number%base);

        }

        你明白這段代碼的作用嗎?答案很可能是“不”。這也是應(yīng)該避免這種技術(shù)的原因之一。嵌入式開(kāi)發(fā)人員清楚代碼的含義對(duì)于進(jìn)一步的軟件維護(hù)至關(guān)重要。此外,遞歸函數(shù)非常密集地使用堆棧,這可能會(huì)使堆棧失控。堆棧溢出是非常細(xì)微的錯(cuò)誤,需要進(jìn)行本地化。


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

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

      
      

      1. 日本免费中文字幕在线视频 | 亚欧美在线免费观看 | 伊人网在线观看动态图 | 日本亚洲国产一区二区三区 | 青青国产视频久久 | 亚洲人成电影在线观看影院 |