9

我知道这个问题很笼统,但我找不到一个教程或一个好的编码方法来转换 Arduino 代码(我的意思是我们在 Arduino 软件上编写的代码,对于Arduino UnoMega或 . .. ) 即使是小样本。

有教程吗?

我只是想学习技术,我知道这取决于项目。

4

3 回答 3

13

Arduino代码或多或少是C代码

Arduino的独特之处在于代码是预处理的(例如,它们通过建立setuploop函数提供简单的钩子)并且有一个托管的构建/上传过程来处理板限制、包含、库等......

当然可以自己使用相同的工具包来构建和运行代码,我就是这样做的。Arduino 和 GCC,仅使用 makefile 编译和上传程序是我发现的最有用的链接,涵盖了您需要开始的步骤。

正如我所说,我已经离开了 Arduino IDE,自己走上了这avr-gcc条路,因为如果你了解 GNU 工具,你可以做更强大的事情——比如使用 C++ 标准库。我错过了我vector的s,我能说什么。avr-libc在完整的 C++ 功能方面相当落后,因此很难塞入STL,但Andy Brown 已经让大部分功能发挥作用。

把这些东西放在一起,你就有了一个相当强大的开发环境。

于 2012-04-24T23:45:05.850 回答
9

(编辑:我在写我自己的答案时错过了马特答案中非常有用的链接。所以让我们说下面是链接的非技术摘要)。

马特答对了。我想添加更多信息。

了解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 板实际上包含的代码比你自己的要多。

于 2012-04-25T06:48:56.307 回答
1

这不是一个转换教程,而是一篇关于 arduino 的 hello world 背后的精彩文章:
Arduino internals 之旅。你好世界实际上是如何工作的?

于 2012-05-25T17:57:20.983 回答