文档里是这样写的:
Hardware breakpoints differ from software breakpoints in that they do not
modify the target program. Hardware breakpoints are useful for setting
breakpoints in ROM memory or breaking on memory accesses instead of
instruction acquisitions. A breakpoint can be set for a particular memory read,
memory write, or memory read or write. Memory access breakpoints are not
shown in the Edit or Memory windows.
软件断点是人为的把原程序的某一条指令换成一条中断指令,程序执行到这里时,
产生中断,中断处理完后,再把原来的指令写回去。
而硬件断点则则只需要设置一个指令的地址(或其他参数),程序执行到这个地址
时,自动切换到中断,中断完成后,继续执行原来的程序。
其实软件断点就是在仿真环境下设置一个位置,程序执行到这条指令时就停下来
这时可以观察一下所关心的一些变量。再执行到这个断点时再观察一下,
这样可以分析程序是不是正确运行了。
硬件断点呢?只是指从地址方面来设置的吗?是不是与软件断点的区别就是
一个是从指令的角度一个是从地址的角度?
硬件断点一般有特殊的逻辑监测程序或者数据的地址总线,如果发现符合了
就暂时停止处理器或者给处理器返回一条跳转指令,跳到监控程序去。
我最早做得C30的仿真器就这么糊弄过去的
当时还没有jtag的概念,就只想到这么一个方法
用一条call debugpro指令替代,然后保存PC值
把所有的寄存器的值给HOSY然后做一系列的操作
让下一次执行的时候从
这条指令开始执行
幸好C30没有流水线(??),否则肯定完蛋