Angel实现调试器请求的功能
出处:nylyt 发布于:2008-12-23 10:29:51
Angel可以相应设置调试器查看存储器和处理器状态的请求。具体操作过程如下:
当调试器要求查看存储器内容时,Angel中的一个函数接收调试器想要查询的存储器的地址,然后将地址范围内的数据以字节流的方式复制到数据缓冲区中,数据以ADP数据包的形式返回调试器。
在Angel得到处理器控制权时,它将各寄存器的数据保存在一个数据块中。当调试器要求查看存储器内容时,保存寄存器值的数据块将被封存在一个ADP数据包中,返回到调试器;当调试器请求修改某寄存器内容时,Angel'改变数据块中的相应数据;当Angel释放对处理器的控制权时,该数据块被写回到各寄存器中。
(2)应用程序映像文件
当应用程序映像文件到目标系统时,调试器向目标系统上的Angel发送一系列的存储器写入ADP消息;Angel将这些数据写入到存储器中的相应位置。
存储器写入消息比其他的ADP消`患都要长。当用户将Angel移植到自己的目标系统中时,必须保证系统中的设备驱动程序可以处理长度超过256字节的消息。
存储器写入消息实际的长度可以在移植Angel时配置。
(3)设置断点
Angel使用3条未定义的指令来实现设置断点。这3条指令的编码如下所示。
·对于little-endian格式的ARM程序,使用指令OxETFDDEFE。
·对于big-endian格式的ARM程序,使用指令OxETFFDEFE。
·对于Thu血b程序,使用指令OxDEFE。
当调试器在目标代码的某个位置设置一个断点时,Angel首先保存该位置原来的指令,然后将该指令替换成一个未定义的指令。
当断点被删除,或者调试器需要查看包含断点在内的存储区域时,Angel将未定义指令恢复成原来的指令。
当调试器运行断点处的指令时,Angel将未定义指令恢复成原来的指令,并执行该指令。
当Angel在应用程序运行过程中检测到一条未定义的指令时,Angel执行的操作如下所示。
(1)对于ARM程序,读取(lr-4)处的指令;对于Thumb程序,读取(lr-2)处的指令。
(2)如果该指令是Angel中预定义的用于产生断点的未定义指令,Angel将执行下面的操作。
·停止当前应用程序的执行。
·向调试器发送一条消息,包括断点状态。
·循环查询调试器回应的命令。
(3)如果该指令不是Angel中预定义的用于产生断点的未定义指令,Angel将执行下面的操作。
·向调试器遇到了未定义的指令。
·循环查询调试器回应的命令。
上一篇:Angel的初始化
下一篇:Angel源代码的目录结构
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- 使用 PLECSPIL 开发嵌入式控件2024/9/9 17:08:41
- 什么是嵌入式系统?嵌入式系统的优缺点及应用2024/9/5 17:49:34
- KEIL编程小技巧2024/8/13 17:34:35
- 什么是MCU?一文快速了解MCU基础知识2024/7/15 17:39:55
- 嵌入式系统的新标准2024/6/26 17:20:38