打印

断点功能

[复制链接]
302|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hanwe|  楼主 | 2020-7-24 22:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
仿真器的断点功能是如何实现的?

使用特权

评论回复
沙发
yufe| | 2020-7-24 23:00 | 只看该作者
仿真器应该就是用PC软件仿目标MCU,当然这还要一定的目标硬件配合,关键字是"仿"

使用特权

评论回复
板凳
llia| | 2020-7-24 23:03 | 只看该作者
应该是每条指令仿真完成后判断是否有断点

使用特权

评论回复
地板
hanwe|  楼主 | 2020-7-24 23:10 | 只看该作者

仿真器与调试软件进行数据传输的时候,指令是不是要去截获数据流,还是可以有别
的办法可以获得?软件是KEIL。

使用特权

评论回复
5
langgq| | 2020-7-24 23:13 | 只看该作者
就是PC与硬件相互通信

使用特权

评论回复
6
yufe| | 2020-7-24 23:16 | 只看该作者

JTAG仿真 这个是很成熟的了
说一下传统的51的仿真 属于临时发挥 瞎说的
1 首先要能实现PC和MCU的通信 通常用串口 所以一般仿真器是没法仿串口本身的
2 MCU端要驻留一段程序来和PC端的程序来进行交互
3 MCU的应用程序每执行一条指令后都要检查一下是否有断点 这个检查工作当然是交给驻留程序来完成了
4 如何实现运行一条指令后就转到驻留程序呢 可以这样子 让某外部中断一直处于有效状态 例如电平触发中断 这样MCU就得一直去响应中断 而MCU响应中断之前得先完成当前指令 这样就完成了单步的功能 那么断点功能也变得简单了 无非就是需要记录下断点的位置 然后“单步”到此暂停住就是了
5 接下来的寄存器观察变量观察也不是什么难事了 但是是个琐事 需要驻留程序去扫描各寄存器的值 需要仿真软件去调用编译器的MAP文件从而有目的的去扫描存储区

使用特权

评论回复
7
llia| | 2020-7-24 23:19 | 只看该作者
JTAG是调试器,和仿真器有本身区别

使用特权

评论回复
8
hanwe|  楼主 | 2020-7-24 23:30 | 只看该作者
我之前也想了很久,网上的这类信息比较少,有一个想法不知是否正确,我也看过之前的那种占用资源的仿真器的HEX代码,转换成汇编后有很多的RAM的数据定义看不懂,我起初的想法是通过程序的块区切换来完成断点操作,如果用户设定了断点,一旦执行到断点处,会跳入另一个区块执行等待程序,同时将寄存器的数据传给上位机,保存断点地址,跳出后指针恢复到原来的地址继续执行。所以这里又涉及到一个问题就是通讯协议,市面上的那种占用资源的仿真器都是使用MON51的协议,网上也没有公开协议,所以比较郁闷,感觉其他的东西花点时间总是能想出来的,但协议这东西……

使用特权

评论回复
9
langgq| | 2020-7-24 23:34 | 只看该作者
程序断点好弄,数据的就是3楼的办法

使用特权

评论回复
10
wangzsa| | 2020-7-24 23:37 | 只看该作者

严重影响执行速度

使用特权

评论回复
11
hanwe|  楼主 | 2020-7-24 23:40 | 只看该作者
哎,我再考虑考虑吧

使用特权

评论回复
12
guoyt| | 2020-7-24 23:43 | 只看该作者
是啊,仿真器应该就是用PC软件仿目标MCU

使用特权

评论回复
13
supernan| | 2020-7-24 23:49 | 只看该作者
这个是跟你所用的编程软件相关系的哈

使用特权

评论回复
14
yinxiangh| | 2020-7-24 23:53 | 只看该作者
至于具体是怎么实现的,肯定是编程软件跟仿真器存在一个数据协议的交互的

使用特权

评论回复
15
llia| | 2020-7-24 23:56 | 只看该作者
我平时只是用的,还没仔细的想想是怎样实现的呢

使用特权

评论回复
16
happy_10| | 2020-7-24 23:58 | 只看该作者
这个跟代码的仿真下载的机制是相关的哈

使用特权

评论回复
17
renyaq| | 2020-7-25 18:21 | 只看该作者
还有绕不过去的就是程序代码的连接编译的过程的

使用特权

评论回复
18
hanwe|  楼主 | 2020-7-25 18:32 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈        

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

979

主题

8749

帖子

4

粉丝