|
任何写过代码的人都可以告诉你,Arduino工程在最初调试时通常都不会像预期的那样工作。实际上,和编写代码比较,调试是创作过程的重要组成部分。但是,Arduino工程调试可能会稍微复杂一点。其中一个原因是Arduino没有专用的调试工具。
大多数应用软件使用调试器来帮助程序员找到错误并解决它们。然而Arduino没有这样的调试系统。 Arduino调试是管理Arduino项目更具挑战性的任务之一。与大多数其他IDE不同,Arduino IDE上没有官方的Arduino调试功能。许多用户对没有专用的Arduino调试工具感到惊讶。
在Arduino开发板上,一旦你运行你的程序,你就无法看到器件中发生了什么,以及代码是如何运行的。唯一的方法是以串口监视器或LED显示屏上的消息形式显示。而其他IDE通常具有利用断点、单步调试、调用堆栈、监视、本地/全局变量和其他组件的调试工具来仔细检查代码。
但是,调试Arduino代码与调试PC上的代码不同。这两者在处理方法上有很大不同。主要原因是Arduino代码通常用于控制物理输出或接收来自现实世界的物理输入,调试过程必须考虑这些因素。
实际上,这意味着Arduino开发人员经常需要寻求替代方法和工具来调试他们的代码。在这篇文章中,我们将详细介绍从Arduino代码调试到使用模拟器来调试Arduino开发板的所有内容。本文将为您提供生成可用的代码所需的全部信息。
设计阶段 在创建Arduino项目时,您的项目总体设计非常重要。从您开始为项目选择组件的那一刻起,脑海里就需要有对最终产品清楚地认识。 例如,如果您想要设计在Arduino开发板上运行一个点亮LED的示例,则需要在项目的设计阶段提供基础。示例代码和电路的总体设计将决定完成项目是什么样子。
构建工程
构建工程的过程才是真正给你的电路带来生命的地方。 在构建过程中,Arduino IDE将C ++代码编译成机器代码,然后直接上传到Arduino开发板。
Circuito.io代码 您从circuito.io获得的代码实际上是一个没有任何功能逻辑的测试代码。此测试代码用于检查您的所有组件连接是否正确并正常工作。这有助于检查硬件设置是否存在问题。 circuito.io还为您提供了所选不同组件的代码库。如果你的测试代码失败,那么你知道你需要开始调试过程。
第1步:检查您的硬件 如上所述,如果您的circuit0.io代码无法正常工作,则可能是您的硬件有问题。这意味着您需要开始硬件调试。
以下是硬件问题的一些基本故障排除步骤: 1. 检查接线 - 当你连接电路时,你应该做的第一件事情是检查你是否连接正确。如果您将跳线置于Arduino的错误引脚或面包板上的错误位置,程序将无法与组件交互。仔细检查所有组件和电线,确保一切安全。如果您的电路复杂,有时候最好从头开始,每次测试每个组件以消除问题。 2. 检查焊接 - 如果您在安装过程中需要焊接某些部件,请确保正确焊接。焊接不良的部件是技术故障的最常见原因之一。如果不确定,请重新进行焊接
3. 检查电源 - 如果电路仍然有问题,则需要检查电源。使用万用表,您可以检查两件事: ◼ 测量组件引脚电源引脚时是否有电压。 ◼ 接线一致性测试。许多问题来自错误的连接。布线一致性测试将能够判断您的电线是否工作不正常。
第2步:代码调试 如果你的测试代码有效,是时候编写你自己的代码了。在编写自己的Arduino代码时,应遵循一些基本规则和最佳实践。按照下面的说明,如果您稍后需要调试,则会更容易: ● 以模块化编写代码并测试它们中的每一个。 ● 为变量和函数提供有意义的名称 ● 使用功能 ● 使用常量而不是数字 ● 写评论以解释编码选择以供将来参考 ● 确保您的代码具有适当的缩进并始终保持可读。您可以使用Alt-t自动缩进整个草图。
编译 如果在尝试编译或上传代码到您的开发板时遇到编译错误,请检查语法错误、拼写错误等。使用正确的语法对确保编译代码至关重要。编译失败时,IDE将在其底部显示错误。但是,Arduino IDE生成的错误消息在其描述中有限,因此并不总是很有帮助。 如果您了解错误消息的含义,请尝试修复它指示的问题并重新编译。这是Arduino故障排除的一种便利形式。 但是,如果您解决了IDE上列出的错误,并且草图仍然无法编译,那么使用Google搜索解决问题的方案是一个不错的主意。
常见的语法错误包含: ● 失踪 ;在每行的结尾处 ● 错位或缺少括号{} ● 错字 ● 未定义的变量和函数
Arduino拥有一个大型的开源社区,其中包含大量的Arduino故障排除指南,可帮助您识别代码问题。一旦你解决了问题,并且你的代码工作,点击运行。
运行代码 如果您的代码编译并成功上载到开发板但未按预期运行,则需要开始调试。
串行监视器 如上所述,如果您的代码在尝试运行草图时失败,则需要开始调试代码。首先,思考并定义要打印哪些参数并使用串行监视器在屏幕上监视它们(您可以在此处了解串行打印的基础知识)。目的是打印该程序当前状态的概述。因此: ● 变量 ● 输入 - 传感器读数 ● 显示程序流的打印,如在“if”语句中查看条件是否被满足 ● 输出 - 例如将它们写入引脚之前的PWM值 ● 其他任何你认为重要的东西都可以打印到屏幕上
手动检查您的代码 评估代码质量并检查错误的一种好方法是手动检查代码。你可以这样做: 1. 从头开始编写代码并将其分解,以查看您是否在过程中犯了错误(最常见的是,这些将会是语法错误)。 2. 重温你的设计并询问你的主要逻辑是什么。用文字记下来,然后看看你的代码声明是否回答这个问题。有时当我们深入编程时,我们犯了一个错误,那就是关注小细节并忽略项目的总体方向。在这种状态下,很容易失去与最初想法的联系。 3. 通过您的代码并添加注释(尽可能多地)向您自己解释您正在尝试做什么。
第3步:使用外部软件调试工具 如果您手动检查您的代码并仍然无法找到问题,那么是时候使用高级调试工具了。尽管许多IDE都有自己的板载调试工具,但Arduino却没有。但是,您可以使用一些外部工具来确保代码正常运行。如果您需要高级调试和模拟选项,以下是一些最佳工具:
Visual Micro Visual micro是一个通过Microsoft Visual Studio提供的插件,用于在Arduino上创建跨平台程序。在Visual Micro中创建的任何遵守Arduino的代码都将被接受。 Visual Micro非常适合调试Arduino的协作团队,因为它支持共享代码和库编辑。代码可以跨越不同的平台创建,并在整个构建过程中与程序代码结合使用。 Visual Micro还提供GDB调试和串口、蓝牙和Wifi调试。
Atmel Studio Atmel Studio IDE是一款免费软件,提供有竞争力的调试工具来帮助解决代码错误。通过Atmel Studio,项目可以开发、编译并上传到相关的微处理器。和Arduino IDE一样,Atmel Studio的IDE使用相同的代码,这意味着您无需学习新的编程语言即可使用它。爱特梅尔对开源社区非常灵活,并支持.ino草图和C ++源代码。 Atmel Studio还使用DebugWire和JTAG提供非常好的调试功能。
DebugWire DebugWire是Atmel的一个协议,仅通过复位引脚来调试不带JTAG的许多ATTiny(例如ATTiny 13、85)和ATmegas(例如ATmega48 / 88/168/328)。Atmel并没有给出DebugWire协议的相关文档,但有些人已经反向出协议的大部分工程,并能够建立一些简单的调试器。 通过使用debugWIRE,可以完全读写所有内存,并完全控制执行流程。 它支持单步调试、运行到PC指针、跳出和软件中断指令。 |