在嵌入式應用的開發(fā)過程中,雖然良好的編程實踐和配合適當?shù)木幋a規(guī)范檢測軟件能夠減少代碼編寫階段中出現(xiàn)的錯誤數(shù)量,但仍然不可避免的會出現(xiàn)一些只有在程序運行過程中才會觸發(fā)的錯誤。為了解決程序運行過程中的問題,需要使用調(diào)試器,觀察代碼的執(zhí)行及軟件狀態(tài)變化。
在程序調(diào)試的過程中,斷點的重要性不言而喻。在調(diào)試狀態(tài)下,當程序遇到斷點時,會停止執(zhí)行并將控制權交給調(diào)試軟件,調(diào)試器可以顯示當前應用程序的狀態(tài),包括變量和寄存器的值,內(nèi)存、堆棧使用情況,顯示應用程序到達斷點位置的函數(shù)調(diào)用關系等,這些信息可以幫助開發(fā)人員分析程序的執(zhí)行狀況是否符合預期,并在問題出現(xiàn)時幫助確定錯誤原因。
常見的調(diào)試方法
(1)在RAM區(qū)域內(nèi)調(diào)試
在開發(fā)過程中,可以將應用程序下載到RAM運行和調(diào)試,調(diào)試器只需使用簡單的斷點指令,且RAM允許多次讀取和寫入,RAM區(qū)域內(nèi)的斷點指令不會對程序執(zhí)行產(chǎn)生明顯的影響。但該方法的局限是MCU所擁有的RAM空間通常較小,應用較大時,無法在RAM進行調(diào)試。
(2)在Flash區(qū)域內(nèi)調(diào)試
與RAM不同,F(xiàn)lash存儲空間通常較大,當無法在RAM調(diào)試時只能在Flash區(qū)域內(nèi)進行調(diào)試。微控制器設計人員提供了用于在Flash區(qū)域調(diào)試時使用的硬件斷點,硬件斷點會將PC指針與斷點位置進行比較,并檢查指令是否被調(diào)用,當斷點處指令被調(diào)用時,程序將停止并啟動調(diào)試器。硬件斷點的數(shù)量由芯片所使用的內(nèi)核決定,在ARM7和ARM9內(nèi)核中僅包含2個硬件斷點,在Cortex-M3和M4內(nèi)核中包含4-6個可用的硬件斷點。在調(diào)試過程中,當硬件斷點數(shù)量用完時則無法添加新的斷點,只能取消前面添加的斷點后才能添加新的斷點,這無疑將嚴重影響程序開發(fā)效率。
(3)外擴Flash存儲芯片調(diào)試
當所開發(fā)的應用程序的復雜度進一步上升時,可能會使用到外擴的Flash存儲,那么此時該如何進行應用程序調(diào)試呢?在大多數(shù)使用Cortex-M內(nèi)核的微控制器中,芯片內(nèi)部提供的硬件斷點在調(diào)試過程中能夠生效的地址范圍是有限的,當使用外擴Flash時,自帶的硬件斷點將無法在外擴Flash存儲的地址范圍內(nèi)生效,此時將無法在這些區(qū)域內(nèi)設置斷點來調(diào)試應用程序。
當使用基于地址映射擴展的外部Flash存儲時,Segger J-Link產(chǎn)品所支持的無限Flash斷點功能能夠幫助我們對片外Flash添加斷點并調(diào)試。
Segger無限Flash斷點功能
J-Link支持一項名為“無限Flash斷點”(Unlimited Flash Breakpoints)的調(diào)試功能。“無限Flash斷點”允許用戶在Flash中調(diào)試時設置無限數(shù)量的斷點。如果沒有此功能,在Flash中能夠設置的斷點數(shù)量限制為CPU調(diào)試單元支持的硬件斷點數(shù)。
J-Link的“無限Flash斷點”適用于片內(nèi)和外擴的Flash,包括通過內(nèi)存映射添加的QSPI閃存。

無限Flash斷點的實現(xiàn)方式
Segger J-Link系列產(chǎn)品在實現(xiàn)無限Flash斷點功能時,會使用硬件和軟件斷點的混合,來盡可能的減少對于Flash的影響。當硬件斷點數(shù)量用完再添加新斷點時,Segger軟件將對斷點所在位置的Flash區(qū)塊進行重新編程來添加斷點。
雖然Flash存在一定的寫入次數(shù)限制,但Segger在實現(xiàn)該功能時已經(jīng)做了大量針對性的優(yōu)化來減少對于Flash的影響,例如處于同一區(qū)塊內(nèi)的多個斷點,Segger將通過一次該Flash區(qū)塊的重編編程來完成多個斷點的添加。Segger僅在必要時才會對Flash區(qū)塊進行重編程,部分操作將通過內(nèi)置的指令集模擬器來完成,從而能夠盡可能的減少對于Flash閃存的影響。
Segger的無限Flash斷點調(diào)試功能解除了硬件斷點對于程序調(diào)試的限制,能夠提升開發(fā)人員的開發(fā)效率。對于Cortex-M內(nèi)核芯片添加了外擴Flash的情形,無限Flash斷點功能則可能是僅有的片外Flash調(diào)試解決方案。
審核編輯 :李倩
-
FlaSh
+關注
關注
10文章
1759瀏覽量
155869 -
RAM
+關注
關注
8文章
1400瀏覽量
120967 -
斷點
+關注
關注
0文章
12瀏覽量
8081
原文標題:如何使用J-Link無限Flash斷點功能調(diào)試應用?
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
昂瑞微OM662X系列MCU正式獲得SEGGER J-Link/Flasher支持
在FPGA設計中集成事件斷點的實現(xiàn)過程
RVMCU課堂「2」: 手把手教你玩轉RVSTAR—SEGGER Embedded Studio+蜂鳥調(diào)試器篇
RVMCU課堂「3」:手把手教你玩轉RVSTAR—SEGGER Embedded Studio+JLink調(diào)試器篇
基于蜂鳥E203的硬件斷點功能添加
SEGGER Ozone調(diào)試器支持第三方調(diào)試工具
【干貨分享】RT-Trace國產(chǎn)調(diào)試工具 | 技術集結
AS32X601芯片Flash擦寫調(diào)試技術解析
Segger的無限Flash斷點調(diào)試功能
評論