Atmel Studio 7 如何编译和调试 Arduino 代码
How Atmel Studio 7 compile and debug Arduino code?
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++项目。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 当回溯以零开始时,如何调试崩溃
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在VS调试器中监视映射条目
- 使用调试/崩溃报告将应用程序部署到客户端
- VC++本机单元测试,找不到调试符号
- 人脸跟踪arduino代码的优化
- vscode下的Arduino代码出现意外编译错误
- 如何在C++生成器中禁用"使用调试.dcus"
- Arduino从Txt读取整数
- Arduino C++在构造函数中用参数声明对象数组
- 使用vscode调试时,GDB意外退出
- 即使使用调试编译标志,表达式也是"optimized out"
- 如何调试无法编译的Arduino程序?
- 调试在 Arduino MKR1000上运行的 Arduino Uno 代码
- 如何调试为什么Arduino会中断while循环
- Atmel Studio 7 如何编译和调试 Arduino 代码