在嵌入式應(yīng)用的開發(fā)過程中,雖然良好的編程實(shí)踐和配合適當(dāng)?shù)木幋a規(guī)范檢測(cè)軟件能夠減少代碼編寫階段中出現(xiàn)的錯(cuò)誤數(shù)量,但仍然不可避免的會(huì)出現(xiàn)一些只有在程序運(yùn)行過程中才會(huì)觸發(fā)的錯(cuò)誤。為了解決程序運(yùn)行過程中的問題,需要使用調(diào)試器,觀察代碼的執(zhí)行及軟件狀態(tài)變化。
在程序調(diào)試的過程中,斷點(diǎn)的重要性不言而喻。在調(diào)試狀態(tài)下,當(dāng)程序遇到斷點(diǎn)時(shí),會(huì)停止執(zhí)行并將控制權(quán)交給調(diào)試軟件,調(diào)試器可以顯示當(dāng)前應(yīng)用程序的狀態(tài),包括變量和寄存器的值,內(nèi)存、堆棧使用情況,顯示應(yīng)用程序到達(dá)斷點(diǎn)位置的函數(shù)調(diào)用關(guān)系等,這些信息可以幫助開發(fā)人員分析程序的執(zhí)行狀況是否符合預(yù)期,并在問題出現(xiàn)時(shí)幫助確定錯(cuò)誤原因。
常見的調(diào)試方法
(1)在RAM區(qū)域內(nèi)調(diào)試
在開發(fā)過程中,可以將應(yīng)用程序下載到RAM運(yùn)行和調(diào)試,調(diào)試器只需使用簡(jiǎn)單的斷點(diǎn)指令,且RAM允許多次讀取和寫入,RAM區(qū)域內(nèi)的斷點(diǎn)指令不會(huì)對(duì)程序執(zhí)行產(chǎn)生明顯的影響。但該方法的局限是MCU所擁有的RAM空間通常較小,應(yīng)用較大時(shí),無法在RAM進(jìn)行調(diào)試。
(2)在Flash區(qū)域內(nèi)調(diào)試
與RAM不同,F(xiàn)lash存儲(chǔ)空間通常較大,當(dāng)無法在RAM調(diào)試時(shí)只能在Flash區(qū)域內(nèi)進(jìn)行調(diào)試。微控制器設(shè)計(jì)人員提供了用于在Flash區(qū)域調(diào)試時(shí)使用的硬件斷點(diǎn),硬件斷點(diǎn)會(huì)將PC指針與斷點(diǎn)位置進(jìn)行比較,并檢查指令是否被調(diào)用,當(dāng)斷點(diǎn)處指令被調(diào)用時(shí),程序?qū)⑼V共?dòng)調(diào)試器。硬件斷點(diǎn)的數(shù)量由芯片所使用的內(nèi)核決定,在ARM7和ARM9內(nèi)核中僅包含2個(gè)硬件斷點(diǎn),在Cortex-M3和M4內(nèi)核中包含4-6個(gè)可用的硬件斷點(diǎn)。在調(diào)試過程中,當(dāng)硬件斷點(diǎn)數(shù)量用完時(shí)則無法添加新的斷點(diǎn),只能取消前面添加的斷點(diǎn)后才能添加新的斷點(diǎn),這無疑將嚴(yán)重影響程序開發(fā)效率。
(3)外擴(kuò)Flash存儲(chǔ)芯片調(diào)試
當(dāng)所開發(fā)的應(yīng)用程序的復(fù)雜度進(jìn)一步上升時(shí),可能會(huì)使用到外擴(kuò)的Flash存儲(chǔ),那么此時(shí)該如何進(jìn)行應(yīng)用程序調(diào)試呢?在大多數(shù)使用Cortex-M內(nèi)核的微控制器中,芯片內(nèi)部提供的硬件斷點(diǎn)在調(diào)試過程中能夠生效的地址范圍是有限的,當(dāng)使用外擴(kuò)Flash時(shí),自帶的硬件斷點(diǎn)將無法在外擴(kuò)Flash存儲(chǔ)的地址范圍內(nèi)生效,此時(shí)將無法在這些區(qū)域內(nèi)設(shè)置斷點(diǎn)來調(diào)試應(yīng)用程序。
當(dāng)使用基于地址映射擴(kuò)展的外部Flash存儲(chǔ)時(shí),Segger J-Link產(chǎn)品所支持的無限Flash斷點(diǎn)功能能夠幫助我們對(duì)片外Flash添加斷點(diǎn)并調(diào)試。
Segger無限Flash斷點(diǎn)功能
J-Link支持一項(xiàng)名為“無限Flash斷點(diǎn)”(Unlimited Flash Breakpoints)的調(diào)試功能。“無限Flash斷點(diǎn)”允許用戶在Flash中調(diào)試時(shí)設(shè)置無限數(shù)量的斷點(diǎn)。如果沒有此功能,在Flash中能夠設(shè)置的斷點(diǎn)數(shù)量限制為CPU調(diào)試單元支持的硬件斷點(diǎn)數(shù)。
J-Link的“無限Flash斷點(diǎn)”適用于片內(nèi)和外擴(kuò)的Flash,包括通過內(nèi)存映射添加的QSPI閃存。
無限Flash斷點(diǎn)的實(shí)現(xiàn)方式
Segger J-Link系列產(chǎn)品在實(shí)現(xiàn)無限Flash斷點(diǎn)功能時(shí),會(huì)使用硬件和軟件斷點(diǎn)的混合,來盡可能的減少對(duì)于Flash的影響。當(dāng)硬件斷點(diǎn)數(shù)量用完再添加新斷點(diǎn)時(shí),Segger軟件將對(duì)斷點(diǎn)所在位置的Flash區(qū)塊進(jìn)行重新編程來添加斷點(diǎn)。
雖然Flash存在一定的寫入次數(shù)限制,但Segger在實(shí)現(xiàn)該功能時(shí)已經(jīng)做了大量針對(duì)性的優(yōu)化來減少對(duì)于Flash的影響,例如處于同一區(qū)塊內(nèi)的多個(gè)斷點(diǎn),Segger將通過一次該Flash區(qū)塊的重編編程來完成多個(gè)斷點(diǎn)的添加。Segger僅在必要時(shí)才會(huì)對(duì)Flash區(qū)塊進(jìn)行重編程,部分操作將通過內(nèi)置的指令集模擬器來完成,從而能夠盡可能的減少對(duì)于Flash閃存的影響。
Segger的無限Flash斷點(diǎn)調(diào)試功能解除了硬件斷點(diǎn)對(duì)于程序調(diào)試的限制,能夠提升開發(fā)人員的開發(fā)效率。對(duì)于Cortex-M內(nèi)核芯片添加了外擴(kuò)Flash的情形,無限Flash斷點(diǎn)功能則可能是僅有的片外Flash調(diào)試解決方案。
審核編輯 :李倩
-
FlaSh
+關(guān)注
關(guān)注
10文章
1635瀏覽量
148031 -
RAM
+關(guān)注
關(guān)注
8文章
1368瀏覽量
114701 -
斷點(diǎn)
+關(guān)注
關(guān)注
0文章
12瀏覽量
7710
原文標(biāo)題:如何使用J-Link無限Flash斷點(diǎn)功能調(diào)試應(yīng)用?
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論