在开发设备驱动,想要调试中断服务程序。已知在一行代码之后会产生中断,那么应该如何调试才能看到系统如何进入了中断服务程序呢?
目标机是一个PC,使用网线连接。我是在会产生中断的那一行代码处设置了断点,在ISR开始也设置了断点。然后当在产生中断的代码处停止后,我attach了sytem任务和我驱动发送数据的任务。可是再执行一行代码,系统还是没有能进入我写的ISR,
恳请各位不吝指导!谢谢啦
共3条
1/1 1 跳转至页
请教:Tornado如何使用系统模式调试?

ISR的时效性很强,而且没有任务上下文,我觉得用调试模式来调,可能会存在一些问题。如果有以太网的话,调试起来应该比较方便,可以考虑开一个telnet终端,用logMsg()进行打印调试。虽然很原始,但也比较有效。
调ISR首先要看ISR是否在合适的情况下被触发。再看执行的情况是否正确。
关于调试ISR是否被触发,可以在ISR的入口就加LogMsg进行打印跟踪。---注意:如果你的ISR与其它ISR共享了一个中断源,要判断到底是哪个中断源产生的中断。最好有一个独占的中断请求线用于调试。另外,有些芯片支持软件置中断,,如果有这个条件,调试起来就更加方便了。
ISR可以被触发之后,就可以用logMsg进行ISR的功能性调试了。
ISR中最需要注意的有:共享中断中的中断源有效判断,边沿触发的中断的中断标识清除,不调用任何导致阻塞的函数和执行导致阻塞的操作,ISR尽量小。
ISR与任务通信的方式比较多,但出于效率考虑,在VxWorks中,最好不要使用复杂的系统功能如管道。可以考虑使用的天然互斥但不阻塞的数据结构有:环型缓冲,链表。。效率较高的系统调用是消息队列和信号量释放(semGive)。
共3条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持数字示波器】树莓派PICO调试器官方固件本地化部署实践被打赏24分 | |
【换取手持数字示波器】分享一个KEIL无法识别CMSIS-DAP调试器的解决办法被打赏20分 | |
【换取手持数字示波器】分享一个自制的ArduinoNano扩展板底板被打赏23分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 |