帳號:
密碼:
最新動態
產業快訊
CTIMES / 文章 /
晶片內建增強型仿真模組讓程式除錯更簡單
 

【作者: Andreas Dannenberg】   2007年04月11日 星期三

瀏覽人次:【5205】

除錯是嵌入式應用開發人員的日常工作之一。隨著應用日益複雜,除錯過程變得更加困難耗時。利用模擬器解決方案進行除錯的缺點在於無法準確複製應用操作條件。許多模擬器雖提供程式碼覆蓋率分析 (code coverage)、執行頻率統計 (profiling) 和條件中斷點等功能,卻只能模擬處理器核心和少數週邊。這對複雜的純軟體演算法測試或許足夠,但嵌入式應用卻常涉及許多軟硬體互動,如外部連接電路及類比數位轉換器與計時器模組等微控制器的整合週邊都會產生即時事件。此外,微控制器本身可能是更複雜系統的一部份,並且會連結外部控制與資料儲存元件,或是與DSP配合提供支援功能。開發人員很難在處理器核心模擬器的「無塵室環境」除錯、或驗證這些與外部元件通訊的軟體。


克服這些缺點的常用方法之一是使用線上模擬器 (ICE),ICE兼具模擬器的優點及在實際硬體即時執行軟體的能力。設計人員只需以晶片封裝轉接器 (chip-package adapter) 取代目標板上的微控制器,該轉接器會連接另一個含有複雜電子電路的機盒,負責模擬微控制器的行為和提供除錯功能。ICE模擬器雖有許多功能,但卻相當昂貴與笨重,且無法提供100%的精確環境,尤其在遇到類比數位轉換器、數位類比轉換器、比較器、振盪器和電壓參考這類敏感的類比週邊時更是如此。


有鑒於這些缺點,在微控制器加入除錯功能的嵌入式仿真變得很受歡迎。除錯電腦主機可透過嵌入仿真功能利用JTAG等序列界面直接連結晶片內建的仿真邏輯電路,應用程式碼即可在微控制器上執行。這種做法的優點在於軟體設計是在實際操作條件下進行,所以發展完成後不需額外的硬體測試。


到目前為止,就算在小型的16和8位元控制器架構中,嵌入式除錯功能也極為常見,只不過多數產品只提供記憶體存取、處理器執行控制和硬體中斷點等基本功能,因此相較於完全成熟的ICE模擬器還有很大改進空間。最新的16位元微控制器則進一步提供更豐富的功能特色,使其除錯能力更接近ICE模擬器。不僅能在許多情形下為開發人員省下ICE費用,還可以應付許多困難的除錯問題。稍後將介紹一些先進微控制器的除錯功能和實例。


系統介紹

如圖1所示,德州儀器 (TI) MSP430微控制器內建的加強型仿真模組 (EEM) 包含下列功能方塊:基本觸發輸入、觸發組合邏輯、觸發排序器、觸發動作單元 (trigger action)、狀態儲存和時脈控制 (圖1)。



《圖一 MSP430加強型嵌入式仿真模組》 - BigPic:846x484
《圖一 MSP430加強型嵌入式仿真模組》 - BigPic:846x484

加強型除錯模組提供8個可用的基本觸發輸入,進行除錯時至少要設定其中一個。一般晶片內建的嵌入式仿真電路僅可透過觸發設定來監控處理器位址匯流排 (MAB),且只能在特定記憶體位址停止程式執行。但某些先進的微控制器卻可提供更複雜的觸發設定,前述MSP430就是一例。除了位址匯流排外,它還能設定觸發功能來監控處理器資料匯流排 (MDB)、處理器內部暫存器和部份的處理器控制訊號。不僅如此,必要時它還能將位元遮罩套用於位址和資料匯流排觸發設定,以便取出想要的值,或是利用一個額外常數執行「等於」、「不等於」、「少於」和「大於」等各種比較。相較於「在某個位址中斷程式執行」的標準除錯功能,上述這些功能可以組合出一套複雜精密的中斷點設定方式。


透過觸發組合邏輯,可把基本觸發輸入組合成複合的觸發。此方塊輸出的觸發事件是多個基本觸發輸入的邏輯AND組合。舉例來說,把位址和資料匯流排觸發組合,就能監控某些特定值是否在某個記憶體位置被讀寫,這種複合觸發事件可用來直接停止程式執行或產生狀態儲存事件。在執行該功能前,觸發事件可先由觸發排序器 (電路內建的狀態機器,共有四種狀態) 處理。根據輸入觸發產生的可程式狀態條件能用來產生狀態轉移動作。設計人員可以設定微控制器,使它在排序器達到最終事件狀態時停止程式執行、產生狀態儲存事件或同時執行這兩個動作。


如前所述,狀態儲存單元可以使用任何的複合觸發。狀態儲存單元是可以儲存8筆資料的環形緩衝區,每筆資料都包含16位元位址匯流排、16位元資料匯流排和某些重要處理器控制訊號在觸發當時的內容。它可視為一種簡單的追蹤緩衝區 (trace buffer),可以擷取狀態資訊而不影響微控制器軟體的即時工作。開發人員還能取得基本觸發事件發生時的系統狀態快照 (snapshot),包括根據多個觸發的組合、根據排序器輸出、或是僅止於在每個處理器時脈週期執行這項動作。


有些新型微控制器不僅具備嵌入式仿真模組,還提供另一項很有用的功能-時脈控制單元 (clock control unit)。可在元件內部提供3個時脈樹訊號,其中任何一個訊號都能用來驅動不同的週邊,如類比數位轉換器、LCD驅動器、計時器和序列通訊模組。時脈控制單元還能針對個別模組進行設定,以便決定程式停止時應該為哪些週邊繼續提供時脈,或是處理器在除錯過程中停止運作時應該切斷哪些週邊的時脈供應。如果仿真模組突然停止所有時脈 (例如執行到中斷點),不必要的副作用就可能發生,例如通訊字元遺失或錯誤的類比數位轉換結果。


另一個可能的實作方法是在仿真停止時繼續為週邊模組提供時脈。但這種解決方案有個潛在問題-就算處理器停止運作,包括計時器在內的某些模組仍可能一直設定中斷旗標,這會讓原始程式的單步執行相當困難。要避免上述作法產生的問題,開發人員可以使用時脈控制方塊,讓唯有對應用很重要的模組才能獲得時脈。


EEM觸發組成的複雜中斷點

常見的晶片內建仿真模組都會提供基本的硬體程式中斷點設定功能,但倘若能為中斷點增加條件,除錯作業在許多情形下會變得更簡單。舉例來說,某個C語言嵌入式應用提供一套複雜的狀態機器,將目前的狀態儲存在一個全域變數中,而且原始程式有許多地方都會修改這個變數的內容;假設此應用出現了「在錯誤條件下進入狀態 ‘3’」的意外狀況,要如何找出導致這項意外錯誤的原始程式碼?方法很簡單,只要使用一個複合式EEM模組觸發,讓它在發現「3」 這個值寫入狀態機器變數 StateVar時就停止程式執行即可。這個複雜中斷點是兩個基本EEM觸發的邏輯AND組合,它會在偵測到前述現象時產生一個處理器停止事件。(圖二)是這個複合觸發的簡單實作方塊圖。


《圖二 兩個基本觸發的組合》 - BigPic:600x256
《圖二 兩個基本觸發的組合》 - BigPic:600x256

為了監看狀態機器變數StateVar的位址與處理器寫入動作控制訊號,可設定一個基本觸發來監控元件內部的位址匯流排 (MAB)。另一個觸發則設定為監控內部資料匯流排是否出現「3」這個值。以這種方式設定加強型仿真模組後,只要有任何指令將「3」這個值寫入StateVar,程式就會停止執行,因此很容易就能找出導致該寫入動作的程式碼。這套方法不僅適用於RAM存取,還適用於快閃記憶體和週邊模組的存取動作。


利用所有基本EEM觸發都提供的位元遮罩功能,還能進一步設定這個複雜的中斷點。倘若客戶將超低耗電微控制器應用於可攜式運動錶時發現下列問題:通用連接埠1的接腳3會被意外設定。我們假設埠1在此應用裡專用來控制各種外部電路,因此在程式執行期間會被存取許多次。


現在的問題是找出會意外修改連接埠接腳內容的處理器指令及相關的原始程式。首先利用類似前述的複合式EEM中斷點來監控埠1輸出暫存器的寫入動作,再將遮罩AND值和觸發比較值都設為0x0008,然後利用位元遮罩功能取出位元3。MDB EEM觸發硬體現能在每次比較前執行逐位元AND運算。這種方式既能讓處理器繼續工作,又能在任何一行程式碼設定埠1輸出暫存器的位元3時,停止程式執行。只要等到程式執行幾次後,就能找出導致該異常行為的錯誤C程式。


揪出惱人的錯誤

堆疊溢位是嵌入式應用常見的錯誤。多數微控制器架構會在RAM內配置堆疊空間,然而RAM卻是一種其它變數及程式元素共用的有限資源。微控制器的一種常見做法是在程式初始化時將堆疊指標設定到RAM空間的頂端。對C程式來說,隨著所使用開發工具的不同,連結程式會配置0x50個位元組的RAM做為預設堆疊空間。然而隨著程式設計工作的進行和更多全域變數加入,連結程式最終會在編譯時發出可用記憶體不足的警告。這裡的問題是,倘若設計人員未謹慎指定堆疊大小,保留空間可能會不敷應用需求。


在執行期間,使用動態記憶體配置和遞回程式設計技巧都會消耗大量的記憶空間,實際應用時發生的不可預期事件,例如按鍵開關的訊號跳動或其它會產生巢狀中斷 (nested interrupt) 的輸入訊號,也會迫使堆疊指標移到堆疊邊緣或超出堆疊範圍。若缺乏執行期間的堆疊指標檢查功能,開發人員將可能冒著堆疊不斷擴大而侵入變數儲存空間的風險。如果發生這類情形,重要應用資料就可能毀損並造成從程式行為異常到軟體完全當機等各種難以預料的影響。使用在堆疊指標 (SP) 離開指定記憶區域時能立即停止程式執行的機制是解決這個問題的簡單方法。(圖三)顯示如何設定一個複雜中斷點以監控TI超低耗電MSP430微控制器的堆疊指標,這張圖片和其它螢幕擷圖都來自IAR Embedded Workbench V3.20A整合開發環境。



《圖三 堆疊溢位偵測》
《圖三 堆疊溢位偵測》

這顆元件使用0xA00 – 0x50 = 0x9B0 做為堆疊邊界。若此中斷點讓程式停止執行,開發人員即可檢查堆疊內容,進而找出堆疊溢位的根本原因。例如堆疊若有許多相同值,就表示問題可能來自連接埠訊號跳動而產生的大量中斷要求。


範圍中斷點 (range breakpoint) 是另一種可組合而成的複雜中斷點,用以監控特定範圍內或範圍外的位址或資料匯流排。這類除錯器使用兩個已在內部完成組合並設為監控相同匯流排的EEM基本觸發,其中一個觸發設為「少於」比較模式,另一觸發則設為「大於」比較模式。程式只有在這兩個條件都滿足時才會停止執行。舉例來說,範圍中斷點可做為一種監控裝置,確保處理器不會從程式記憶體以外的地方取得指令。這有助於找出程式記憶體因為計算錯誤的間接跳躍動作而產生的內容錯誤問題。範圍中斷點還能搭配讀/寫修飾詞 (read/write modifier),避免某些記憶區域被覆寫。


讓觸發變聰明

以微控制器搭配DSP執行鍵盤掃描、電源管理和即時時脈等支援功能的數位相機應用,是很適合展示EEM強大威力的另一個實例,DSP與微控制器是透過UART序列線路相連。假設當DSP傳送一系列多位元組命令,透過微控制器查詢目前的電池狀態時,微控制器卻沒有做出適當的回應。這將使開發人員面臨一個問題:如何在序列接收中斷服務函式裏增加中斷點,以便找出問題根源而又不影響應用的即時工作。困難點是DSP軟體已逾時,通訊已中斷,資料交換又無法完成。解決方法是把3個複合觸發送到觸發排序器,再利用類似(圖五)的參數設定,讓程式在收到3個位元組長的命令序列後立即停止執行。



《圖四 排序器控制》
《圖四 排序器控制》

接著只要採取單步執行模式 (single-stepping) 觀察處理器執行程式的路徑,即可看出為什麼該命令未被執行。


瞭解程式的執行

狀態儲存方塊是另一個強大的EEM元件。當進行程式碼除錯、或設定狀態儲存模組在每個CPU指令摘取週期都執行擷取動作時,儲存緩衝區會包含前8個組合語言指令的執行記錄 (8階執行記錄)。當以手動方式或透過中斷點停止程式執行時,這份記錄即可提供許多有用的資訊,例如程式停止執行前發生什麼事。利用這項功能蒐集基本或EEM複合觸發事件的資料時,還可以只記錄跳躍指令或分支指令等特定運算碼。這提供一項強大的指令追蹤功能,可用來觀察最近的程式流程。


由於狀態儲存緩衝區可以透過JTAG存取,而不會干擾CPU和目標應用作業,因此它還能實作另一項有用的功能:即時觀察。這項觀察功能對馬達控制應用等許多除錯作業都很有幫助。在應用軟體中增加中斷點以便停止程式執行,並透過一般的觀察視窗讀取變數值時,控制演算法會被打斷,這可能導致機械設備發生故障。但若結合微控制器的EEM觸發及狀態儲存功能,即可在不修改程式的情形下即時監控應用變數。只要利用一個觸發來監控目標變數記憶體位置的寫入動作,就能產生狀態儲存事件,使傳送至緩衝區的資料匯流排值一定是該變數的最新值。(圖五)是IAR Embedded Workbench擷取的狀態儲存視窗畫面。



《圖五 狀態儲存視窗》
《圖五 狀態儲存視窗》

在此例子裡,含有馬達轉速的全域變數記憶體位址為0x200,系統會監控該位址的寫入動作。隨著馬達控制演算法即時運行,狀態儲存視窗會自動更新,並在「資料匯流排」欄位顯示最新的馬達轉速,整個過程都不會影響應用執行。從螢幕擷圖可以看出馬達轉速在增加。這種利用資料匯流排值進行即時觀察的機制僅限於16位元,但對多數應用應該都已足夠。


時脈控制

EEM時脈控制方塊還能協助開發另一種嵌入式應用。微控制器的用途之一是驅動升壓轉換器藉以產生高電壓的MOSFET開關電晶體。該電晶體會連接到計時器PWM輸出(其負載週期由軟體演算法控制)。工程師必須在應用軟體正常運作的情形下修改RAM儲存的參數值。工程師會先關閉時脈控制組態對話盒裡的「Stop Timer_Bclock on emulation stop」選項,然後停止應用以便修改RAM內容。


假設手動停止程式執行時,輸出電晶體的負載週期約為20%,由於計時器在程式停止後,仍會繼續工作並產生適當的PWM波形,這個負載週期將能繼續維持。但若將計時器停止,就有可能造成開關電晶體持續導通,而出現電路過載甚至損壞的情形。


結語

相較於常見的基本型嵌入式仿真電路,本文介紹的加強型仿真模組 (EEM) 讓除錯變得更先進容易。加強型仿真模組的另一優點是不需要ICE之類的額外工具成本,因為所有的仿真功能都已內建至處理器核心做為標準功能。此外,許多實際而複雜的訊號處理應用都必須應付敏感的類比訊號,加強型仿真模組能讓這類應用的線上除錯 (in-system debugging) 付諸實現。必要時設計人員還能採用隔離式除錯界面,為少數幾條與處理器核心通訊的訊號線 (例如JTAG界面) 提供電氣絕緣保護,整個過程非常簡單輕鬆。相對而言,想要為ICE模擬器超過64條訊號線提供類似保護就很困難。儘管如此,某些重要的除錯功能仍要靠ICE提供,例如程式碼覆蓋率分析、執行頻率統計和深入追蹤緩衝區。TI正在開發中的程式碼執行頻率統計、更強大的即時系統存取和更深的追蹤緩衝區等擴充功能,將進一步縮小加強型仿真模組與ICE的差距,並且滿足嵌入式開發人員的需求。


(作者任職於德州儀器)


相關文章
開啟HVAC高效、靜音、節能的新時代
準備好迎接新興的汽車雷達衛星架構了嗎?
台灣AI關鍵元件的發展現況與佈局
以爆管和接觸器驅動器提高HEV/EV電池斷開系統安全性
低 IQ技術無需犧牲系統性能即可延長電池續航力
comments powered by Disqus
相關討論
  相關新聞
» 豪威集團推出用於存在檢測、人臉辨識和常開功能的超小尺寸感測器
» ST推廣智慧感測器與碳化矽發展 強化於AI與能源應用價值
» ST:AI兩大挑戰在於耗能及部署便利性 兩者直接影響AI普及速度
» 慧榮獲ISO 26262 ASIL B Ready與ASPICE CL2認證 提供車用級安全儲存方案
» 默克完成收購Unity-SC 強化光電產品組合以滿足半導體產業需求


刊登廣告 新聞信箱 讀者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 遠播資訊股份有限公司版權所有 Powered by O3  v3.20.2048.172.70.127.187
地址:台北數位產業園區(digiBlock Taipei) 103台北市大同區承德路三段287-2號A棟204室
電話 (02)2585-5526 #0 轉接至總機 /  E-Mail: [email protected]