风筝
发表于: 2018-5-9 11:43:55 | 显示全部楼层

任何写过代码的人都可以告诉你,Arduino工程在最初调试时通常都不会像预期的那样工作。实际上,和编写代码比较,调试是创作过程的重要组成部分。但是,Arduino工程调试可能会稍微复杂一点。其中一个原因是Arduino没有专用的调试工具。


大多数应用软件使用调试器来帮助程序员找到错误并解决它们。然而Arduino没有这样的调试系统。 Arduino调试是管理Arduino项目更具挑战性的任务之一。与大多数其他IDE不同,Arduino IDE上没有官方的Arduino调试功能。许多用户对没有专用的Arduino调试工具感到惊讶。


在Arduino开发板上,一旦你运行你的程序,你就无法看到器件中发生了什么,以及代码是如何运行的。唯一的方法是以串口监视器或LED显示屏上的消息形式显示。而其他IDE通常具有利用断点、单步调试、调用堆栈、监视、本地/全局变量和其他组件的调试工具来仔细检查代码。


但是,调试Arduino代码与调试PC上的代码不同。这两者在处理方法上有很大不同。主要原因是Arduino代码通常用于控制物理输出或接收来自现实世界的物理输入,调试过程必须考虑这些因素。


实际上,这意味着Arduino开发人员经常需要寻求替代方法和工具来调试他们的代码。在这篇文章中,我们将详细介绍从Arduino代码调试到使用模拟器来调试Arduino开发板的所有内容。本文将为您提供生成可用的代码所需的全部信息。

Building-your-Arduino-project-1.png


设计阶段

在创建Arduino项目时,您的项目总体设计非常重要。从您开始为项目选择组件的那一刻起,脑海里就需要有对最终产品清楚地认识。

例如,如果您想要设计在Arduino开发板上运行一个点亮LED的示例,则需要在项目的设计阶段提供基础。示例代码和电路的总体设计将决定完成项目是什么样子。


构建工程

构建工程的过程才是真正给你的电路带来生命的地方。 在构建过程中,Arduino IDE将C ++代码编译成机器代码,然后直接上传到Arduino开发板。


Circuito.io代码

您从circuito.io获得的代码实际上是一个没有任何功能逻辑的测试代码。此测试代码用于检查您的所有组件连接是否正确并正常工作。这有助于检查硬件设置是否存在问题。 circuito.io还为您提供了所选不同组件的代码库。如果你的测试代码失败,那么你知道你需要开始调试过程。

test-code-1.png


第1步:检查您的硬件

如上所述,如果您的circuit0.io代码无法正常工作,则可能是您的硬件有问题。这意味着您需要开始硬件调试。


以下是硬件问题的一些基本故障排除步骤:

1.  检查接线 - 当你连接电路时,你应该做的第一件事情是检查你是否连接正确。如果您将跳线置于Arduino的错误引脚或面包板上的错误位置,程序将无法与组件交互。仔细检查所有组件和电线,确保一切安全。如果您的电路复杂,有时候最好从头开始,每次测试每个组件以消除问题。

2.  检查焊接 - 如果您在安装过程中需要焊接某些部件,请确保正确焊接。焊接不良的部件是技术故障的最常见原因之一。如果不确定,请重新进行焊接

soldering-arduino-debugging.png

3.  检查电源 - 如果电路仍然有问题,则需要检查电源。使用万用表,您可以检查两件事:

◼  测量组件引脚电源引脚时是否有电压。

◼  接线一致性测试。许多问题来自错误的连接。布线一致性测试将能够判断您的电线是否工作不正常。


第2步:代码调试

如果你的测试代码有效,是时候编写你自己的代码了。在编写自己的Arduino代码时,应遵循一些基本规则和最佳实践。按照下面的说明,如果您稍后需要调试,则会更容易:

●    以模块化编写代码并测试它们中的每一个。

●    为变量和函数提供有意义的名称

●    使用功能

●    使用常量而不是数字

●    写评论以解释编码选择以供将来参考

●    确保您的代码具有适当的缩进并始终保持可读。您可以使用Alt-t自动缩进整个草图。


编译

如果在尝试编译或上传代码到您的开发板时遇到编译错误,请检查语法错误、拼写错误等。使用正确的语法对确保编译代码至关重要。编译失败时,IDE将在其底部显示错误。但是,Arduino IDE生成的错误消息在其描述中有限,因此并不总是很有帮助。

如果您了解错误消息的含义,请尝试修复它指示的问题并重新编译。这是Arduino故障排除的一种便利形式。

但是,如果您解决了IDE上列出的错误,并且草图仍然无法编译,那么使用Google搜索解决问题的方案是一个不错的主意。

LMGTFY.png

常见的语法错误包含:

●    失踪 ;在每行的结尾处

●    错位或缺少括号{}

●    错字

●    未定义的变量和函数

syntax-error-Arduino-debugging.png


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指针、跳出和软件中断指令。

跳转到指定楼层
风筝
发表于: 2018-5-10 09:26:47 | 显示全部楼层

第4步:使用Arduino模拟器和仿真器

您可以使用Arduino模拟器和仿真器进行监视和调试。 Arduino模拟器让专家和业余爱好者比以往更容易编程和测试他们的想法,直到他们高效运行。硬件仿真是一个复杂的过程,虽然业内有许多令人惊叹的硬件调试工具,但这些工具对于制造商和业余爱好者来说非常有限。


但是,模拟器和仿真器在Arduino用户的调试工具中仍然占有一席之地。 Arduino仿真器支持在线调试,允许用户查看代码并确定出错地点。以下是使用模拟器的一些优点:


调试

如上所述,模拟器非常适合在语法和功能错误方面调试Arduino。模拟器适用于调试的原因是您可以编写代码并创建电子电路来测试代码的完整性。一些模拟器将为您提供有限的硬件库来测试,而其他模拟器将允许您开发复杂的虚拟环境。现在,你甚至可以使用模拟器来渲染3D项目。


你可以看到程序的执行情况

模拟器提供的最大优点之一就是透明。运行模拟器时,您可以确切了解代码的工作方式并找出可以改进的方式。这使您可以运行新代码而不用担心会损坏您的电路板或设备。


与IDE和硬件设置相比,模拟器允许用户纠正功能性编程错误。没有模拟器,只能解决代码中的非功能性技术错误,如语法错误。这使得模拟器成为新用户的理想选择,他们在到达成品之前需要经历大量的反复试验。通过模拟器测试代码确保硬件保持运行,节省时间和金钱。


绘图和记录

模拟器不仅允许您测试代码的运行方式,还允许您记录和绘制生成的数据。您可以记下您的编程数据并将其绘制在Excel等外部程序中。在程序和其他设备上记录数据有助于开发可帮助优化代码。

Arduino-IDE-serial-plotter.png


实验

在实验方面,模拟器和仿真器也很难被取代。如果没有模拟器,用户只能基于其理论知识创建代码,并且尝试使用新代码和新组件(特别是在错误导致硬件损坏时)的机会有限。使用模拟器,您可以在虚拟环境中测试代码并尝试新的想法,而不用担心最终结果。

experimenting-with-arduino.jpg


试验arduino测试新组件

同样,模拟器为您提供了一种在决定购买之前测试组件的方法。通过这种方式,您可以查看部件是否对您的项目有用,然后将其整合到您的整体环境中。这确保您不会浪费钱购买几乎没有用的零件。


为电子电路创建原理图

在构建电子电路时,您可以使用模拟器来设计、构建和预览原理图。这削减了大量需要手动绘制电子电路蓝图的工作,节省了您的时间。此外,它还可确保最终电路设计得到充分优化。


流行的模拟器

1.  Tinkercad电子实验室(前称circuit.io)

Circuits.io平台使用户可以通过电路仿真器轻松模拟真实世界的电子设备。该在线模拟器允许用户拖入Arduino开发板并开始编程。它还为用户提供电路图制造商、万用表测量工具和示波器。这款Arduino仿真器可让您从头开始构建您的设计,同时使您能够精确测量整个电路中的电源。

2.  Virtual Breadboard

Virtual Breadboard已经成为当今最强大、最先进的Arduino模拟器之一。Virtual Breadboard已经在电子电路行业发展,现在可以模拟Arduino设备、Netduino和PIC微控制器。在启动时,用户可以访问完整的虚拟开发环境,在那里他们可以直接编程到Arduino开发板。同样值得注意的是,它也可以作为AVR仿真器。


调试Arduino并不是很困难

当你开始使用Arduino开发板时,调试看起来可能是一个复杂的过程,但是如果你将其分解成多个步骤,你可能会克服这些问题并在此过程中学到很多东西。


正如您在本指南中看到的,有各种各样的外部工具可以帮助您,但调试的最佳方式是通过试验和错误,确定学习过程中的故障并随时修复它们。


另一种方法可以帮助你减少遇到的错误的数量,就是严格遵守语法。这将确保在需要调试代码时,您不必筛选在编写期间可能已被消除的语法错误。


与带有板载调试器的IDE相比,调试Arduino会非常不方便。如果您在通过第三方调试器进行测试、编译和运行代码之前进行测试,那么您将很有可能生成高质量的代码。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-21 20:36 , Processed in 0.052799 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表