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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式軟件減少調試時間的技巧

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:許慶偉 ? 2022-06-30 10:01 ? 次閱讀

工程師喜歡解決問題。當然,這就是我們的工作。但不如人愿的是,嵌入式軟件工程師最大的問題之一是我們自己制造了很多問題,然后花大量的時間來解決這些問題,最后使自己成為英雄(在調試上!)。有很多公司嵌入式軟件工程師把20 - 40%的時間花在調試上。值得慶幸的是,從團隊的角度可以做出很多潛在的改變,以減少他們花在調試上的時間,并將時間百分比壓縮到個位數(shù)。在本文中,我們將研究一些減少調試時間的技巧。

技巧1-測試驅動開發(fā)(TDD)

測試驅動開發(fā)是一種允許開發(fā)人員增量地構建他們的產品軟件,并依賴測試來規(guī)定他們編寫代碼的技術。例如,開發(fā)人員首先編寫一個測試用例,如果測試失敗,則編寫以通過測試為目的新代碼。然后重復這個過程。

傳統(tǒng)上來講,嵌入式軟件開發(fā)人員會在測試之前編寫整個軟件代碼模塊。 可能會在幾周內編寫數(shù)千行代碼。 當?shù)搅藴y試代碼的時候,如果發(fā)現(xiàn)它不起作用,問題在哪里? 只有天知道! 開發(fā)人員必須煞費苦心地回顧代碼并發(fā)現(xiàn)問題所在并修復它。 執(zhí)行此操作所需的時間可能相當長。

另一方面,對于使用TDD的開發(fā)人員來說,如果出現(xiàn)了錯誤并且在代碼中注入了bug,測試用例將立即告訴開發(fā)人員!由于是逐步編寫代碼的流程,所以更有可能確切地知道更改了程序的什么部分,并且能夠立即修復問題。TDD似乎需要更多的時間來驗證,但通過創(chuàng)建一系列的測試用例,可以在回歸測試中運行這些用例,以確保一切都按照預期工作。TDD功能實現(xiàn)了一石二鳥的目的:減少調試和自動化測試的時間。

技巧2-盡可能無機器依賴的開發(fā)

當一個項目開始時,幾乎每個嵌入式軟件開發(fā)人員的第一反應就是獲得一塊開發(fā)板然后開始編寫代碼。 但不如人愿的是,在許多情況下嵌入式軟件代碼并不是和對手之間產品的差異化因素,差別在于應用程序代碼。 雖然許多應用程序代碼最終需要與硬件交互,但許多模塊可以不依賴于主機器環(huán)境來進行開發(fā)。

實施無機器依賴的代碼開發(fā),為開發(fā)人員提供了許多減少每個調試周期所花費時間的機會。 例如,通常要為目標微控制器編寫和測試代碼,開發(fā)人員必須做以下工作:

1.交叉編譯代碼

2.啟動調試會話

3.通過 SWD 對設備進行編程

4.在目標機器上運行代碼

5.通過在目標機上運行來驗證代碼是否有效(同樣的必須擁有所有Low-Level代碼)

如果代碼是在主機上開發(fā)的,開發(fā)人員必須在主機上編譯代碼,然后使用單元測試工具、仿真器或自定義程序來運行正在開發(fā)的代碼。 如果發(fā)現(xiàn)問題,會更加快速的修復、重新編譯并重新開始測試。

在嵌入式板子上,僅對目標程序進行編程就會使每個周期增加幾十秒,更不用說單步執(zhí)行代碼了。

無機器依賴的開發(fā)/調試可能會產生特定的錯誤。從我現(xiàn)在寫了大約 75% 的相關代碼的例子上來看,發(fā)現(xiàn)會有速度更快、效率更高的效果。 我可以快速定位代碼中的問題,確定原因并修復它,然后繼續(xù)調試,而不是只能在嵌入式板子上跟蹤問題。 當然,有些問題會出現(xiàn)在主機上不會出現(xiàn)的板子環(huán)境上。

技巧3-掌握調試策略

我們已知效率最低的調試方法就是單步調試代碼。 但不要誤會我的意思,有具體的程序運行時間和發(fā)生位置,往往更加會造成很多時間上的浪費。 不幸的是,嵌入式軟件開發(fā)人員通常默認使用斷點和單步調試的方案。 為了更好地調試,開發(fā)人員還需要掌握現(xiàn)代微控制器上可用的其他調試策略。

目前至少有八種不同的調試技術可供開發(fā)人員使用。 這些技術從最簡單到最復雜的順序排列如下:

Watch / Expressions:為開發(fā)人員提供檢查 CPU 和外設寄存器的能力。它們通常可用于監(jiān)視變量、執(zhí)行計算或在更改時停止 CPU。

斷點:為開發(fā)人員提供在特定代碼行上停止 CPU 執(zhí)行的能力,高級斷點功能可用于設置條件語句的情況。

打?。簽殚_發(fā)人員提供將字符數(shù)據(jù)打印到映射的串行接口的能力,有一定概率會影響實時性能。

斷言:用于驗證程序中特定點假設的條件語句。斷言失敗通常會停止 CPU 并提供失敗斷言的文件和行位置。

統(tǒng)計分析:對在運行中應用程序中的各種寄存器進行定期采樣。 通常不會影響實時性能。 例如,您可能想要對程序計數(shù)器 (PC) 進行采樣以了解正在執(zhí)行的代碼模塊。

數(shù)據(jù)分析:對包含可變數(shù)據(jù)的各種內存位置進行定期采樣。當與實時可視化工具一起使用來監(jiān)控系統(tǒng)狀態(tài)、感興趣的變量變化等時,數(shù)據(jù)分析會非常有用。

任務和數(shù)據(jù)跟蹤:使開發(fā)人員能夠跟蹤實時操作系統(tǒng)應用程序中的事件。因此,開發(fā)人員可以深入了解應用程序性能、任務延遲、運行時間等等。

指令跟蹤:使開發(fā)人員能夠記錄在處理器上執(zhí)行的每條指令。這可用于了解測試期間的代碼覆蓋率、調試編譯器問題等。

掌握所有這些技術并知道何時使用它們,可以大大減少當異常發(fā)生進入系統(tǒng)時用于調試的時間。

結論

我們在開發(fā)階段可能會花費大量時間調試嵌入式軟件代碼。 有時調試時間是不可避免的; 但在許多情況下,開發(fā)人員可能會花費超出預期更多的時間。 我們已經探索了幾個您可以進一步調查的領域,以減少您和您的團隊花費在調試上的時間。 如果您在調試上花費超過整體軟件周期的20%時間,那么請在本周花一個小時時間確定您在以上哪些方面可以立即調整優(yōu)化,以控制花在調試上的時間。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2613

    瀏覽量

    47021
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    238

    瀏覽量

    26552
  • 驅動開發(fā)

    關注

    0

    文章

    130

    瀏覽量

    12036

原文標題:減少嵌入式軟件調試時間的三個技巧

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式軟件開發(fā)與AI整合

    嵌入式軟件開發(fā)與AI整合是當前技術發(fā)展的重要趨勢之一。隨著人工智能技術的快速發(fā)展,嵌入式系統(tǒng)越來越多地集成了AI算法,以實現(xiàn)更復雜的智能功能。以下是關于嵌入式
    的頭像 發(fā)表于 07-31 09:25 ?491次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開發(fā)與AI整合

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

    系統(tǒng)設計與調試:需要掌握嵌入式系統(tǒng)的設計方法和調試技術,包括硬件設計、軟件設計、電路調試等,以確保系統(tǒng)的穩(wěn)定性和可靠性。 隨著技術的不斷進
    發(fā)表于 07-02 10:10

    嵌入式軟件設計的原則分享

    嵌入式軟件開發(fā)如果具有更好的閱讀性、擴展性以及維護性,就需要考慮很多因素。今天給大家分享幾個嵌入式軟件設計的原則。
    發(fā)表于 02-25 10:54 ?502次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>設計的原則分享

    嵌入式軟件開發(fā)應該掌握哪些知識?

    知識點學習 熟悉 Linux 的基本使用對于嵌入式軟件開發(fā)至關重要。包括文件系統(tǒng)的管理、用戶權限的控制、軟件包管理等。嵌入式開發(fā)人員需要能夠在 Linux 環(huán)境下進行開發(fā)、
    發(fā)表于 02-19 11:23

    嵌入式學習步驟

    硬件組件。 (4).開發(fā)固件:編寫嵌入式系統(tǒng)的固件,這是嵌入式系統(tǒng)的軟件部分。固件負責控制硬件并執(zhí)行特定任務。 (5).調試和測試:在將嵌入式
    發(fā)表于 02-02 15:24

    嵌入式軟件開發(fā)和軟件開發(fā)的區(qū)別

    嵌入式軟件開發(fā)和軟件開發(fā)是兩個不同的概念,它們在一些關鍵方面有著明顯的區(qū)別。嵌入式軟件開發(fā)是指開發(fā)嵌入
    的頭像 發(fā)表于 01-22 15:27 ?1792次閱讀

    基于功能安全的汽車嵌入式軟件單元驗證技術研究

    ,對滿足功能安全ASIL等級的汽車嵌入式軟件單元驗證技術進行詳細介紹,從而提高軟件質量,減少軟件安全隱患,對汽車
    的頭像 發(fā)表于 01-07 11:27 ?861次閱讀
    基于功能安全的汽車<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>單元驗證技術研究

    聊聊嵌入式軟件分層

    今天以控制LED閃爍為例,聊聊嵌入式軟件分層
    的頭像 發(fā)表于 12-28 09:22 ?553次閱讀

    嵌入式軟件問題的分析與解決

    軟件問題的分析與解決 嵌入式軟件由于調試手段的限制、部署場景的多樣化、軟硬件問題混合在一起、外部環(huán)境因素的影響等因素,導致軟件經常會遇到一些
    的頭像 發(fā)表于 12-07 15:56 ?574次閱讀

    嵌入式硬件和軟件哪個好?

    嵌入式硬件和軟件哪個好? 嵌入式軟硬件工程師哪個更有前途呢?一起來看看。 嵌入式是分為軟硬件工程師的,首先我們先來看看嵌入式硬件工程師吧!
    發(fā)表于 12-05 15:17

    嵌入式開發(fā)為什么需要輸出調試信息?

    嵌入式開發(fā)為什么需要輸出調試信息? 因為輸出調試信息是嵌入式開發(fā)中一項非常重要的實踐,它有助于保證軟件的可靠性、穩(wěn)定性和性能,也是故障排查的
    發(fā)表于 11-28 16:46

    嵌入式軟件的開發(fā)流程

    電子發(fā)燒友網站提供《嵌入式軟件的開發(fā)流程.doc》資料免費下載
    發(fā)表于 11-17 14:39 ?0次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>的開發(fā)流程

    嵌入式軟件開發(fā)流程

    電子發(fā)燒友網站提供《嵌入式軟件開發(fā)流程.ppt》資料免費下載
    發(fā)表于 11-17 14:37 ?3次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開發(fā)流程

    嵌入式程序基于源代碼仿真調試

    前面一課設計了51單片機最小系統(tǒng)電路,使用51單片機的I/O口控制發(fā)光二極管的狀態(tài),并裝載運行了使用keil編寫的嵌入式程序。本次實驗應用proteus結合keil對嵌入式C程序進行源代碼級調試
    的頭像 發(fā)表于 11-01 09:24 ?937次閱讀
    <b class='flag-5'>嵌入式</b>程序基于源代碼仿真<b class='flag-5'>調試</b>

    嵌入式軟件不需要架構嗎?為什么沒有嵌入式軟件架構師?

    我的看法:目前國內的嵌入式開發(fā)主要分為嵌入式底層開發(fā)和嵌入式應用開發(fā),嵌入式的底層開發(fā)一般叫做驅動開發(fā),或者bsp開發(fā),有時也有稱之為linux內核開發(fā),名字聽著都很高大上的感覺。
    發(fā)表于 10-27 14:45 ?449次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>不需要架構嗎?為什么沒有<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>架構師?