我知道这个问题很笼统,但我找不到一个教程或一个好的编码方法来转换 Arduino 代码(我的意思是我们在 Arduino 软件上编写的代码,对于Arduino Uno或Mega或 . .. ) 即使是小样本。
有教程吗?
我只是想学习技术,我知道这取决于项目。
我知道这个问题很笼统,但我找不到一个教程或一个好的编码方法来转换 Arduino 代码(我的意思是我们在 Arduino 软件上编写的代码,对于Arduino Uno或Mega或 . .. ) 即使是小样本。
有教程吗?
我只是想学习技术,我知道这取决于项目。
Arduino代码或多或少是C代码。
Arduino的独特之处在于代码是预处理的(例如,它们通过建立setup
和loop
函数提供简单的钩子)并且有一个托管的构建/上传过程来处理板限制、包含、库等......
当然可以自己使用相同的工具包来构建和运行代码,我就是这样做的。Arduino 和 GCC,仅使用 makefile 编译和上传程序是我发现的最有用的链接,涵盖了您需要开始的步骤。
正如我所说,我已经离开了 Arduino IDE,自己走上了这avr-gcc
条路,因为如果你了解 GNU 工具,你可以做更强大的事情——比如使用 C++ 标准库。我错过了我vector
的s,我能说什么。avr-libc在完整的 C++ 功能方面相当落后,因此很难塞入STL,但Andy Brown 已经让大部分功能发挥作用。
把这些东西放在一起,你就有了一个相当强大的开发环境。
(编辑:我在写我自己的答案时错过了马特答案中非常有用的链接。所以让我们说下面是链接的非技术摘要)。
马特答对了。我想添加更多信息。
了解Arduino编程的关键在目录Arduino-1.0\hardware\arduino\cores\arduino
您将找到包含以下内容的main.cpp
文件:
#include <Arduino.h>
int main(void)
{
init();
#if defined(USBCON)
USB.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
“setup()”和“loop()”(如果您阅读了 Arduino 文档,甚至是“serialEventRun()”)是否会响铃?:-)
Arduino 只隐藏了这一点。
Arduino 使用 C++ 语言。当然,如果你自己用 avr-gcc 编译你的代码,你可以使用 C,但是 Arduino IDE 的配置方式,它是纯 C++。
但是,由于微控制器并未真正适应面向对象的开发,因此缺少一些功能。我想到了“新”和“删除”运算符。它们不存在,因此开箱即用,在使用 Arduino 开发时应避免使用堆。这就是为什么如果你想使用一些标准的 C++ 库你应该小心。它们可能不适用于微控制器编程(太多的内存操作)。
在该Arduino-1.0\hardware\arduino\cores\arduino
目录中,还可以看到 Arduino 库的实现。它允许查看存在哪些“低级”微控制器功能(来自 avr-libc)以及如何实现自己的库和工具。
顺便说一句,正如您想知道如何在 C 中移植 Arduino 代码,avr-libc 是一个 C 库而不是 C++ 库。因此,您可以看到 Arduino 如何将其 C++ 代码包装在 C 代码上。
在File/Preferences
菜单中,您可以选中“查看详细输出”以查看用于构建最终 Arduino 二进制文件的参数和文件(以及临时构建目录的位置)。
最后,您还必须知道 Arduino 板在您的代码中嵌入了引导加载程序。它简化了从 Arduino IDE 到 Arduino 板的部署。所以 Arduino 板实际上包含的代码比你自己的要多。
这不是一个转换教程,而是一篇关于 arduino 的 hello world 背后的精彩文章:
Arduino internals 之旅。你好世界实际上是如何工作的?