国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

為嵌入式應用構建黑盒子

發布時間:2010-8-31 10:24    發布者:techshare
有人認為要是您在凌晨三點最終發現了困擾您多日可又一直找不到的程序錯誤,那真是再沒有比這更高興的編程經歷了。請注意,我們的開心源于找到了漏洞,而不是解決問題。這是因為您一旦真正了解了為什么會存在程序錯誤,那么糾正錯誤就是一件小事了。如果您過去用了錯誤的方法,那么現在就要用正確方法;如果您的輸入有誤,現在就可以進行整理;如果您假定系統有錯誤,那么就改正它,并認真在整個代碼中進行相應修改。

當然,當英雄的時候很風光,不過找程序錯誤并不是程序員真正的滿意源。請設想您要在花園中挖一道溝,并在其中鋪設噴水裝置管線。如果您遇到一塊石頭擋住去路,那么我們可在石頭四周挖土,讓石頭松動移位,這就解決了問題。如果石頭太大,那么重新設計布局也很有意思,這樣您就可以完全避開石頭。不過移開石頭的快樂并不是挖溝的目的所在。在認真想想,您的目的其實也不是安裝噴水裝置。您的目標是為您自己或為了讓您的配偶高興而建設美麗的花園。

編程的情況與之類似。實時系統故障排除的過程可能遇到很困難的程序錯誤。經驗豐富的程序員知道不會有太多工具幫忙找到并了解程序錯誤。不幸的是,隨著系統變得越發復雜,傳統的故障排除工具不再像其過去那樣有效。我們不妨設想開發實時視頻處理設備(如攝像機)的情況。即便您采購到速度足夠快的邏輯分析器,具備足夠的通道來觀察媒體處理器,但由于大部分重要工作都發生在專用引擎和內部高速緩存及存儲器中,您還是難以對其進行跟蹤。您對處理器的可視程度是有限的。即便您為處理器找到了電路仿真器 (ICE),但要想在攝像機等小型便攜式設備中安放探針插件仍是不可能的。

上述所有原因解釋了許多處理器廠商已經開始在芯片上直接集成調試功能的原因。您可利用原型規劃出您的設計,這樣您就可以訪問設備的各種組件;但是,仍會有一系列實時問題存在--也就是那些您的客戶會遇到而您在實驗室中又難以再現的問題,您只能在生產設備中才能進行觀察。

在JTAG 基礎上工作

集成調試外設已經推出一段時間了。舉例來說,JTAG 仿真為觀察處理器的內部實現了偽實時可視性,這就使開發人員能夠讀寫存儲器或寄存器,抑或控制/監控處理器的執行。但是,JTAG 的主要問題在于,它是用正在被測試的處理器進行上述操作的。即便像察看寄存器集或單個存儲器地址這樣的簡單操作也會影響認真優化過的管道流程,感染緩存,破壞脆弱的實時定時,屏蔽甚至模擬錯誤,這就會大幅改變處理器的執行。

新系列處理器提供了更先進的調試外設,可為處理器內部進行的核心操作提供更高的可視性,從而增強了 JTAG 功能。外設不再需要接受測試的內核來執行額外的工作,而是自己與內核并行執行,通常可以訪問全部系統寄存器、存儲器,甚至可以控制處理器自身的執行。這樣,我們就在不打擾操作的情況下獲得了深入內核的可視性,乃至能夠監控代碼高度優化過的部分。

毫無疑問,軟件開發人員最可怕的噩夢就是不斷出現程序錯誤。不管出于何種原因,只要客戶使用就出問題,但在實驗室中卻無法重復問題。開發人員常常甚至不能進行事后的調查分析重建崩潰情況,因為存儲器內容已經刪除,數據也被破壞。開發人員切實需要的是類似飛機上安裝的"黑盒子",它能夠在崩潰后幸存下來,記錄下所有所需數據,并將時鐘撥回原來位置。隨著調試外設的最新發展,這種黑盒子現在已經成為可能。

一些實現黑盒子常見的調試外設可做到實時數據交換、復雜觸發、多處理器支持、時間關鍵性中斷屏蔽、自動跟蹤等,并具備能夠準確而細致地重建設備任何時間點狀態的工具。

實時數據交換

一個簡單而非常實用的工具就是能夠讀取或寫入存儲器,同時又不會導致被測試的處理器停止或中斷其操作。在您放置斷點時,是用斷點操作碼替代一個代碼字節。斷點很復雜時,不具干擾性的存儲器存取非常有用;如果您希望在中斷前執行x次代碼,或者特定的變量為具體值或在某一范圍內(監視點)時,那么這就非常有用了。如果處理器必須停下操作才能進行每次比較,那么不僅執行每次比較要占用循環,而且比較本身也會影響指令和存儲器緩存。如果斷點在一個時間關鍵性的優化環路中,那么其造成的緩存效率低下就會導致代碼無法滿足實時期限的要求,而這也正是它與有效代碼的差距所在。如果監視點和其他系統組件爭用存儲器總線的話,那么就會造成更大干擾。

無干擾性存儲器存取可實現更高效的斷點。不用斷點操作碼,而是由調試外設來監控程序計數器并與處理器并行執行比較,同時不致影響緩存或程序定時。使用斷點操作碼的另一問題是指令緩存反映的是斷點操作碼而不是被替代的字節。當您恢復執行您同斷點操作碼所交換的字節時,整個緩存會因此而失效。由于監視點在寄存器或內部存儲器上,調試外設會等待存儲器總線再次變得可用,抑或也可具備其自己的專用總線。在上述兩種情況中,外設都不會與測試中的系統發生競爭。

還要考慮采用反選監視點的情況。假設本地變量破壞的情況。我們設置標準監視點在每次變量修改時觸發中斷,這就讓您必須察看所有有效的修改才能找到導致錯誤的因素。如果反選監視點,也就是說只跟蹤或觸發發生在代碼功能外的修改,那么您就能大幅減少必須親自評估的修改數量,這就提高了您找到出錯修改的速度。

實時數據交換對于微調算法也是非常實用的。舉例來說,根據特定的一組揚聲器調節音頻算法,或根據圖像傳感器調節視頻算法,這比重新編譯代碼并重新下載要節約大量時間。您還可以手動破壞數據流或代碼,抑或用已知有問題的值預先載入寄存器和存儲器啟動會話,從而測試代碼的穩健性。舉例而言,在視頻應用中,您可以破壞一段進入的視頻流,看看編碼器解碼器如何應付違反預計格式的數據。同時改變大塊數據直接而方便:將數據分組成單個對象中,由指針引用,改變對象的臨時實例,隨后改變指針,以剛輸入的數據引用臨時實例。

共同工作

隨著處理器變得日益復雜,多處理器調試支持變得更為重要。舉例而言,攝影機需要進行實時編碼。這是挑戰性很高的任務,可能要求處理器具備雙內核或混合 DSP + RISC 的結合,將圖像從控制/應用處理中劃分出來。

但是,如果您將幾個處理器或單個處理器與多個加速器或片上引擎相集成,那么調試本身就會變得更為困難。在雙內核實施中,大多數調試工具在顯示寫入特定存儲器位置的內容時不會指明具體核心。調試外設使您能夠監控總線,使之像存儲器一樣共享資源,并為您提供明確執行寫入的處理器所需的資源。您應注意到,這種情況下,可視性增強也會加大復雜性,因此您需要能夠為每個處理器交叉各個追蹤緩沖區的調試環境。

支持總線監控的多處理器設備很可能也支持全局斷點。標準斷點機制只能在幾個周期的等待時間后停止其他處理器。這使處理器彼此不同步,因為每個處理器都執行不同數量的周期,結果就好像周期是在不同時間運行的一樣。任何處理器間的通信都會使斷點進一步復雜化,特別是在兩個處理器都傳輸數據的情況下更是如此;如果數據發送但并未接受,那么您可能不知不覺地丟失事務處理的一部分。如果不同步,那么您需要重設并重啟兩個處理器以及應用,以返回同步。如果程序錯誤的原因較復雜,那么您可能會發現很難成功進行斷點,即便您知道造成錯誤的條件組合也一樣無濟于事。全局斷點停止所有處理器和相同循環上的引擎,從而避免上述困難,這就保持了其相對位置。

現實編程

最難以重建并定位的程序錯誤是實時出現的錯誤。即便您停止了處理器,現實情況還會繼續,這樣就會出現問題。舉例來說,您操縱馬達工作(比如照相機的鏡頭縮放)或者通過網絡連接傳輸數據,即便您僅是短時間地停止處理器,您也會丟失數據包的一部份,如果不停止系統的話,您就會丟失數據。即便您不擔心數據本身,比如在有持續的視頻源情況下,您仍然會丟失數據流中的部分。恢復執行時,如果應用不停止流處理等待再同步,那么視頻流會被破壞并且發生錯亂。

就馬達而言,即便您停止處理器,驅動運動的電壓也都會繼續。數據損失與機械盲點截然不同。您通常可以重新發送數據,但沒有監控運行的馬達可能導致機型故障甚至損壞。舉例來說,某些攝影機帶有自動打開的鏡頭,只要鏡頭蓋推向一邊就會啟動。如果您在處理器停止時無意中關閉了鏡頭蓋,那么您就可能在恢復操作時導致鏡頭損壞。如果您在快門打開開始采集影像時無意停止了處理器,那么就會導致快門鎖定打開。如果您沒有關閉快門的自動機制,那么就會致使影像傳感器過度曝光而在無意中遭到損壞。

管理和控制機械組件有兩種基本方法:通過軟件或通過硬件中斷。例如,我們可用定期中斷來管理馬達控制縮放。每次觸發中斷時,處理器都會評估鏡頭的位置,確定馬達相對于其應處目的地的位置,并據此調節驅動電壓。馬達在電壓調節前不斷運動。不過,這種方法的問題在于,如果您在縮放時停止了處理器,那么馬達還會繼續運動,這就可能導致馬達損壞。

硬件中斷的一個實例是在數碼相機上設置打開/關閉機制。您不會希望用戶能夠立即關閉電源,因為照相機可能仍處在處理影像當中,還不能存儲影像到非易失介質。當用戶關閉照相機時,這會觸發硬件中斷,告訴照相機關閉。不過,如果您停止了處理器并嘗試關閉照相機以節約電池電量,那么照相機還會保持打開,因為它還不能為中斷提供服務。不妨設想這樣的情況,您坐在電腦前準備從照相機傳輸影像。這時您突然要離開,就關閉了照相機。您回來時則發現電池已經沒電了,所有數據全部丟失。

因此,我們可以看到,即便處理器已經停止,但還是存在時間關鍵性事件以及需要中斷處理繼續進行的情況。如果您就可靠硬件進行調試,那么通常就要處理該問題;換言之,如果您對硬件完全有信心并致力于應用問題時,就要處理上述問題。您確實只需停止系統的一部分。您希望機械作用在一定程度上繼續進行,或許也希望網絡和通信功能繼續進行。如果您停止應用時不能讓上述事件繼續,那么您在調試系統、避免干擾實施部分工作時就有大量事情要做了。

停止的其他名稱

正因為上述原因,目前處理器已開始支持時間關鍵性中斷掩碼。中斷掩碼標識出即便在處理器停止時仍需要繼續接受服務的中斷。調節掩碼的功能相當重要,因為您可能需要停止某些基于具體應用的硬件定時器中斷。因此,您并不受限于通用停止,而是可以很大程度上控制停止。請注意,"停止"這個詞有了全新的含義,因為掩碼時間關鍵性中斷觸發時,處理器開始執行適當的中斷代碼。舉例而言,您會屏蔽處理網絡連接的中斷。盡管處理器停止了,但它仍會為通過網絡連接的數據提供緩沖。

這又是一個調試變得更為復雜的實例。某些中斷與定時器類似,執行后會自我重設,這樣它們就能再次觸發。就中斷監控馬達而言,這是我們所希望的行動。馬達由于運動而處于可能面臨風險的位置;不過,中斷再次觸發就可將馬達帶回其目的地從而避免風險。

不過,就調度程序中斷而言,重設意味著調度程序將繼續嘗試處理隊列中的下一個任務。如果已經計劃安排了一系列運動--您打開照相機蓋時,程序會設置一系列運動并伸出鏡頭--調度將持續進行,保證每個任務依次進行。此外,您除了關心完成當前任務之外,還希望清空整個任務隊列。更現實地說,您可能希望根據任務將以上兩項工作都完成。如果僅將一系列運動的一部分放在隊列上,那么最后放置的任務實際上會使設備面臨風險(如照相機快門打開)。

您如何處理上述問題取決于任務的粒度。如果您有高級別任務,如"打開鏡頭",那么上述任務結束后可能不致使設備面臨風險。不過,如果您的任務粒度更強,那么在描述所有執行高級別任務所需的初始步驟并完成目前的低級別任務情況下,您的系統可能就會面臨風險。

關鍵在于不要讓設備面臨風險,而是要繼續執行任務,直到設備脫離風險為止(圖)。在本例中,您的調度程序必須清楚它可在應用停止時繼續執行。由于時間關鍵性中斷掩碼是系統寄存器,因此您可在應用內對其進行存取,這就使您能夠根據其狀態有條件地進行操作,并使您有機會隨時啟用或禁用各種時間關鍵性中斷。當確定如何進行下一個任務時,管理器必須檢查以確保處理器是停止的,并確定系統目前是否面臨風險。如果是的話,調度程序應執行下一個任務。如果否的話,調度程序可以選擇停止。如果隊列為空而系統面臨風險,那么調度程序必須生成一個任務,保證讓系統脫離風險。此外,如要取消其生成的額外任務,那么調度程序必須將系統恢復到面臨風險的狀態。

請注意,如果特殊中斷(如將系統帶回斷電等已知安全狀態的中斷)依賴于應用代碼的話,那么它們可能需要額外的修改。舉例而言,我們照相機的打開/關閉按鈕要求應用完成對當前已緩沖影像的處理。如果應用停止,那么處理就不能完成。中斷實際上需要將處理器帶出停止狀態,從而讓系統脫離面臨風險的狀態。

盡管時間關鍵性中斷增加了系統設計的復雜性,但其也簡化了某些類型的調試。假設您對應用很有信心,但需要調試與硬件相關的問題。一般說來,控制實際操作所需的代碼量較小,至少與影像處理所需的代碼相比如此。一個 50MHz 的處理器每秒可執行五千萬個循環。舉例來說,如果機械操作用兩秒時間,那么您必須在 1 億個周期的線跡緩沖中找到您需要的代碼。不過,您也可以停止處理器,用屏蔽的時間關鍵性中斷來操作硬件。這時,您的線跡緩沖就沒有應用代碼了,這就使查找程序錯誤簡單得多。當然,這種方法不會暴露硬件和應用互動造成的錯誤。

自我啟發

另一類調試外設是自跟蹤處理器的外設。許多數據都可不經處理器處理。上述外設可過濾、壓縮或評估數據,這樣您就可通過有限的帶寬總線(如 JTAG)發送更多的信息。

自跟蹤外設的一個實例是不連續跟蹤。它不是跟蹤每個指令的指令指針值,而是僅在 IP 由分支等改變時跟蹤。迭代數量可用環路計算,這就可更深入地了解執行路徑。跟蹤總的運動使您能夠致力于線跡上的其他類型信息。

不連續跟蹤可快速顯示您的程序開始在代碼外執行的點。您還可用線跡作為描述器,這就給出通路和支路之比,可用作條件或整體程序執行。

黑盒子

調試外設的演進自然使您獲得"黑盒子"設計。利用完整的線跡和修改功能,我們可以創建線跡緩沖,幫助您了解系統在執行任何一點上的狀態。如果您在停止系統時全面了解了系統的整個狀態,那么您可利用線跡來正確重建以前的狀態。這一功能正好像您可在調試環境中無數次點擊"取消按鈕"一樣。

換言之,目前的處理器有著內置的黑盒子。主要限制在于跟蹤存儲。新型硬件工具提供了較大乃至無限的緩沖(如果附加硬盤的話)以在芯片外存儲線跡緩沖,從而解決了這一問題。如果芯片外總線帶寬足以發送您重建處理器任何時間狀態所需的所有信息,那么您就擁有了黑盒子。

不妨設想這樣的情況,客戶系統總是不斷崩潰,而且好像沒辦法重建崩潰。您可給系統添加跟蹤存儲工具,啟用黑盒子。系統崩潰時,會告訴存儲工具停止記錄(如果系統不能自動做到這一點,您可通過按鍵進行)。隨后客戶給您打電話,您收取存儲工具。這樣您就得到了所需要的東西:故障的記錄實例。您現在就可以致力于找到不斷發生的問題并解決問題了,而不必再為重建問題而花費數周時間。
本文地址:http://m.qingdxww.cn/thread-24792-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲色网站| 日本亚洲成高清一区二区三区 | 视频一本大道香蕉久在线播放 | 免费一级特黄 | 五月天福利 | 香蕉网站视频高清在线观看 | 亚洲日韩精品欧美一区二区 | 视频一区国产 | 亚洲国产天堂久久综合图区 | 青青国产成人久久91网站站 | 97精品国产自在现线免费观看 | 欧美在线视屏 | 交在线观看网站视频 | 色视频网站在线观看 | 天美传媒无忧传媒果冻传媒 | 欧洲性大片xxxxx久久久 | 国产va视频| 日日摸夜夜爽 | 91精品国产91久久 | 国语自产精品视频在线区 | 亚洲欧洲日产国码一级毛片 | 一级黄色在线视频 | 日本高清色本在线www游戏 | 朋友的妻子免费观看 | 欧美黑人粗硬大在线看 | 神马我不卡 | 欧美影院在线 | 九色免费视频 | 一级毛片免费一级直接观看 | 天天天天色 | 亚洲天天在线 | 456亚洲人成影视在线观看 | 日本免费黄网站 | 97在线观看 | 欧美一区二区不卡视频 | 色婷婷亚洲综合 | 国产亚洲综合精品一区二区三区 | 花季传媒v3.037 | 精品久久久久久 | 丁香婷婷网 | 日本一区欧美 |