调试时Memory窗口中Flash内容不更新的原因和解决办法

描述

问题

调试时在代码中对Flash进行写操作时(比如Bootloader对Code Flash进行升级操作,Application对Data Flash进行写操作),Memory窗口中Flash内容不更新。

原因

正常情况下,Flash对应Memory区域在ddf(device description file)文件中的AccType是R,表示调试器对Flash只读,不能修改Flash的内容:

Memory

Memory Configuration窗口中(Memory Configuration窗口可以通过对应的仿真器 > Memory Configuration打开)Flash默认Type是Read only,,对应的Cache Type是ROM/Flash:

Memory

Memory

对于Cache Type是ROM/Flash的Memory区域,调试器会认为对应Memory区域的值在调试过程中不会改变,所以调试器在调试过程中不会去更新对应Memory区域的值,导致即使对应Memory区域的值实际已经更新了,但是Memory窗口中的值却没有更新:

Memory

解决办法

前面介绍了造成调试时Memory窗口中内容不更新的原因是因为对应Memory区域的Cache Type是ROM/Flash,而Cache Type是ROM/Flash是因为ddf文件里面对应Memory区域的AccType是R,下面介绍对应的解决方法:

1.Disable Debugger Cache

使能Disable Debugger Cache(Disable Debugger Cache菜单可以通过对应的仿真器 > Disable Debugger Cache使能)之后,调试器将不会使用cache,所有的访问都会映射到目标系统:

Memory

Memory

2. 修改Flash对应Memory区域的Cache Type为RAM

Memory

Memory

需要在Memory Configuration窗口中将对应Flash对应Memory区域的Cache Type改成RAM(选中对应Memory区域,点击Edit,在Edit Memory Range窗口中选择Cache Type为RAM),这样调试器就会认为对应Memory区域的值在调试过程中会改变,从而会去读取目标系统对应Memory区域,在Memory窗口中更新对应Memory区域的值:

Memory

Memory

3. 修改ddf文件中Flash对应Memory区域的AccType为RW

在IAR安装目录armconfigdebugger下找到对应ddf文件,然后修改Flash对应Memory区域的AccType为RW。修改之后重新打开IDE,对应Memory Configuration窗口会加载更新的ddf文件:

Memory

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分