面試題eembedded enineer1.什么是平衡二叉樹編寫一個刪除的程序_第1頁
面試題eembedded enineer1.什么是平衡二叉樹編寫一個刪除的程序_第2頁
面試題eembedded enineer1.什么是平衡二叉樹編寫一個刪除的程序_第3頁
面試題eembedded enineer1.什么是平衡二叉樹編寫一個刪除的程序_第4頁
面試題eembedded enineer1.什么是平衡二叉樹編寫一個刪除的程序_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

tasktask3:1(實際上可能更來講很重。很多前,一開發人為了對入有更的理解,向ace問了這樣的一個題我怎么能知道懂得我系統到干些什么? rale對這問題有吃驚,因在當時有人這問過,同時代嵌式開發人問的最的大都繞“怎么才能使程跑的更”、什么編器最”等膚淺的題。所以面對這不同尋卻異乎成問題,rae感欣喜回復他你的題很有深很成熟因為只不斷地深入理解才可能不斷提高水。并且rae為鼓勵這位著的程員,把0條于嵌入式軟件發測試秘訣告了他:重編譯代碼來消除bug,結果卻無濟于事。懶惰是因為他們習慣了使用printf調試最根本有效的調試方法。比如VxWorksTornaI提供的gdb就屬于這一種。printf對正常的代碼執行干擾比較大(一般printfCPU比較長的時間),需要慎重使用,最好設置打印開關來控制打印。ICE是用來仿真CPU的設備,它可以在不干擾運算器的正常運行情況下,實時的檢測CPU的內部工作情況。像桌面調試軟件所提供的:復雜的條件斷點、先進的實時、性能分析和端口分析這些功能,它也都能提供。ICE一般都有一個比較特殊的CPU,稱為外合(bond-out)CPU。這是一種被打開了封裝的CPU,并且通過特殊的連接,可以到CPU的內部信號,而這些信號,在CPU被封裝時,是沒法“看到”聯合使用時,ICEICE同樣有一些缺點:昂貴;不能全速工作;CPUCPU的,從另一個角度說,這些外合CPU也不大可的被新出的CPU所更換。JTAG(JointTestActionGroup)雖然它最初開IC和電路連接,但是這種串行接口擴展了用途,包括對調試的支持。ADBlackfinVisualDsp++JTAG調試。RM器是一程序,留在嵌系統RM中,通過行的或絡的連和運行在少量的存空間,不需其它任專的硬件。提供了下功能代碼、運行控制斷點、步步進以及觀、修改寄和內存。為RM器是操軟件CU下應用程,再次入RM器。.Data監視器[Data.OS監視器[OperatingSystem操作系統監視器可以顯示諸如任務切換、信號量收發、中斷等。一方面,這些監視器能夠為你呈現之間的關系和時間聯系;另一方面,還可以提供對信號量優先級反轉、死鎖可以用來測試CPU到底耗在那里。profiler工具可以讓你知道系統的瓶頸在那里、CPU可以找到內存使用的問題所在,比如內存、內存碎片、內存等問題。如果發現系.運行[Execution要用于測試代碼邏輯,可以在大量的中發現異常的那些。.GUI測試工具[GUI入響應時間進行的。GUI測試工具可以作為工具有開發環境中運試用例,其功能包括對操作的記錄和回放、抓取屏幕顯示供以后分析和比較、設置和管理測試過程(Rational公robotMercuryLoadrunner工具是杰出的代表)GUI,但常常可以對嵌入式設備進行插裝來運行GUI測試,雖然這種方式可能要求對被測代碼進行更本人曾經寫的流錄顯具在測會數流向和變上幫了忙幫公司到了幾u。內存問題危害很大,不容易排查,主要有三種類型:內存、內存碎片和內存。對于內存問題態度必須要明確,那就是早發現早“治療”。在軟件設計中,內存的“名氣”最程老手有時后也會遭遇內存問題。有測試過內存的朋友估計都有深刻地體驗,那就是內存問題一般隱藏很深,很難通過代碼閱讀來發現。有些內存甚至可能出現在中。有可能這本身是庫中的bug,也有可能是因為程序員沒有正確理解它們的接口說明文檔在很多時候,大多數的內存問題無法探測,但可能表現為隨機的故障。程序員們往往;這些工具通過查找沒有或重復使用的代碼塊、內存收集、庫等技術來發現內存泄該去測試內存的問題,做到防患于未然。由于動態內存管理的種種問題,在嵌入式應用中,很多公司干脆就禁用malloc/ 內存是內存使用最嚴重的結果,主要原因有數組越界、寫已經釋放的內存、指針計算錯誤、堆棧地址越界等等。這種內存造成系統故障是隨機的,而且很難查找,目總之,如果要使用內存管理單元的話,必須要,并嚴格遵守它們的使用規則,比如誰講到系統穩定性,人們地會想到實時性和速度,因為代碼效率對嵌入式系統來說太重要了。知道怎么優化代碼是每個嵌入式軟件開發人員必須具備的技能。就象子減肥一profile(性IDE都提供這種內置的工具)能夠記錄各種情況比如各個任務的CPU占用率、各個任務的優先級是否分配妥當、某個數據被拷貝了多少次、磁盤多少但是,profile工具在分析實時系統性能方面還是有不夠的地方。一方面,人們使用profile工具往往是在系統出現問題即CPUprofile工具本身對CPU占用較大,所以profile對這種情況很可能不起作用。根據Heisenberg效應,任何測試或多或少都會改變系統運行,這個對profiler同樣適用!總之,提高運行效率的前提是你必須要知道CPU*bug的碼,只他自己不要出這種代,否則一天同的其它可能同樣會肯定是有人不或草率。所以你在怨針那么找的時,你是想過是自尋?c編程指南》或《關于C的08“”》。 和捕捉問題根源,我們可以設計比較全面的錯誤代碼。怎么來做呢?盡可能對每個函數調用失敗作出處理,盡可能檢測每個參數輸入輸出的有效性包括指針以及檢測是否過多或過少地調用某個過程。錯誤能夠讓你知道你成很多塊,一塊一塊的找。對于模塊獨立的大型項目,使用方法往往是對付那些隱藏極bug的最后方法。如果問題的出現是間歇性的,我們有必要設法去重現它并記錄使其重現的去重現問題,那么我們就可以著手去問題。怎么呢?我們可以用#ifdef把一些可能和可以使用工具獲得函數調用的情況包括參數的傳遞;檢查內存是否以及堆棧溢出的問迷路時可以根據這些標記找到出路。對過去代碼的修改進行記錄對將來出現問題之后的調試很有幫助。假一天,你最近一次修改的程序跑了很久之后忽然死掉了,那么你這時的上次的修改呢?SCSVCS(ConcurrentVersionControl,CVSVCS的演化版本)checkin下來后和當前測試版本比較。比較的SCS/VCS/CVS自帶的diff工具或其它功能更強的比較工具,比如你怎么知道你的測試有多全面呢?覆蓋測試(coveragetesting)可以回答這個問題。覆蓋測試工具可以告訴你CPU20%到40%代碼沒有問題,而其余的可能存在bug。覆蓋工具有不同的測試級別,用戶可以根據自己deadcode,覆蓋工具還是可以為你一些潛在的問題,看下面的代碼:if(i>=0&&(almostAlwaysZero==0||(last=如果almostAlwaysZero0,last=i賦值語句就被跳過,這可能不是你所期望的。更糟糕的是你可能需要花費10-200倍的時間來找一個bug,而這個bug在開始的時候可能很容易就能找到。一個小bug可能讓你付出巨大的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論