0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式系統(tǒng)開(kāi)發(fā)的注釋和調(diào)試代碼

星星科技指導(dǎo)員 ? 來(lái)源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Colin Walls ? 2022-07-01 09:39 ? 次閱讀

嵌入式系統(tǒng)開(kāi)發(fā)軟件需要時(shí)間——通常比最初預(yù)期的要多。

造成這種情況的一個(gè)原因是,雖然初始編碼可能進(jìn)展迅速,但調(diào)試周期似乎是無(wú)休止的。以后,代碼的維護(hù)是不可避免的,而且需要比預(yù)期更多的時(shí)間。這是因?yàn)樵趪L試修改之前準(zhǔn)確理解代碼的功能會(huì)產(chǎn)生開(kāi)銷。

這一觀察的結(jié)果是,應(yīng)高度重視代碼的可讀性。易于閱讀的代碼不太可能出現(xiàn)錯(cuò)誤,因此減少了調(diào)試時(shí)間。如果代碼易于理解,則更易于維護(hù)。因此,請(qǐng)始終牢記人類讀者——畢竟,它可能是你。(我聽(tīng)說(shuō)它建議你假設(shè)你的代碼未來(lái)的維護(hù)者是一個(gè)知道你家庭地址的精神病患者。)

代碼由兩部分組成:編譯器需要看到的東西(C 語(yǔ)句和聲明)和需要對(duì)編譯器隱藏的文本(主要是供人類讀者使用的)。隱藏的東西主要是:

文檔——代碼中的注釋

暫時(shí)刪除的代碼——調(diào)試過(guò)程中不可避免的一部分

調(diào)試/跟蹤代碼——可以根據(jù)需要打開(kāi)和關(guān)閉

有趣的是,如果您取出純粹為人類讀者閱讀的內(nèi)容(其中還包括使用有意義的標(biāo)識(shí)符和額外的空格,如換行符),結(jié)果是完全不可讀的代碼。一些軟件公司利用這一點(diǎn)來(lái)分發(fā)源代碼,同時(shí)保護(hù)他們的知識(shí)產(chǎn)權(quán)。

我將看看我們對(duì)編譯器隱藏的東西。

文檔

每個(gè)人都知道評(píng)論是個(gè)好主意,但我們都很懶惰。然而,這種努力是值得的。舊式/* 。.. */ C注釋還可以,但我覺(jué)得 C++ 行尾[ //。.. ]的變化更清晰。它們?nèi)匀恍枰⌒氖褂?。例如,像這樣的代碼:

并且不要使用標(biāo)簽。它們不是便攜式的。

臨時(shí)代碼刪除

在調(diào)試和測(cè)試代碼的過(guò)程中,能夠暫時(shí)“關(guān)閉”一段代碼通常很有用。許多程序員通過(guò)將/*放在開(kāi)頭,將*/放在結(jié)尾來(lái)“注釋掉”代碼以實(shí)現(xiàn)此結(jié)果。這是快速而骯臟的,但經(jīng)常無(wú)法達(dá)到所需的結(jié)果。許多編譯器不支持嵌套注釋,因此,如果代碼已經(jīng)被注釋,就會(huì)出現(xiàn)問(wèn)題??偟膩?lái)說(shuō),它容易出錯(cuò),應(yīng)該避免。

使用 C++ 風(fēng)格的//注釋符號(hào)——即,將//放在每行的開(kāi)頭——稍微好一點(diǎn),但應(yīng)用起來(lái)非常乏味,而且在刪除時(shí)也可能容易出錯(cuò)。

實(shí)現(xiàn)此結(jié)果的最佳方法是使用預(yù)處理器指令,因此:

poYBAGK-UJCAMQwNAABSx6SLl5E799.png

在任何情況下,“關(guān)閉”的代碼序列都不應(yīng)包含在任何正在考慮發(fā)布的代碼中。

調(diào)試/跟蹤代碼

另一種臨時(shí)代碼是為了便于在調(diào)試時(shí)輸出或記錄額外信息而包含的。盡管現(xiàn)代調(diào)試器和此類工具可能非常有效,但有時(shí)檢測(cè)代碼仍然是弄清楚到底發(fā)生了什么的最佳方式。現(xiàn)代開(kāi)發(fā)工具是如此之快,以至于重建以創(chuàng)建啟用調(diào)試的映像并不是一個(gè)嚴(yán)重的開(kāi)銷。

促進(jìn)這一點(diǎn)的常用方法是使用預(yù)處理器指令,因此:

poYBAGK-UJiAGl8JAAB058cer_Q934.png

因此,當(dāng)定義符號(hào)DEBUG_TRACE時(shí),將包含調(diào)試代碼。

一個(gè)稍微不同的方法是這樣編碼:

poYBAGK-UJ6AIHqOAABsiJtyfsA217.png

這個(gè)雙重否定看起來(lái)很笨拙,但是這個(gè)符號(hào)用于控制標(biāo)準(zhǔn)的assert()宏。程序員需要定義符號(hào)來(lái)抑制調(diào)試模式。我感謝 Michael Barr,他在嵌入式 C 編碼標(biāo)準(zhǔn)中提高了我對(duì)這種方法的認(rèn)識(shí)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5087

    文章

    19153

    瀏覽量

    306425
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2113

    瀏覽量

    73742
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1638

    瀏覽量

    49197
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何提高嵌入式代碼質(zhì)量?

    嵌入式代碼的質(zhì)量是至關(guān)重要的。本文將探討如何通過(guò)有效的開(kāi)發(fā)方法和工具來(lái)提高嵌入式代碼的質(zhì)量,以確保系統(tǒng)
    發(fā)表于 01-15 10:48

    嵌入式工程師常用的開(kāi)發(fā)工具有哪些?

    仿真器可以模擬復(fù)雜的微控制器和外設(shè),幫助工程師在早期階段進(jìn)行軟件開(kāi)發(fā)調(diào)試。這大大縮短了開(kāi)發(fā)周期,降低了開(kāi)發(fā)成本。 總之,嵌入式工程師需要
    發(fā)表于 12-20 15:29

    嵌入式系統(tǒng)開(kāi)發(fā)中的測(cè)試方法 嵌入式系統(tǒng)開(kāi)發(fā)與AI結(jié)合應(yīng)用

    嵌入式系統(tǒng)開(kāi)發(fā)中的測(cè)試方法 嵌入式系統(tǒng)開(kāi)發(fā)是一個(gè)復(fù)雜的過(guò)程,涉及到硬件和軟件的緊密結(jié)合。測(cè)試是確保系統(tǒng)可靠性和性能的關(guān)鍵步驟。以下是一些常用
    的頭像 發(fā)表于 12-09 10:22 ?457次閱讀

    嵌入式系統(tǒng)開(kāi)發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)開(kāi)發(fā)常見(jiàn)問(wèn)題解決

    嵌入式系統(tǒng)開(kāi)發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)是專為特定應(yīng)用設(shè)計(jì)的計(jì)算機(jī)系統(tǒng),它們通常嵌入在所控制的設(shè)備
    的頭像 發(fā)表于 12-09 09:38 ?349次閱讀

    嵌入式開(kāi)發(fā)常用軟件有哪些?

    查看源代碼,注釋文檔等非常方便,因?yàn)樗檎遥ㄎ?,彩色顯示等功能非常強(qiáng)大。開(kāi)發(fā)人員會(huì)當(dāng)成源代碼閱讀工具使用。 4.Keil uVision5 Keil 5 軟件是一款功能強(qiáng)大的
    發(fā)表于 09-09 15:22

    嵌入式linux開(kāi)發(fā)板怎么操作

    嵌入式Linux開(kāi)發(fā)板是一種基于Linux操作系統(tǒng)嵌入式系統(tǒng)開(kāi)發(fā)平臺(tái)。它通常包括一個(gè)處理器、內(nèi)存、存儲(chǔ)器、輸入/輸出接口等硬件組件,以及一
    的頭像 發(fā)表于 09-02 09:09 ?431次閱讀

    嵌入式linux開(kāi)發(fā)板芯片的工作原理

    嵌入式Linux開(kāi)發(fā)板是一種基于Linux操作系統(tǒng)嵌入式系統(tǒng)開(kāi)發(fā)平臺(tái),它廣泛應(yīng)用于工業(yè)控制、智能家居、智能交通、醫(yī)療設(shè)備等領(lǐng)域。
    的頭像 發(fā)表于 09-02 09:07 ?426次閱讀

    恩智浦加速嵌入式AI創(chuàng)新應(yīng)用開(kāi)發(fā)

    在AI應(yīng)用飛速發(fā)展的今天,如何能夠?qū)I與嵌入式系統(tǒng)開(kāi)發(fā)有機(jī)結(jié)合起來(lái),營(yíng)造新的開(kāi)發(fā)生態(tài),打造與眾不同的創(chuàng)新用例,一直是嵌入式開(kāi)發(fā)者追求的目標(biāo)。
    的頭像 發(fā)表于 08-27 09:46 ?856次閱讀

    嵌入式系統(tǒng)怎么學(xué)?

    工具:熟悉常用的嵌入式系統(tǒng)開(kāi)發(fā)工具,包括集成開(kāi)發(fā)環(huán)境(IDE)、編譯器、調(diào)試器(如Keil、IAREmbedded Workbench、Eclipse)等。 5、實(shí)時(shí)操作
    發(fā)表于 07-02 10:10

    如何提升嵌入式編程能力?

    、SPI、CAN、WIFI、MQTT等多種通信協(xié)議。 4. 使用開(kāi)發(fā)工具:熟練掌握嵌入式開(kāi)發(fā)工具,如編譯器、調(diào)試器、仿真器和實(shí)時(shí)操作系統(tǒng)(RTOS)。 5. 閱讀數(shù)據(jù)手冊(cè):仔細(xì)閱讀你所
    發(fā)表于 06-21 10:01

    從事嵌入式方向,一定要軟硬件通吃?

    嵌入式系統(tǒng)開(kāi)發(fā)領(lǐng)域,軟件和硬件的界限常常模糊不清。一個(gè)常見(jiàn)的問(wèn)題是,嵌入式軟件工程師是否需要了解硬件。本文將探討這一問(wèn)題的重要性,并分析嵌入式軟件工程師掌握硬件知識(shí)對(duì)項(xiàng)目
    的頭像 發(fā)表于 06-05 08:10 ?1247次閱讀
    從事<b class='flag-5'>嵌入式</b>方向,一定要軟硬件通吃?

    再談嵌入式實(shí)時(shí)操作系統(tǒng)

    程序的可移植性得到了增強(qiáng),系統(tǒng)開(kāi)發(fā)的工作量減輕的同時(shí)也提高了開(kāi)發(fā)效率。對(duì)實(shí)時(shí)性和可靠性日益增長(zhǎng)的要求正在塑造某些現(xiàn)代領(lǐng)域的嵌入式實(shí)時(shí)操作系統(tǒng)的發(fā)展方向,例如航空航天、工業(yè)控制、汽車電子
    的頭像 發(fā)表于 04-09 17:27 ?827次閱讀
    再談<b class='flag-5'>嵌入式</b>實(shí)時(shí)操作<b class='flag-5'>系統(tǒng)</b>

    如何成為一名嵌入式C語(yǔ)言高手?

    如何成為一名嵌入式C語(yǔ)言高手? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域的核心,而C語(yǔ)言則是嵌入式系統(tǒng)開(kāi)發(fā)中最常用的編程語(yǔ)言之一。成為一名
    發(fā)表于 04-07 16:03

    ARM嵌入式Linux 系統(tǒng)開(kāi)發(fā)從入門(mén)到精通

    ARM嵌入式Linux 系統(tǒng)開(kāi)發(fā)從入門(mén)到精通
    發(fā)表于 03-10 18:44

    嵌入式工程師需要掌握哪些技術(shù)?

    Bluetooth、Wi-Fi和LoRa等的了解也是有益的。 5. 調(diào)試和故障排除能力:嵌入式系統(tǒng)開(kāi)發(fā)中經(jīng)常會(huì)遇到各種問(wèn)題和錯(cuò)誤。因此,具備良好的調(diào)試和故障排除能力是非常重要的。你需
    發(fā)表于 03-04 16:38