单片机RAM可以打断点?

admin 2025-04-02 86人围观 ,发现115个评论

以前总是想着单片机RAM中要是能打断点,当某个地址的RAM单元满足条件的时候,停止运行的程序,以便观察现象,后来发现瑞萨的单片机真的有这个功能,这里就分享一下使用E1仿真器在开发环境CS+下通过内存断点来调试程序,活捉bug。

有一阵子,我使用瑞萨的RX21A单片机,程序也比较大。当时写出了一个bug,发现内存中的数据老是被无故修改,怀疑是内存越界访问了,实际上后来发现是数组越界了。当时排查比较麻烦,就研究了一下瑞萨E1仿真器配合开发环境CS+的内存断点功能,出奇的好用,这里给大家分享一下使用方法。

E1仿真器就是下图这款,小贵,1000+,不过一般有开发需要的肯定都有,首先申明一下不是打广告哈。但是瑞萨有一款便宜的简易仿真器却是没这个功能。这款仿真器功能比较强大。

图一

详细步骤如下:

1.首先把要观察的内存变量打印到watch里面。

图二

像这个变量,pag_line_last,把要观察的内存变量定义为全局的。如果是结构体里面的数组的话,不能把整个结构体打印出来,而是要直接把该数组元素打印出来:

图三

2.在打印出来的变量上右击鼠标,弹出对话框

图四

AcessBreak-SetWriteCombinationBreakTo-输入十进制数值,回车。这个数值就是要观察的条件之一。然后就看到该内存变量在Watch里面已经显示为断点

图五

3.这时候在VIEW-Events,在Events里面就能看到该断点了。

图六

图七

图八

弹出对话框

图九

这里面Address=0xC8B4就是要观察的绝对内存地址。AcessType可选为写/读/读写

图十

AcessSize也可以设定,按照自己实际的数据类型设置即可。

图十一

comparedata就是刚才输入的十进制数值。compareconditon可以选择等于或者不等于

图十二

总的来说,这个功能还是相当好用的,对于不好直接手撕代码去查找的内存问题,定位快速且精准。

注意:配合E1,瑞萨RX21A最多支持设置两个内存断点。

后来是用过的单片机像STM32,AT90CAN,AT91SAM,51,PIC等等都没见有类似的功能,如果在其他单片机上有使用过类似功能的同学可以探讨学习一下。

有瑞萨单片机使用经验的同学也可以一起探讨学习~~

猜你喜欢
    不容错过