問題
調試時在代碼中對Flash進行寫操作時(比如Bootloader對Code Flash進行升級操作,Application對Data Flash進行寫操作),Memory窗口中Flash內容不更新。
原因
正常情況下,Flash對應Memory區(qū)域在ddf(device description file)文件中的AccType是R,表示調試器對Flash只讀,不能修改Flash的內容:

Memory Configuration窗口中(Memory Configuration窗口可以通過對應的仿真器 > Memory Configuration打開)Flash默認Type是Read only,,對應的Cache Type是ROM/Flash:


對于Cache Type是ROM/Flash的Memory區(qū)域,調試器會認為對應Memory區(qū)域的值在調試過程中不會改變,所以調試器在調試過程中不會去更新對應Memory區(qū)域的值,導致即使對應Memory區(qū)域的值實際已經更新了,但是Memory窗口中的值卻沒有更新:

解決辦法
前面介紹了造成調試時Memory窗口中內容不更新的原因是因為對應Memory區(qū)域的Cache Type是ROM/Flash,而Cache Type是ROM/Flash是因為ddf文件里面對應Memory區(qū)域的AccType是R,下面介紹對應的解決方法:
1.Disable Debugger Cache
使能Disable Debugger Cache(Disable Debugger Cache菜單可以通過對應的仿真器 > Disable Debugger Cache使能)之后,調試器將不會使用cache,所有的訪問都會映射到目標系統(tǒng):


2. 修改Flash對應Memory區(qū)域的Cache Type為RAM


需要在Memory Configuration窗口中將對應Flash對應Memory區(qū)域的Cache Type改成RAM(選中對應Memory區(qū)域,點擊Edit,在Edit Memory Range窗口中選擇Cache Type為RAM),這樣調試器就會認為對應Memory區(qū)域的值在調試過程中會改變,從而會去讀取目標系統(tǒng)對應Memory區(qū)域,在Memory窗口中更新對應Memory區(qū)域的值:


3. 修改ddf文件中Flash對應Memory區(qū)域的AccType為RW
在IAR安裝目錄armconfigdebugger下找到對應ddf文件,然后修改Flash對應Memory區(qū)域的AccType為RW。修改之后重新打開IDE,對應Memory Configuration窗口會加載更新的ddf文件:

-
FlaSh
+關注
關注
10文章
1720瀏覽量
154831 -
調試
+關注
關注
7文章
623瀏覽量
35414 -
Memory
+關注
關注
1文章
80瀏覽量
30453 -
代碼
+關注
關注
30文章
4947瀏覽量
73291
原文標題:調試時Memory窗口中Flash內容不更新
文章出處:【微信號:IAR愛亞系統(tǒng),微信公眾號:IAR愛亞系統(tǒng)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
MDK調試時出現MEMORY MISMATCH錯誤的原因及解決方法
如何在調試時查看Flash中的內容
蜂鳴器不響原因以及解決辦法
STM32燒錄出現The core is locked up的原因及解決辦法
音箱沒聲音的原因和解決辦法
汽車空調不制冷的十種原因及解決辦法
電感嘯叫的原因和解決辦法

調試時Memory窗口中Flash內容不更新的原因和解決辦法
評論