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

Posted

技术标签:

【中文标题】Atmel Studio 7 如何编译和调试 Arduino 代码?【英文标题】:How Atmel Studio 7 compile and debug Arduino code? 【发布时间】:2016-01-14 17:38:34 【问题描述】:

Atmel 在他们的网站上声明:

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

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

【问题讨论】:

Atmel Studio 是基于 VS 隔离外壳的,也就是说是的,他们有自己的编译器、调试器、智能感知等。 您无需安装 Arduino 即可使用 Visual Micro 插件。这是可选的。 【参考方案1】:

完成 Danny_ds 回答:

现在用于 Arduino(和 8 位 AVR)的“标准”Atmel 编译器是 avr-gcc,GCC 代表 GNU Compiler Collection(因此,一个免费的软件工具)。

它是 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。请参阅Arduino Makefile on github 以轻松切换到此。 这样做,您可能必须在您的草图中添加 Arduino.h。但是您可以完全控制源代码树的处理。这就是我提早退出 Arduino IDE 时的动机,因为那时不可能在同一个草图中使用 2 个库,这是 Arduino-Makefile 所允许的。

其次,如果您不打算使用Serial 类(驱动UART/USB 接口与Duino 进行控制台文本通信),则很容易删除依赖项。 .. 我试过了,我得出的结论是,重写 setMode()digitalRead() 和 write 等函数只是 THE 显而易见的:只需打开 PDF 数据表支持您的代码并相应地设置位。

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

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

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

因此,Atmel Studio 只需在项目中导入 Arduino 库(并且可能添加一些头文件,因为我们必须手动执行此操作)以将其编译为本机项目。

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

【讨论】:

如果你是 AVR 怪胎,我猜你想成为,我刚开始写博客和关于在 8 位 AVR 上切换线程上下文的 repo:skz81.wordpress.com 并在集线器上找我...再见 !! :) ARM芯片怎么样? ARM 呢?这是一个完全不同的芯片架构。然后是一个完全不同的问题。如果您介意我的链接(线程),答案是一样的,ARM 和 AVR 几乎没有共同点。 谢谢,需要完善和完善;我在做这个工作 ! ^^ 在 AS7.0 和 ARM 与 Arduino 上; 注意 Atmel Studio,因为它能够为 Atmel ARM 编译,可能能够为 ARM 架构完成类似的工作。我对arduino ARM一无所知,因为我更喜欢使用Raspeberry Pi(和Arch Linux ARM),因为ARM板通常提供足够的CPU“能力”和大量内存(闪存作为RAM)。另外,我喜欢 David Braden(Raspeberry Pi 和 Elite Dangerous 的创造者!)【参考方案2】:

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

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

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

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

【讨论】:

以上是关于Atmel Studio 7 如何编译和调试 Arduino 代码?的主要内容,如果未能解决你的问题,请参考以下文章

Atmel Studio 7-静态库未定义函数参考

Atmel studio 不工作用于发布或调试模式选择的工具窗口

如何在不创建新项目的情况下更改 Atmel Studio 6 中 C++ 的 avr32-gcc C 编译器?

Win7补丁更新失败导致Atmel studio软件安装失败,如何解决?

Atmel Studio 中的 Arduino 产量

Atmel Studio:行尾出现垃圾错误