J-Link調(diào)試器支持將程序下載到RAM或Flash中,并通過(guò)設(shè)置無(wú)限斷點(diǎn)、查看內(nèi)存寄存器等方式實(shí)現(xiàn)在線調(diào)試。如果沒(méi)有這種調(diào)試能力,我們需要反復(fù)試錯(cuò)。
當(dāng)調(diào)試過(guò)程停止,沒(méi)有辦法繼續(xù)時(shí),系統(tǒng)被“鎖定”或“調(diào)試掛起”。引起異常的一種情況是程序或調(diào)試器在外部RAM控制器配置之前訪問(wèn)了外部?jī)?nèi)存。
為了解決該問(wèn)題,J-Link增加了新功能-雙內(nèi)存映射。
01什么是雙內(nèi)存映射?能解決什么問(wèn)題?
應(yīng)用程序從main()開(kāi)始,main()之前的啟動(dòng)過(guò)程,我們通常默認(rèn)其正常工作。因此,在main()之前出現(xiàn)的問(wèn)題,特別是鎖定調(diào)試邏輯并阻止進(jìn)一步調(diào)試,是一個(gè)大問(wèn)題。其中一個(gè)問(wèn)題是在外部RAM控制器配置之前訪問(wèn)外部?jī)?nèi)存。
使用J-Link的雙內(nèi)存映射,一個(gè)內(nèi)存映射用于處理啟動(dòng)階段的內(nèi)存訪問(wèn),第二個(gè)內(nèi)存映射在初始化完成后使用。第一個(gè)內(nèi)存映射阻止對(duì)外部?jī)?nèi)存的訪問(wèn),第二個(gè)內(nèi)存映射允許全內(nèi)存訪問(wèn),消除了在配置完成之前訪問(wèn)外部?jī)?nèi)存的可能性和問(wèn)題。
02問(wèn)題發(fā)現(xiàn)
在更新一些代碼時(shí),我們注意到一些用戶界面代碼中的錯(cuò)誤,重寫(xiě)了它,并像往常一樣下載到目標(biāo)中。在重置應(yīng)用程序時(shí),我們得到了目標(biāo)連接丟失的消息。我們檢查了所有的物理連接,然后再試一次……
…但它又失敗了。
對(duì)目標(biāo)重新上電,再次下載應(yīng)用程序,但結(jié)果相同。
03罪魁禍?zhǔn)?/strong>
通過(guò)J-Link日志文件:
JLINK_ReadMem(0x0033D4C0, 0x340 Bytes,…)
CPU_ReadMem(832字節(jié)@ 0x0033D4C0)
failed
- 40.959ms returns 1
Embedded Studio告訴J-Link從目標(biāo)的地址0x0033D4C0讀取832字節(jié),在XC7Z010平臺(tái)上該地址位于外部DDR RAM中的內(nèi)存。DDR RAM在訪問(wèn)之前必須被初始化。而Embedded Studio在啟動(dòng)目標(biāo)應(yīng)用程序之后讓J-Link立即讀取內(nèi)存,該操作在DDR RAM初始化之前。
我們沒(méi)有添加任何會(huì)影響DDR RAM初始化的代碼。為什么這一切突然發(fā)生了呢?
一個(gè)打開(kāi)的內(nèi)存窗口,顯示了外部DDRRAM中的數(shù)組“aMyArrInExtDDRRAM”內(nèi)容。
我們沒(méi)有考慮到打開(kāi)的內(nèi)存窗口是問(wèn)題所在,內(nèi)存窗口僅在調(diào)試會(huì)話期間可見(jiàn),增加了這種情況的隱蔽性,
調(diào)試會(huì)話開(kāi)始時(shí)不打開(kāi)內(nèi)存窗口并不是一個(gè)解決辦法。例如,第三方調(diào)試器可能默認(rèn)打開(kāi)內(nèi)存窗口,或者不允許用戶關(guān)閉它等。同樣的,使用單內(nèi)存映射解決方案,通過(guò)J-Link腳本文件指定某些區(qū)域?yàn)榉欠▍^(qū)域,在這種情況下也不起作用。
04解放方案
使用兩個(gè)內(nèi)存映射:一個(gè)用于處理啟動(dòng)完成之前的內(nèi)存訪問(wèn),另一個(gè)用于處理啟動(dòng)完成之后的內(nèi)存訪問(wèn)。用戶可以向每個(gè)映射中添加自定義區(qū)域。
第一個(gè)內(nèi)存映射的訪問(wèn)限制就像一個(gè)安全模式。一旦應(yīng)用安全通過(guò)了這個(gè)階段,就會(huì)動(dòng)態(tài)切換到第二個(gè)內(nèi)存映射。
05易于實(shí)現(xiàn)
使用J-Link Control Panel,現(xiàn)在可以很容易地將“excluded”區(qū)域添加到第一個(gè)內(nèi)存映射中,J-Link在目標(biāo)應(yīng)用程序啟動(dòng)完成之前使用該映射。
單擊“Add region…”將彈出如下對(duì)話框:
配置之后,J-Link在初始化完成之前不會(huì)訪問(wèn)外部DDR RAM。
針對(duì)XC7Z010平臺(tái),我們?cè)贘-Link軟件中添加了XC7Z010的通用設(shè)置步驟。此配置中,XC7Z010的外部DDR RAM區(qū)域在默認(rèn)情況下會(huì)在啟動(dòng)完成之前被排除。未來(lái)我們可能對(duì)所有支持的芯片執(zhí)行此工作。
審核編輯:湯梓紅
-
應(yīng)用程序
+關(guān)注
關(guān)注
37文章
3271瀏覽量
57727 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
305瀏覽量
23750 -
J-Link
+關(guān)注
關(guān)注
0文章
84瀏覽量
22148 -
內(nèi)存映射
+關(guān)注
關(guān)注
0文章
14瀏覽量
7416
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論