完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一.软件断点
软件断点设置后,断点处的代码如果是存放在SRAM中,相应的一条指令(C语言中的一行代码可能对应多条处理器指令)会被调试器(debugger)替换成cortex-m3的BKPT指令,当程序运行到这一BKPT指令时,处理器会被停机(halt),用户可以用调试器做出相应的操作。用户在操作完成继续执行指令时,原来C语言中的那一条指令会被调试器重新写入到该地址,并且取消停机,处理器从这一指令开始继续执行程序。 当然,以上操作需要断点处的指令所在地址是SRAM等可写的存储器,如果是ROM等不可写存储器,就只能使用CM3处理器通过FBU提供的硬件断点功能(在检测到程序执行到某一地址时,由处理器硬件自动停机),但是硬件断点最多只有8个,而软件断点的个数没有限制。 二.单步执行 典型情况是,要执行单步执行,处理器已经在debugger的控制下停机,这时处理器处于调试模式(debug state)。用户通过软件执行单步执行时,实际上debugger会通过DAP向 处理器中DHCSR寄存器的C_STEP写1,使处理器退出调试模式并执行以下三步操作: 1.根据中断状态执行以下操作中的一种: 1)没有将要进入的中断,则直接执行一条指令 2)有被挂起的中断,且该中断的优先级允许它被执行,则会进入该中断对应的服务函数 3)执行下一条指令,并由此产生了一次中断 注意:2)和3)都会导致一次中断压栈操作 2.将 DFSR.HALTED设置为1 3.回到调试模式 另外,如果DHCSR.C_DEBUGEN为0,则debug事件并不能使处理器被停机,而是进入debug monitor中断,在该中断中也可以执行单步操作(当然也可以通过读取存储器或外设等进行调试),基本原理和停机时的单步执行类似,可以参考ARMv7-M Architecture Reference Manual的C1-696页。 |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1178浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 03:36 , Processed in 1.611228 second(s), Total 49, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号