使嵌入式系统调试更容易:有用的硬件和软件提示
使嵌入式系統調試更容易:有用的硬件和軟件提示
Making embedded system debug easier: useful hardware & software tips
嵌入式系統是硬件和軟件的混合體。兩者必須相輔相成。硬件人員可以使軟件更容易實現。因此,這里有一些建議,使系統的硬件、軟件和固件更容易調試。記住一個好的設計是可行的;一個好的設計也是一個易于調試的設計。
First up: diagnostics
第一步:診斷
在非嵌入的情況下,最受歡迎的調試技巧是將print語句種子植入代碼中。它們告訴程序員執行流是否到達打印點。但是軟件人很少有這個選擇。
所以,添加一些未分配的并行I/O位。軟件開發人員迫切需要這些作為一種廉價的方法來檢測他們的代碼。將I/O指令植入驅動這些輸出的代碼中是查看程序正在執行的操作的簡單而快速的方法。
開發人員可以在進入例程或ISR時斷言一點,然后在退出時降低它。然后范圍或邏輯分析器會立即顯示代碼段的執行時間。
另一個技巧是在系統繁忙時循環輸出位高,空閑時循環低輸出位。把電壓表連接到引腳上,這是一種老式的帶有模擬指針的裝置。儀表將集成二進制脈沖流,因此顯示的電壓將與系統負載成比例。
如果空間和成本允許,包括一個連接到一行0.1英寸間隔的過孔或頭的8位寄存器。軟件狀態機可以將其當前的“狀態”輸出到此端口。邏輯分析器捕獲數據并顯示所有的排序,對代碼的執行時間幾乎沒有影響。
至少需要一個LED來向開發者,甚至是客戶發出信號,讓他們知道這個系統是正常工作的。它是一個由低優先級任務或空閑循環驅動的信心指示器,它表明系統是活動的,并且沒有卡在某個有限的循環中。很多嵌入式系統都可以有簡單的LED指示燈。
高度集成的CPU現在提供了很多片上外圍設備,有時比我們在特定系統中需要的還要多。如果有一個額外的通用異步收發器,把引腳連接到一個RS-232電平轉換芯片(例如,MAX232A或類似芯片)。除了原型制作外,沒有必要實際將芯片加載到電路板上。
軟件開發人員可能會發現自己處于一個角落,在那里他們的工具是不夠的,然后會想在代碼中添加一個軟件監視器。RS-232端口使這成為可能和容易。
如果PCB不動產是如此的有限,以至于沒有空間來進行電平轉換,那么至少要將Tx、Rx和接地連接到可訪問的過孔上,這樣就可以在電路板上方的綠色導線上掛起一個MAX232。
(開發人員請注意:如果您確實使用此端口,請不要在實現監視器時過于驚慌,以致于使用輪詢I/O實現RS-232驅動程序。請花點時間創建合適的中斷驅動代碼。根據我們的經驗,監視器上的輪詢I/O會導致遺漏字符、不可靠的工具和巨大的挫敗感。)
把復位線接到開關或跳線上,這樣工程師就可以獨立于正常通電復位來判斷信號。通電問題有時可以通過將reset連接到脈沖發生器來隔離,從而創建一個易于用示波器研究的可重復場景。
Connecting Tools
連接工具
調整CPU芯片的方向,以便在使用模擬器時可以連接模擬器。有時,目標板被埋在機柜內,訪問最多也受到限制。大多數仿真器pod都有利于特定插入方向的形狀因子。
也要注意垂直間隙!堆疊在大型SMT適配器上的吊艙可能需要離主板4到6英寸的空間。確保沒有任何東西會干擾吊艙。
不要在SMT封裝上使用“卡夾式”適配器。它們根本不可靠(唯一的例外是PLCC包,它們有很大的潛在客戶)。在巴西,一只黃油飄揚著翅膀,產生了足夠的空氣流動,足以把它掀翻。更好的是,卸下CPU,安裝一個焊接的適配器。PCB將永遠是一個原型,但至少它將是一個可靠的原型。
在系統的時間安排上留有余量。如果每納秒都被計算在內,沒有一個模擬器能可靠地工作。在讀寫周期中,尤其是在等待狀態電路中,額外的5nsec不會影響大多數設計。
如果處理器有BDM或JTAG調試端口,請確保在PCB上添加適當的連接器。即使你打算使用一個成熟的仿真器或其他開發工具,至少要為BDM連接器添加PCB焊盤和布線。連接器的成本接近于零,并且可以節省一個飽受工具問題困擾的項目。
邏輯分析器是一個非常棒的調試工具,但它總是讓人大失所望。當你完成連接100個夾子引線時,前50個已經彈出。
有一個更好的解決方案:用放大器的Mictor連接器環繞你的CPU。這些是高密度、可控阻抗的部件,可以將系統的地址、數據和控制總線傳輸到車外。泰克和安捷倫都支持Mictor。這兩家公司都出售從邏輯分析儀直接引至微型計算機的電纜。沒有夾子引線,無需定制電纜,保證在幾秒鐘內可靠連接。從生產版本的電路板上取下連接器,或者只留下PCB板而不加載部件。
當我們連接工具時,有些信號特別容易失真。地址鎖存啟用(ALE),也被稱為地址選通(as)在摩托羅拉零件,區分地址和數據多路復用總線。模擬器或探測器對該信號產生的微小噪聲都會導致系統崩潰。
對于任何邊緣觸發的中斷輸入(如許多CPU上的NMI),也是如此。用雙電阻網絡終止這些信號。雖然你的設計可能是完美的沒有終端,連接工具和探測信號可能會破壞信號。
添加測試點!除非它的接地連接很短,否則示波器無法準確顯示我們現代設計中特有的高速信號。在過去的好日子里,在邏輯器件的引腳上焊接一點導線,就可以很容易地建立一個即時的接地連接。對于SMT,這要么是困難的,要么是不可能的,所以在電路板周圍分布大量可接近的接地點。
其他的信號我們將探測很多,必須是可訪問的,包括時鐘,讀,寫,和所有的中斷輸入。確保每個測試點都有測試點或足夠大的通孔,顯影劑可以將電線(通常是電阻引線)焊接到信號上。
添加Vcc測試點。邏輯探測器雖然很舊,但仍然是非常有用的工具。大多數人需要電源連接。
Thoughts about ports
關于港口的思考
使所有輸出端口可讀。對于asic中的控制寄存器來說尤其如此,因為無法探測這些寄存器。
注意位順序。例如,如果從A/D讀取數據,那么將位7轉換成0位、6位到1位等等的糟糕設計是一場噩夢。當然,軟件人員可以編寫代碼來修復混音,但大多數處理器并不擅長這一點。代碼將是緩慢和丑陋的。
使用許多窄的I/O端口,而不是幾個寬的I/O端口。當一個端口控制三個LED、兩個中斷屏蔽和一個步進電機時,改變任何輸出意味著管理每個輸出。代碼變成了一堆錯綜復雜的ANDs/or。任何小的硬件更改都需要大量的軟件調整。當使用離散邏輯實現時,寬端口確實可以最小化部件數量,但是在PLD或FPGA中沒有成本優勢。
避免將未使用的數字輸入直接連接到Vcc。在過去的日子里,這種做法是禁止的,因為74LS輸入比Vcc引腳更容易受到瞬態的影響。所有未使用的輸入通過電阻上拉連接到Vcc。邏輯設備不再需要這樣做,但它仍然是一個很好的實踐。探測和更改一個沒有硬連接到電源的節點要容易得多。
但是,如果您必須將電源直接連接到這些未使用的輸入端,請非常小心PCB布局。不要通過引腳供電;也就是說,不要將引腳作為一種方便的方式將電源提供給其他引腳或電路板的另一側。
最好小心地運行所有的電源和接地連接,作為PCB外部層上的軌跡輸入信號,這樣當IC焊接到位時,它們就會清晰可見。然后開發人員就可以輕松地用X-Acto刀切割軌跡并進行更改。
拉高電阻帶來了他們自己的挑戰。許多調試工具都有自己的上拉程序,這可能會使節點產生奇怪的偏差。最好使用較低的值,而不是CMOS允許的高值(比如10k而不是100k)。
PCB絲網是經常被忽視的調試輔助工具。標記開關和跳線。始終表示引腳1,因為在SMT領域沒有標準的引腳1位置。并在大尺寸SMT封裝周圍每隔5或10個管腳添加勾號,并指示管腳數量是順時針還是逆時針方向增加。否則,找到針139是一場噩夢,尤其是對于患有咖啡因誘發震顫的雙焦佩戴開發人員。
關鍵的連接器,這樣就不需要猜測電纜的走向。
請在示意圖中添加注釋!指示頁面上的所有路線。不要隱藏與電源和接地相關的管腳編號,請明確標記這些。
當設計完成后,檢查每個設備的每一個輸入,并絕對確保每個輸入都連接到某個東西上,即使它沒有被使用。我見過數百個系統在現場失敗,因為一個未使用的輸入漂移到斷言狀態。您可能希望軟件人員在代碼中屏蔽這些信息,但這并不總是可能的,即使是這樣,也常常被遺忘。
盡量避免使用硬件狀態機。它們很難調試,而且常常與軟件非常接近,這也使得調試變得不友好。更容易在代碼中完全實現這些功能。工具(例如,來自IAR的VisualState)可以自動生成狀態機代碼。
施工方法
嵌入式控制器可以使用多種技術中的任何一種來構建,但最常見的方法是印刷電路板(PCB)。印刷電路板是由絕緣材料制成的,例如環氧樹脂浸漬的玻璃布,用薄銅片層壓而成。
多層銅和絕緣材料可以層壓成多層PCB。通過在材料上鉆孔和電鍍孔,可以將層互連并為通孔組件提供安裝位置。
在設計PCB的布局或互連模式時,有許多沖突的要求必須加以解決,才能制造出一個可靠、經濟、可生產的設備。對于低速電路,寄生效應可以忽略,通常假設為理想連接。
不幸的是,實際電路并不理想,電線和絕緣材料對電路有影響,特別是對于信號上升/下降時間很快的信號。印刷電路板上的線路或導線有雜散電阻、電容和電感。
在高速下,這些雜散效應會延遲和扭曲信號。在設計PC板時必須特別小心,以避免傳輸線效應、噪聲和不必要的電磁輻射問題。
電源和地面飛機。在可能的情況下,最好使用兩層四層或多層PCB,專門用于Vcc和接地信號。它們被稱為電源和地面。一個優點是有一個有益的高頻寄生電源去耦電容,它降低了集成電路的電源噪聲。
功率平面還可以減少產生干擾的電磁輻射,降低電路對外界感應噪聲的敏感度。功率平面往往起到屏蔽作用,以降低對外部噪聲和系統噪聲輻射的敏感性。
地面問題。雖然理想電路接地的概念似乎相對簡單,但在實際應用中,許多系統問題都可以直接追溯到接地問題。
至少,這會導致不必要的噪音或錯誤的操作;最壞的情況是,它可能會導致安全問題,甚至可能因觸電死亡。為了避免你過快忽視這種可能性的重要性,作者在測試一個接地不當的設備時差點觸電身亡!
這些問題通常由以下問題之一引起:
1) 接地電路中的電感或電阻過大,導致“接地回路”
2) 系統中不同接地之間缺乏或不充分的隔離:接地、安全、數字和模擬接地
3) 非理想接地路徑,導致一個電路中的電流在另一個電路中產生電壓
這些問題的解決方案各不相同,這取決于問題的類型和它們發生的頻率范圍。
通常,它們可以簡化為減少電路公共阻抗中的電流,這些電路需要使用單點接地和謹慎應用屏蔽和絕緣來防止不必要的寄生信號耦合。
EMC and ESD effects
電磁兼容性和靜電放電效應
電磁兼容性(EMC)問題變得越來越重要,因為現在有大量的電子設備無意中在相同的頻率范圍內輻射電磁能量,用于通信、導航和儀表。
監管機構,如美國聯邦通信委員會(FCC)、加拿大通信部(DOC)以及歐洲的類似組織,都對此類電子設備在不同頻率下的發射能量進行了限制。
由于應用的敏感性,對生命關鍵設備,如飛機導航和生命支持設備提出了更嚴格的要求。除其他外,這些設備需要提供對外部感應噪聲(輻射和傳導敏感度)的最低抗擾度。
在解決EMC問題時,第一步是確定噪聲源、到達問題區域的路徑以及問題出現的目的地。一旦確定了電磁兼容問題的這三個特征,工程師就可以評估在其源頭消除噪聲、使用屏蔽和類似技術切斷路徑以及降低受影響電路的靈敏度的相對優勢。
有幾種有用的資源,包括出版物、研討會、測試實驗室和專門解決EMC問題的顧問。最好的解決方案通常是在原型階段盡早開始測試一個新的設計,以確定潛在的問題區域,以便以最小的成本和進度影響來解決這些問題。
靜電放電(ESD)在嵌入式應用中是一個重要的設計考慮因素,因為在存在外部電場的情況下可能會發生故障和錯誤操作。
當有人在低濕度環境中走過地板時,在接觸電子設備之前,ESD電壓通常會在嵌入式接口上以數萬伏的電壓施加。
最常見的問題之一是鍵盤或用戶輸入設備,它們與外界直接接觸。這種影響可能會立即造成損壞或不安,或可能導致潛在故障,這些故障會在ESD事件發生數月后出現。
設計者通常使用與安全和減排技術類似的屏蔽和接地技術,以盡量減少靜電放電的影響。可用于解決EMC問題的資源通常也可用于ESD問題。
Fault Tolerance
容錯
在嵌入式系統中,容錯已經越來越成為一種需求,因為它們在失敗是不可接受的應用中找到了出路。許多硬件和軟件解決方案已經開發出來以滿足這一需求。
為了理解如何處理這些故障,我們必須首先識別和理解每種故障的類型和性質。每個斷層都可以分為“硬”或“軟”斷層。硬故障會導致無法消除的錯誤,例如,按下復位或斷電不會導致從故障狀態中恢復。軟故障是由瞬態事件或某些情況下的程序錯誤引起的。
如果故障不太嚴重,自檢和診斷程序可以識別和診斷故障。
根據發生的故障類型和受影響的設備,可以設計一個系統來檢測故障,甚至可以在某種程度上隔離故障位置。在軟故障的情況下,設計者可以使系統從故障中自動恢復。
可以為嵌入式處理器編寫一個內置自檢程序,該處理器能夠檢測以下類型設備中的故障:
?處理器(如果故障不太嚴重)
?記憶
?只讀存儲器
?隨機存取存儲器
?E/EEPROM
?外圍設備
請注意,如果不是不可能的話,很難檢測到控制電路中的故障或系統中的“粘合邏輯”。其他設備,如存儲器,則有助于診斷方法。
可使用以下一種或多種技術對ROM設備的數據內容進行錯誤測試:
?平價
?校驗和
?循環冗余校驗(CRC)
RAM存儲器和處理器存儲在RAM中的信息的完整性可以使用以下技術之一進行測試:
?硬件錯誤檢測和糾正
?數據/地址模式測試
?通過檢查堆棧限制和地址范圍有效性實現數據結構完整性
此外,可以使用以下一種或多種技術來檢查程序的完整性和CPU的正確執行順序:
?硬件奇偶校驗錯誤檢測
?重復、冗余硬件和交叉檢查或投票
?“看門狗”定時器,操作CPU芯片的復位線
?當CPU沒有其他事情可做時,持續運行的診斷
Instrumentation Issues
儀表問題
設計師必須解決的一個最重要但往往被忽視的問題是測試儀器的正確選擇和使用。這些工具的不當選擇和應用常常是設計師浪費大量時間和混亂的根源。示波器和邏輯分析儀探頭的使用有兩個常見的使用問題。
一個典型的示波器或邏輯分析儀配備的探頭可能不會對觀測到的信號產生影響或使收集到的數據失真。由于輸入阻抗在兆歐范圍內,且寄生電容為數十皮卡法拉,測試設備似乎對測量結果幾乎沒有影響,但事實并非如此。
測量問題有兩個常見的原因:過大的地線電感和過大的電容負載。這些東西至少會導致錯誤測量的可能性,或者最壞的情況是,它們會導致被測電路表現出不同的行為。要緩解這些問題,可以做兩件事:
1) 使用盡可能短的測試引線,尤其是快速邏輯上的接地連接。
2) 使用高阻抗探頭,特別是為高速應用而設計的,如高速FET輸入范圍探
頭。
其他儀器問題可能是由于對數字示波器中采樣效果的誤解,邏輯分析儀缺乏故障檢測,以及其他一些晦澀但可能痛苦的“學習經驗”。只有充分了解所使用設備的操作和一些實際經驗,才能避免這些問題。
其他特殊設計注意事項
嵌入式系統設計者至少應該對其他一些特性有所了解。這些包括系統的熱特性和熱阻、功耗的概念,以及對設備溫度和可靠性的影響。在便攜式、手持和遠程定位系統中,另一個重要問題是電池儲能的應用。
熱分析和設計。半導體器件的溫度,如電壓調節器,甚至CPU芯片,是一個關鍵的系統運行參數。這些器件的可靠性也與溫度密切相關,這是因為器件的可靠性隨著溫度的升高而呈指數級下降。
幸運的是,計算一個設備的工作溫度并不困難,因為有一個簡單的電路類比最常用來計算設備的溫度。溫度類似于電壓,消耗的功率等于電流,熱阻等于電阻。換句話說:
Temperature rise (oC) = power (watts) * thermal resistance (oC/watt)
一個接一個疊放的多個機械部件的熱阻相加,就像串聯電阻等于單個電阻值的總和一樣。
例如:給定一個5V線性電壓調節器,9V輸入提供1安培的負載電流,調節器將消散:
P = V * I = (9 – 5 volts) * 1 amp, or 4 watts, of power
如果調節器在半導體結和外殼之間的熱阻為1oC/W(表示為Θjc),并且安裝調節器的散熱器從調節器安裝表面到靜止環境空氣的熱阻為10oC/W(表示為Θca),則半導體結與環境空氣之間的總熱阻為:
Θja =Θjc + Θca = 1 + 10 = 11oC/watt
連接處的溫升高于調節器周圍空氣的溫升如下:
T = P * Θja = 4 watts * 11oC/watt = 44oC above ambient
如果調節器被指定在最高結溫85℃下運行,則該裝置不應在高于85–44=41℃的環境空氣中運行,否則調節器將過早失效。
如果這是不可接受的,設計者必須降低輸入電壓以降低功耗,通過強制氣流降低熱阻,或將設計更改為另一種類型(例如開關式調節器),以使調節器接頭保持在操作限制范圍內。
Performance Metrics: IPS, OPS and benchmarks
性能指標:IP、OPS和基準
為了比較不同類型的計算機,制造商們提出了一系列量化處理器性能的指標。
這些設備在嵌入式系統中的成功應用通常取決于以下特點:
?IPS(每秒指令數)
?操作(每秒操作次數)
?撲通(浮點操作)
?基準測試(標準化和專有的“樣本程序”),是小型應用程序中處理器性能的短樣本
IP,或者更常見的形式,MIPS(百萬IP)和BIPS(數十億IP),通常被到處亂扔,但本質上是毫無價值的營銷炒作,因為它們只描述機器上最快指令的執行速度。通常該指令是NOP指令,所以500 MIPS可能意味著處理器每秒無法執行5億次操作!
針對IPS度量的弱點,OPS(以及MOPS和bop,聽起來至少很有趣)是基于不同指令組合的指令執行時間。其目的是使用標準的執行頻率加權指令組合,更準確地表示“標稱”指令執行時間。
flop(megaFLOPS,giga FLOPS等)是相似的,除了它們對浮點指令的權重很大,以表示大量的計算應用,如連續模擬和有限元分析。
OPS度量的問題在于,結果數在很大程度上取決于用于計算它的指令組合,這可能無法準確表示預期的應用程序指令執行頻率。
基準。基準測試是一種簡短的、獨立的程序,它執行應用程序的關鍵部分,例如排序算法,用于比較不同機器上功能相同的代碼。
程序運行若干次迭代,并測量時間并與其他CPU的時間進行比較。這里的弱點是基準測試不僅是對處理器的度量,而且也是對程序員和用于實現程序的工具的度量。
因此,最好的基準測試是你自己編寫的,因為它可以讓你發現你編寫的代碼在給定的處理器上有多有效地執行。這與您可能獲得的實際應用程序性能非常接近,只是沒有在評估的每個處理器上完全實現應用程序。
總結
以上是生活随笔為你收集整理的使嵌入式系统调试更容易:有用的硬件和软件提示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保护嵌入式802.11 Wi-Fi设备时
- 下一篇: 新兴内存技术准备突围