我知道这个问题很通用,但我找不到一个教程或一个很好的编码方式来转换Arduino代码(我的意思是我们在Arduino软件上编写的代码,它对{{3}无关紧要}}或Arduino Uno或...)即使是一个小样本。
有教程吗?
我只是想学习这项技术,我知道这取决于项目。
答案 0 :(得分:13)
Arduino代码 ,或多或少,C代码。
Arduino发生的独特之处在于代码已经过预处理(例如,它们通过建立setup
和loop
函数来提供简单的挂钩)并且具有托管构建/上载过程照顾董事会限制,包括,图书馆等...
当然可以自己使用相同的工具包来构建和运行代码,这就是我的工作方式。 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?