歪歪漫画登录页面首页环球漫画|欧美激情A片大尺度|斗罗大陆小舞107集免费|国产久久精品二区三区老狼|51吃瓜.world张津瑜|26uuu电影新地址|厨房出轨上司HD院线

 
J-Link調試的監視模式
來源: | 作者:風標電子工程師 | 發布時間: 2024-05-30 | 89 次瀏覽 | ?? 點擊朗讀正文 ?? ? | 分享到:

CPU主要有兩種標準的調試模式:Halt模式和監視模式。本文將重點介紹監視模式調試,幫助大家更好地理解和應用這一技術。


一、Halt模式與監視模式的區別

Halt模式是J-Link默認使用的調試模式。在Halt模式下,當遇到斷點或調試器發出停止請求時,CPU會停止并中斷程序執行。這種模式在調試過程中會導致一些問題,例如

1. 應用程序的部分需要保持運行,以確保與外部組件的通信不會中斷。

2. 例如,在藍牙應用程序中,需要在CPU處于調試模式時保持藍牙鏈路,否則通信將失敗,用戶應用程序的恢復或單步執行將不可能。

3. CPU進入調試模式時,某些外設也會停止。例如,用于電機控制應用程序的脈沖寬度調制(PWM)單元可能在未定義的/甚至危險的狀態下停止,導致連接到這些單元的外部硬件產生不希望的副作用。

而監視模式調試則可以有效解決這些問題。在監視模式下,CPU不會停止,而是捕獲一個特定的調試異常,并跳轉到定義的異常處理程序中。主要效果與Halt模式相同:用戶應用程序在特定點被中斷,但與停Halt模式不同的是,由于CPU執行了處理程序,它還可以在調試進入/退出時甚至幾乎無延遲地在調試模式下周期性地執行一些特定操作。這使得可以處理上述解釋的復雜調試情況。


二、啟用監視模式調試

要啟用監視模式調試,需要明確告訴J-Link軟件使用監視模式。具體操作取決于使用的IDE。以下為簡要步驟:

1. 修改IDE設置,啟用監視模式調試。

2. 確保J-Link能夠定位到有效的監視器,否則將默認回退到Halt模式調試。

可以使用以下 J-Link Script file啟用監控模式:





















































/**********************************************************************               (c) SEGGER Microcontroller GmbH & Co. KG             **                        The Embedded Experts                        **                           www.segger.com                           ***********************************************************************
-------------------------- END-OF-HEADER -----------------------------
File    : EnableMonitorModeDebugging.JLinkScriptPurpose : Enable Monitor Mode DebuggingLiterature:  [1]  J-Link User Guide (UM08001_JLink.pdf), chapter "Monitor Mode Debugging"
*/
/***********************************************************************       Constants (similar to defines)************************************************************************/
/***********************************************************************       Global functions************************************************************************/
/***********************************************************************       ConfigTargetSettings()**  Function description*    Called before InitTarget(). Mainly used to set some global DLL variables to customize the*    normal connect procedure. For ARM CoreSight devices this may be specifying the base*    address of some CoreSight components (ETM, …) that cannot be auto-detected by J-Link*    due to erroneous ROM tables etc. May also be used to specify the device name in case*    debugger does not pass it to the DLL.**  Return value*    >= 0:  O.K.*     < 0:  Error**  Notes*    (1) May not, under absolutely NO circumstances, call any API functions that perform target*    (2) Should only set some global DLL variables*/int ConfigTargetSettings(void) {  JLINK_SYS_Report("ConfigTargetSettings(): Enable Monitor Mode Debugging");  JLINK_ExecCommand("SetMonModeDebug = 1");//  JLINK_ExecCommand("SetMonModeVTableAddr = <Addr>");  // Needed in case of the monitor mode interrupts needs to be forwarded, see section "Forwarding of Monitor Interrupts" in the J-Link User Guide (UM08001)  return 0;}
/*************************** end of file ****************************/



三、監視模式的可用性與限制

并非所有CPU核心都支持監視模式調試。以下是一些支持監視模式的CPU核心及其限制:

1. Cortex-M3Cortex-M4:支持監視模式調試,SEGGER提供的監視代碼可以輕松地鏈接到用戶應用程序中。

但有以下限制:

   用戶特定的監視函數不得阻塞通用監視器超過100毫秒。

   無法從IDE中操作堆棧指針寄存器(SP)。

   在監視模式下,不能使用無限數量的閃存斷點功能。

   無法調試監視器本身。


四、監視代碼簡介

執行J-Link的監視模式調試需要一個特定于CPU核心的監視代碼。此監視代碼在CPU處于調試模式時(即處于監視異常中)與J-Link進行通信。監視代碼需要像應用程序的正常部分一樣被編譯和鏈接。

不同核心的監視代碼可以通過SEGGER的下載頁面請求獲得。

以下為監視代碼的組成部分:

1. JLINK_MONITOR.c:包含在調試模式進入、退出和CPU處于調試模式時周期性調用的用戶特定函數。函數可以填充用戶特定代碼。所有函數不得阻塞通用監視器超過100毫秒。

2. JLINK_MONITOR.h:頭文件,用于填充JLINK_MONITOR_函數。

3. JLINK_MONITOR_ISR.s:通用監視器匯編文件,用戶無需修改。


五、調試中斷注意事項

在監視模式下調試中斷時,需要注意以下幾點:

1. 只有優先級低于調試/監視中斷的中斷可以被調試/單步執行。

2. 在優先級高于調試/監視中斷的中斷服務例程ISRs中設置斷點可能導致故障因為當遇到斷點時,CPU無法捕獲調試中斷。