在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式系統(tǒng)的除錯(cuò)策略

            嵌入式系統(tǒng)的除錯(cuò)策略

            作者: 時(shí)間:2013-01-22 來源:網(wǎng)絡(luò) 收藏

            除錯(cuò)的工作量,可望占了軟體專案工作量的一半以上。了解硬體除錯(cuò)功能以及它們所能解決的問題,是選擇正確的晶片、建立除錯(cuò)以及提高生產(chǎn)效率的關(guān)鍵。

            本文引用地址:http://www.biyoush.com/article/148126.htm

            很多人都相信臭蟲(bug)此一用詞起源于海軍少將 Grace Murray Hopper。但事實(shí)上,沒人知道這種用法的真正來源,它可能可以回溯到 Thomas A Edison,或甚至更早。美國海軍后備役軍官 Hopper 在 1945 年 9 月 9 日于哈佛大學(xué)對(duì) Mark II Aiken 繼電計(jì)算器( Relay Calculator)進(jìn)行測(cè)試時(shí),于短路的 Panel F #70 號(hào)繼電器處發(fā)現(xiàn)了一雙臭蟲。她把這只臭蟲拿掉后(就是對(duì)電腦進(jìn)行除臭蟲(debugging)),就解決了這臺(tái)機(jī)器不定時(shí)關(guān)機(jī)的故障(參考文獻(xiàn) 1)。雖然這個(gè)早期的例子指的是從硬體中去除臭蟲,但今天debugging這個(gè)詞是指發(fā)現(xiàn)一個(gè)程式的問題,并去掉缺陷代碼(defective code)的過程。這些問題包括任何與原始意向的差異,而去掉缺陷代碼的做法則遠(yuǎn)優(yōu)于增加糾正代碼(correction code)。理想情況下,在任何時(shí)間都可以獲得所有的特性(如系統(tǒng)的R流排與暫存器值),供監(jiān)控與修改。但隨著 IC 轉(zhuǎn)向 SoC,可存取性(accessibility)就變得更加困難了。

            對(duì)硬體除錯(cuò),是要盡可能地可以存取到系統(tǒng)內(nèi)部資源,這可以透過觀察系統(tǒng)的特性,如 CPU 狀態(tài)和 PC 值,或修改系統(tǒng)的參數(shù)。在嵌入式系統(tǒng)設(shè)計(jì)的早期可以用簡(jiǎn)單技術(shù)進(jìn)行除錯(cuò),如記錄(logging)與監(jiān)控,或者對(duì)多核心 SoC而言,可以采用最新開發(fā)的方法,如跟蹤、緩衡記憶體除錯(cuò)(cache debugging)和交叉觸發(fā)(cross-triggering)等。本文的重點(diǎn)不是在如何編寫代碼或?yàn)榇a除錯(cuò),而是描述現(xiàn)在可用的嵌入式硬體硅智財(cái)權(quán)(intellectual property ,IP),以及該 IP 能解決哪方面的除錯(cuò)問題。

            記錄與監(jiān)控

            最古老也是最常用的除錯(cuò)方法就是在代碼中增加一些列印敘述(print statement),它可以顯示軟體某個(gè)部分的執(zhí)行資訊,并提供暫存器和變數(shù)的實(shí)際值。這可能是一年級(jí)學(xué)生練習(xí)hello world的一種延續(xù),該程式會(huì)在熒幕上顯示這兩個(gè)詞,用于表示程式能夠運(yùn)行,以及執(zhí)行到了某個(gè)點(diǎn)。列印敘述(或 printf 語句)只是記錄的一種變型,它是用處理器將重要資訊寫入一個(gè)管道(pipe),作為外部跟蹤的過程。所使用的管道將視系統(tǒng)而訂,在 printf 情況下,管道是標(biāo)準(zhǔn)的輸出(熒幕),但它也可以是 UART、USB,甚至是通用 I/O。

            當(dāng)你需要用一種對(duì)程式設(shè)計(jì)工程師有意義的方式,組織各個(gè)部分資訊時(shí)(例如提供感測(cè)器資訊或狀態(tài)機(jī)的轉(zhuǎn)換),采用記錄的方法是很有價(jià)值的??梢杂糜涗浌ぞ邅矸治鲇涗浀馁Y訊,并產(chǎn)生一個(gè)后處理資料庫。必須小心使用記錄功能才能獲得高效率。例如,記錄資訊應(yīng)使用關(guān)鍵字開頭,如警告、錯(cuò)誤或除錯(cuò)等,并應(yīng)能識(shí)別出資訊的建立者。應(yīng)將記錄功能劃分為一小組檔案,以便于維護(hù),并提供時(shí)間戳資訊。不幸的是,記錄是一種侵入性的方法,它會(huì)修改軟體的即時(shí)狀態(tài),因而不同于最終應(yīng)用。

            除錯(cuò)監(jiān)控器是另一種常見的除錯(cuò)工具,它與運(yùn)行在 CPU 記憶體中的目標(biāo)代碼一起工作(參考文獻(xiàn) 2 和參考文獻(xiàn) 3)。除錯(cuò)器運(yùn)行在一臺(tái)主機(jī)上,它透過一個(gè)專用的埠發(fā)送指令和接收響應(yīng),從而達(dá)到與監(jiān)控器通信的目的??梢詫?Linux 上的 gdbserver 程式當(dāng)作一個(gè)除錯(cuò)監(jiān)控器,不過它比早期的 ROM 監(jiān)控器更復(fù)雜

            (圖 1)。

            當(dāng)使用者希望在某條指令處設(shè)置一個(gè)中斷點(diǎn)時(shí),gdbserver 會(huì)保存該指令,而用一個(gè)系統(tǒng)呼叫(system call)來替代它。Gdbserver 然后用 Linux 的 ptrace 程式獲得所有進(jìn)行系統(tǒng)呼叫的應(yīng)用程式資訊。接著,當(dāng)發(fā)生系統(tǒng)呼叫而⒍中斷點(diǎn)時(shí),gdbserver 可以取得對(duì)被除錯(cuò)應(yīng)用的控制。除錯(cuò)器運(yùn)行在一臺(tái)主控機(jī)上,透過串列埠或乙太網(wǎng)路連接到目標(biāo)物件(參考文獻(xiàn) 4)。監(jiān)控器的方法既便宜又實(shí)用,但也有一些缺點(diǎn),例如需要在進(jìn)行任何除錯(cuò)前載入代碼,并可能與應(yīng)用軟體相互影響。如果代碼位于快閃記憶體中就不能使用監(jiān)控器軟體,因?yàn)橐迦胲涹w中斷點(diǎn)就需要修補(bǔ)應(yīng)用軟體。

            內(nèi)電路模擬

            內(nèi)電路模擬器(in-circuit emulator ,ICE)是第一種以硬體為基礎(chǔ)的除錯(cuò)技術(shù),它是所除錯(cuò)處理器的一個(gè)版本。ICE 通常使用一顆現(xiàn)場(chǎng)可編程閘陣列(field-programmable gate array,F(xiàn)PGA)。FPGA 外合(bond out)其內(nèi)部R流排和狀態(tài)信號(hào),而讓使用者可以使用它們(圖 2)。

            ICE 提供的除錯(cuò)功能多于 ROM 監(jiān)控器。使用 ICE 時(shí),必須用一個(gè)連接到 ICE 盒的連接替換待除錯(cuò)電路板上的處理器。一個(gè)運(yùn)行并模擬除錯(cuò)器功能的主機(jī)控制這個(gè) ICE 盒。ICE 的主要局限性之一是它的價(jià)格昂貴。另外,雖然這個(gè)方法很適合簡(jiǎn)單的處理器,但現(xiàn)代 SoC 有更高的復(fù)雜性、整合度和頻率,因此 IC 供應(yīng)商難以為現(xiàn)代處理器提供 ICE 版本。

            一些歐洲公司在1985 年成立了聯(lián)合測(cè)試活動(dòng)組(Joint Test Action Group,JTAG),這個(gè)聯(lián)盟嘗試要解決測(cè)試半導(dǎo)體 IC 的各種問題。它們?yōu)?IC 的邊界掃描測(cè)試建立了 IEEE 1149.1 標(biāo)準(zhǔn),并在 1990 年公布了此一標(biāo)準(zhǔn)(參考文獻(xiàn) 5 和 圖 3)。

            JTAG 標(biāo)準(zhǔn)定義了一個(gè)有限的 I/O JTAG 埠,有多達(dá)五個(gè)信號(hào),透過串列通信完成電路的測(cè)試與分析:測(cè)試時(shí)(test clock,TCK)、測(cè)試模式選擇(test-mode select,TMS)、可選的測(cè)試重定(test reset, TRST)、測(cè)試資料登錄(test-data in ,TDI)和 測(cè)試資料輸出(test-data out,TDO)。

            IEEE 將 JTAG 硬體建立在一個(gè) 16 態(tài)的有限狀態(tài)(finite-state)機(jī)上,并由 TMS 信號(hào)控制。TCK的上升沿時(shí)(rising- edge clock)X取到此一 TMS 信號(hào)。資料資訊在TDI 墊(TDI pad)移入,并在TDO 墊移出。最后用 TRST 來對(duì)設(shè)計(jì)重新設(shè)定。IC 的每個(gè)墊都可以增加掃描暫存器,并將它們內(nèi)部連接起來構(gòu)成一個(gè)邊界掃描鏈??梢酝高^ TDI/TDO 和 JTAG 命令將此鏈移入和移出,以測(cè)試電路板上的外部連接,測(cè)試 IC 內(nèi)部的邏輯連接,X取 IC 墊的值,并將 JTAG 置于旁路模式。JTAG 提供了低成本的u造測(cè)試功能,并成為最常用的測(cè)試方法。但是,由于它有易于使用、高可用性和低成本實(shí)現(xiàn)的特點(diǎn),設(shè)計(jì)者經(jīng)常會(huì)把 JTAG 當(dāng)作除錯(cuò)埠,以存取片上的除錯(cuò)資源(參考文獻(xiàn) 6)。

            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            上一頁 1 2 3 下一頁

            關(guān)鍵詞: 策略 系統(tǒng) 嵌入式

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉