Atmel Studio 7 如何编译和调试 Arduino 代码

How Atmel Studio 7 compile and debug Arduino code?

本文关键字:调试 Arduino 代码 编译 Studio 何编译 Atmel      更新时间:2023-10-16

Atmel在他们的网站上说:

Atmel Studio 7 具有在 Arduino 开发环境中创建的项目的无缝一键式导入功能。您的草图(包括它引用的任何库)将作为C++项目导入到 Studio 7 中。导入后,您可以利用 Studio 7 的全部功能来微调和调试您的设计。Atmel Studio 7 完全支持 Arduino Zero 板上功能强大的嵌入式调试器。对于其他 Arduino 板,可以使用暴露调试连接器的扩展适配器,或者切换到众多可用的 Xplained-Mini/PRO 板之一,以充分利用 Atmel 硬件生态系统。无论你选择什么,你一定会做出一些惊人的东西。

我想知道它是如何工作的?它只是一个插件(视觉微)意味着我们仍然需要安装 Arduino 软件吗?还是他们有自己的编译器和调试器?

要完成Danny_ds答案:

Arduino(和8位AVR)的"标准"Atmel编译器现在是avr-gcc,GCC代表GNU编译器集合(所以,一个自由软件工具)。

它是Arduino IDE以及Atmel Studio使用的工具链。请注意,Atmel Studio 是可配置的,它可以使用其他工具链/编译器(有人告诉我它至少存在 8 个 AVR 编译器)。

要了解如何在 Atmel Studio 中导入 Arduino 草图,请更好地理解什么是 arduino:

  • 由 Atmega328 芯片供电的"面包板"
  • 一个库(以前#include <Arduino.h> Program.h IIRC 时导入的 API)
  • 一个IDE,它完成所有的编辑器和"makefile"工作

让我们弹出堆栈:

首先,您可以使用自己的编辑器和makefile清除Arduino IDE。请参阅 github 上的 Arduino Makefile,以便轻松切换到此内容。这样做,您可能需要在草图中添加Arduino.h包含。但是您可以完全控制源代码树处理。这就是我早期退出Arduino IDE时的动机,因为那时不可能在同一个草图中使用2个库,这是Arduino-Makefile允许的。

其次,如果您不打算使用 Serial 类(驱动 UART/USB 接口与 Duino 进行控制台文本通信),那么删除依赖项就会受到诱惑......我做了尝试,我得出的结论是重写像setMode()digitalRead()和写作等函数......很明显:只需与您的代码并排打开 PDF 数据表并相应地设置位。

ADC转换、定时器/计数器管理、EEPROM读/写甚至UART连接驱动都更加棘手,因为它们意味着直接驱动AVR I/O寄存器,并了解您正在与之交互的子系统...但并非不可能!

此外,除了Arduino之外,很可能还有(免费)库来推动这些工作。

完成此步骤后,您的源代码树可以按原样在 Studio 中导入(假设您的编译器仍在 GCC 上设置,并且 Atmel Studio 知道您的依赖项),它将无缝编译。

因此,Atmel Studio 只需在项目中导入 Arduino 库(并可能添加一些标头包含,因为我们必须手动完成)即可将其编译为本机项目。

请注意,插入一些现有文件,特别是整个现有目录对于 Studio 来说是一个痛苦的过程。

Arduino代码只是普通C++代码(包括一些C++库)。

不同之处在于,在Arduino IDE中,您看不到所有代码。例如,main()在幕后隐藏和编译。

在 Arduino 草图中,只有setup()loop()可见,但它们是从隐藏的main()调用的(反复调用loop())。

因此,对于 Atmel C++ 编译器来说,编译在 Arduino IDE 中创建的草图应该没有问题,因为它已经是一个完整的C++项目。