<output id="yn1pw"></output>
    <wbr id="yn1pw"></wbr>

    <form id="yn1pw"><legend id="yn1pw"></legend></form>

  1. 更多課程 選擇中心

    嵌入式培訓
    達內IT學院

    400-111-8989

    嵌入式難點大總結

    • 發布:嵌入式培訓
    • 來源:嵌入式資訊
    • 時間:2019-10-17 15:55

    嵌入式培訓過程中,嵌入式系統開發很多人認為這是一個很難學好的IT行業。嵌入式系統開發包括主要有三大部分:硬件、底層軟件和應用軟件,硬件和底層軟件結合比較緊密,底層軟件和應用軟件又交互影響,嵌入式的硬件和軟件結合是比較緊密的。所以,在學習嵌入式過程中會出現一定的不理解,那么在嵌入式培訓與學習過程中的難點是什么呢? 達內講師為你攻破。

    1.事件順序。當處理事件時,提交下列問題會非常有成效:事件可以此有所不同的順序抵達嗎?假如我們沒接管到此事件會怎么樣?假如此事件相繼爆發兩次會怎么樣?只不過一般絕不會爆發,但是系統(或是相互作用裝置)其他部分的bug也許會造成事件爆發呢。

    2.時間過早:這是第一點“事件順序”的一個特例,但是它的確會引發一些問題,所以我將它單一拿出來解釋。比如,假如消息于安裝與啟動程序完工以前便遭提早接管,那麼也許便會有很多怪異的行為爆發。另一個例子:相連于遭放進空閑列表以前便遭標示作為down。于檢修這類問題時,我們常常假設于閑暇列表之中的時候相連遭設立作為down(但是當時為什么絕不將它放在列表里面呢?)。這是我們思維的缺乏,沒考量到有時事情會提早爆發。

    3.悄無聲息的故障:一些最為容易追蹤的bug有部分是改由那些靜靜失利并且拓展因而絕不是拋出正確的代碼所造成的。比如,沒檢查代碼反而回到正確的系統初始化(例如bind)。亦如:解析代碼于它碰到錯誤元素的時候只不過回到因而并非拋出錯誤。于正確狀態之中不斷了一段時間的調用,會使調試變得越來越容易。最為糟糕只要偵測到故障便回到錯誤。

    4.If:有若干條件的if語句,if &#40;a 或是 b&#41; ,尤其是當有鏈接的時候, if &#40;x&#41; else if &#40;y&#41;,均予我引起了很多bug。即便if語句于概念之上非常直觀,但是當有多個條件要追蹤的時候依然非常難錯誤。這些天,我嘗試并重寫代碼使之越來越直觀,以此防止處置簡單的if語句。

    5.Else:有一些bug是由于沒準確考量到假如條件作為false時會爆發什么因而引發的。基本上于所有的情況之下,均應當有一個else部分來應對于每一條if語句。除此之外,假如你于if語句的分支之中設立變量,那麼也許你于另一個分支之中亦要設立。和此種情況有關的是標示遭設立的情況。僅插入用作設立的標記的條件不難,不過非常難忘了添加如果標示應當再度移除時的條件。留下來一個我們設立的標志也許會造成后接連不斷的bug。

    6.變化假設:許多一起最為容易防治的bug是由于變化了假設所導致的。比如,于起時,也許每天僅有一個客戶事件。遂很多代碼是于這樣的假設之下寫下的。不過后來,設計師變化了,容許每天有多個客戶事件了。爆發這種情況時,非常容易變化全新設計師沖擊到的所有情況。看到有關變化的所有顯式依賴關系不難,容易的是要看到所有隱性局限在舊有的設計的情況。比如,也許會有賺取給定某一天所有客戶事件的代碼。其中的隱含假設是結論集我們絕不會少于客戶的數量。

    7.日志記錄:可視化程序做什么至關重要,尤其是如果邏輯非常簡單的時候。保證補足充足余的(但是你們甚余)日志記錄,這樣你便可解釋為什么程序要這么做。假如一切正常,那亦沒關系,但是假如有問題爆發,你會非常遺憾自己添加了這些日志。

    測試

    作為一個開發人員,直到要測試了我便會去處理功能。大約,這意味著每一行全新的或是改變了的代碼行大約已遭執行過一次。除此之外,單元測試與功能測試均非常不俗,但是也夠。全新的功能亦必需進行測試,并且于類似在產品的環境之中探索。只這樣,我便能說我完成了一個功能。上面是我經歷過的bug所教會我的有關測試的一些關鍵的經驗教訓:

    1.零與null:假如合理的話,確保常常使用零和null來測試。對字符串,這意味著要測試長度為零的字符串及字符串作為null兩種情況。亦如:測試TCP連接的斷開,要于發送數據予它發送以前。絕不使用這些組合方法測試是導致bug出現的首位原因。

    2.添加與刪除:一般,全新的功能包括能夠添加全新的配置到系統之中——例如,一個用于手機號碼轉換的全新的配置文件。測試它能否添加全新的配置文件是非常大自然的。不過,我發現我們非常難忘記去測試刪除配置文件是絕不是同樣ok。

    3.錯誤處理:處理錯誤的代碼常常是無法測試的。應該有能檢查錯誤處理代碼的自動測試,但是有時候這是絕不可能的。我有時候會使用的一招是臨時性修改代碼,使得錯誤處理代碼運行起來。要做到這一點最為直觀的方法是反轉if語句——例如,自if error_count &gt; 0改成error_count == 0。另一個例子是拼錯數據庫列名,進而導致期望的錯誤處理代碼運行。

    4.隨機輸入:一般,揭露bug測試的一種測試方法是使用概率輸入。例如,H.323協議的ASN.1解碼使用二進制數據操作。透過發送隨機字節去解碼,我們發現了解碼器之中的幾個bug。另一個例子是使用測試呼叫來生成腳本,此時呼叫持續時間,接聽延遲,第一方掛斷等等均是概率生成的。這些測試腳本會暴露許多bug,尤其是一同發生的事件會產生并攏干擾。

    5.檢查絕不應該發生的動作:一般測試包括檢查期望動作是絕不是發生了。但是我們非常難忽視相反的情況——忘記檢查絕不應該發生的動作是絕不是確實沒發生。

    6.擁有工具:我創建了自己的大工具,以此使得測試更為直觀。例如,如果我使用VoIP SIP協議工作時,我寫了一個能夠使用正是我想要的標題與值回復的大腳本。這個工具使得測試很多邊界情況變得難起來。另一個例子是可以進行API調用的一個命令行工具。透過啟動漸漸添加所需大功能,我得到了一些十分常用的工具。自己寫工具的好處是,我得到的正是我想要的。

    于測試之中發現所有的bug,那必然是絕不可能的。有一個案例之中,我越來越改了數字相關性的處理,數字改由兩個部分組成:路改由地址后綴(一般是絕不變的),及從000到999動態分配的數字。問題在于如果找到相關性時,動態分配的數字的第一個數字會于呈現于表格中以前遭到誤刪。也就是說637變成了37。這意味著,至100以前它均是可以工作的,所以,后面100個電話是穩定的,不過接下來的900個均是失敗。因此,如果我于再次啟動以前能夠測試超過100次(事實是我沒有),的話我于測試時便絕不會發現這個問題。

    調試

    1.討論。幫助我最為余的調試技術是和同事討論問題。一般情況之下,只不過與同事說明問題,便會讓我意識到問題的癥結。除此之外,即便他們絕不是非常熟悉有問題的代碼,他們亦常常能提出一些好點子。和同事討論于處理最為容易的bug時尤其精確。

    2.緊密關注。一般,假如調試問題花了非常短時間,常常是由于我做了正確的假設。例如,我認為問題發生于某一方法中,但是事實反而是它而且始終沒到達那個方法。或是,遭拋出的非常絕不是我以為的那個。或是,我認為軟件的全新版本上將要運行,但是實際上是一個舊有版本。所以,某種要核實細節,因而絕不是假設。人們越來越難看到自己希望看到的東西,因而絕不是事實。

    3.最近的變化。如果曾可以穩定工作的東西停止工作,那麼這一般是由于最近改變的東西所導致的。于一個案例之中,最近的改變僅是日志記錄,不過日志之中的錯誤反而導致了一個越來越小的問題。借以越來越難找到這種回歸,承認有所不同的提交會導致有所不同的變化,及明確說明這些變更會有所裨益。

    4.相信用戶。有時候,如果用戶報告問題的時候,我的本能反應是,“這是絕不可能的。某種是他們做錯了什么事”。但是我學會了不必使用這種方式去回應。越來越余的時間,事實常常證明,他們所報告的確實是具體發生的情況。所以,這些天,我開始接受他們所報告的內容的表明價值。或許,我依然會細心檢查一切是否遭準確地設置等等。我見過很多這樣的情況,讓我明白,由于絕不恰當的配置或是意料以外的用法因而導致不可思議的事情的發生,因而我默認的假設是,他們是準確的,程序是正確的。

    5.測試修復。假如bug修復已經準備就緒,那便必需進行測試。最先于修復后運行代碼,并且觀察該bug。接著應用修復并且重復測試案例。至此為止錯誤行為應消失。遵循這些步驟可以確保它的確是一個bug,并此次修復確實可以解決這個問題。直觀因而有適當。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:嵌入式開發需要學什么?嵌入式技術“大牛”告訴你!
    下一篇:2019年嵌入式就業形勢怎么樣

    單片機:寫1清零,寫0清零,有什么區別?

    嵌入式工程師一定不要亂用全局變量

    嵌入式培訓靠譜嗎?就業怎么樣?

    新手如何學習單片機?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    高清在线不卡一区二区_2019最新国产高清不卡a_亚洲欧洲日本aⅴ 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>