是否有将Arduino代码转换为C代码的方法或教程?

时间:2012-04-24 23:40:14

标签: c embedded arduino

我知道这个问题很通用,但我找不到一个教程或一个很好的编码方式来转换Arduino代码(我的意思是我们在Arduino软件上编写的代码,它对{{3}无关紧要}}或Arduino Uno或...)即使是一个小样本。

有教程吗?

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

3 个答案:

答案 0 :(得分:13)

Arduino代码 ,或多或少,C代码。

Arduino发生的独特之处在于代码已经过预处理(例如,它们通过建立setuploop函数来提供简单的挂钩)并且具有托管构建/上载过程照顾董事会限制,包括,图书馆等...

当然可以自己使用相同的工具包来构建和运行代码,这就是我的工作方式。 Arduino and GCC, compiling and uploading programs using only makefiles 是我发现的最有用的链接,涵盖了入门所需的步骤。

正如我所说,我已离开Arduino IDE并自行采用avr-gcc路由,因为如果你了解GNU工具,你可以做更强大的事情 - 比如使用C ++标准库。我错过了vector,我能说什么。 avr-libc在完整的C ++功能方面落后了很多,因此很难填入STL,但Andy Brown has gotten much of it working

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

答案 1 :(得分:6)

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

马特回答说得对。我想补充一些其他信息。

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

答案 2 :(得分:1)

这不是一个转换教程,而是关于arduino的hello world背后的一个非常好的写作:A TOUR OF THE ARDUINO INTERNALS: HOW DOES HELLO WORLD ACTUALLY WORK?