Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 微控制器JTAG调试_Debugging_Microcontroller - Fatal编程技术网

Debugging 微控制器JTAG调试

Debugging 微控制器JTAG调试,debugging,microcontroller,Debugging,Microcontroller,我正在经历各种调试方法,偶然发现了一个问题。在使用断点进行分步调试时,IDE GUI为程序的每个步骤提供寄存器值和内存位置值进行验证。我想知道这些值是通过JTAG从微控制器硬件获取的,还是通过模拟主机中的微控制器内核而得到的虚拟模拟结果?是否有任何方法通过IDE控制微控制器中的实时程序执行,并查看用于实时调试的寄存器和内存位置的实时值。事实上,您需要首先了解调试的含义。在调试模式下,计算机设置断点(程序入口地址),微控制器需要在此处停止并向IDE返回状态。 在您的情况下,寄存器值和内存状态在微控

我正在经历各种调试方法,偶然发现了一个问题。在使用断点进行分步调试时,IDE GUI为程序的每个步骤提供寄存器值和内存位置值进行验证。我想知道这些值是通过JTAG从微控制器硬件获取的,还是通过模拟主机中的微控制器内核而得到的虚拟模拟结果?是否有任何方法通过IDE控制微控制器中的实时程序执行,并查看用于实时调试的寄存器和内存位置的实时值。

事实上,您需要首先了解调试的含义。在调试模式下,计算机设置断点(程序入口地址),微控制器需要在此处停止并向IDE返回状态。 在您的情况下,寄存器值和内存状态在微控制器达到断点时直接从微控制器获取。 JTAG调试器根据您使用的硬件和软件的组合而具有多种功能。 在高级编程和实时调试/跟踪方面,选择正确的调试器并非易事。我建议您查看有关最常用的JTAG调试器的更多详细信息。
希望我已经回答了你的问题。

答案是:从MUC获取,而不是模拟。是的,可以控制执行并监视活动值。这就是JTAG的用途。我假设这是一个学术问题,因为您没有指定任何特定的MCU。@代码感谢您的回答。您能否简要介绍一下当每条指令进入IDE时会发生什么情况以及它如何反映在MCU中,即是将该指令转换为十六进制代码并发送到MCU执行,还是将命令发送到MCU以从程序内存中提取等效的十六进制代码并发送执行?断点是微控制器。如果遇到断点,MCU将自动停止,并通过JTAG通知调试器。单步执行也使用断点。通过JTAG传输的命令允许调试器设置和删除断点、读取和修改内存、读取寄存器等。JTAG是一种二进制协议。“Hexcodes”仅在调试器的UI中使用。@codo我知道在将hex文件加载到MCU时,flash工具和MCU之间会发生同步。在调试期间,我对IDE和MCU之间的同步更感兴趣,例如,在100行代码中,断点设置在IDE的第7行。IDE调试器如何确定需要通过JTAG发送断点命令的时间?换句话说,调试器如何知道第6行中的指令正在MCU中执行,因此下一步需要发送断点命令来停止MCU的执行过程。当您在IDE中设置断点时,IDE会将断点的地址发送给MCU。然后,MCU自己处理断点。它将在代码执行到达断点时停止,然后通知IDE已在断点处停止。IDE不需要主动执行任何操作。