Answers:
如Majenko的回答所述,Arduino IDE不提供断点机制,但Atmel Studio确实支持断点。[*]
但是,如果您有一个开关和一个LED,则可以以提供断点某些好处的方式跟踪程序的进度。您将添加一个子程序,例如BPReport()
,该程序通过串行输出或LCD报告关键变量的值,然后点亮LED并等待直到按下和释放开关为止,并带有反跳。BPReport()
想要无条件断点的任何地方都可以调用例程。对于条件断点,可以有一个例程BPReportIf(cond)
,BPReport()
如果cond
为true 则调用 该例程。如果您不想通过串行输出,则可以使用多个LED或LCD,并且如果需要外部中断控制,则可以使用多个开关(例如,cond
可以测试其中一个额外的开关)。
[*]一些硬件调试器每次添加,更改或删除断点时都会修改下载的代码。这种用法将使闪存消耗的速度比偶尔下载闪存的速度更快。如果芯片已大量用于此类调试,请不要在生产系统中使用该芯片。
尽管马延科的回答是正确的,但还有其他选择。
至于majenko所说的真正的硬件调试,我会说:
完全不同类别中的另一个调试选项是组织代码,以使决策逻辑(独立于硬件)和操作(独立于硬件)完全分开。
然后将您的草图编译为本地程序,并在本地计算机上调试“决策逻辑”。此方法不允许进行“硬件调试”。此方法还可以进行单元测试。
请注意,您的本地计算机可能是32位或64位苦味剂,而大多数Arduino是8位苦味剂,这将导致数据类型的差异,这是使用此方法时需要特别注意的一点。
在Arduino的调试库提供了一个简单的基于目标的调试器Arduino的草图。调试命令直接添加到草图中。在断点和断言上启动调试器命令外壳。
上面的屏幕截图显示了在Arduino Mega上运行的示例草图,其中Arduino输出由应用程序使用,而Serial1用于调试器外壳。
草图调试命令
调试Shell命令
所有调试外壳程序命令都可以缩写为单字符命令。有关更多详细信息,请参见自述文件。安装细节,示例草图和基准测试。