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 不工作用于发布或调试模式选择的工具窗口
如何在不创建新项目的情况下更改 Atmel Studio 6 中 C++ 的 avr32-gcc C 编译器?