我知道这个问题是通用的,但是我找不到一个教程或一个很好的编码方式来转换Arduino代码(我的意思是我们在Arduino软件上编写的代码,它对Arduino Uno或Mega或者无关紧要. ..)即使是小样本.
有教程吗?
我只是想学习这项技术,我知道这取决于项目.
Mat*_*att 13
Arduino的代码是,更多或更少的,C代码.
Arduino发生的独特之处在于代码是经过预处理的(例如,它们通过建立setup和loop函数提供简单的钩子),并且具有托管构建/上载过程,负责处理板限制,包括,库等...
当然可以自己使用相同的工具包来构建和运行代码,这就是我的工作方式.Arduino和GCC,仅使用makefile编译和上传程序是我发现的最有用的链接,涵盖了入门所需的步骤.
正如我所说,我已经离开了Arduino IDE并avr-gcc自己开始了这条路线,因为如果你了解GNU工具,你可以做更强大的事情 - 比如使用C++标准库.我错过了我vector的,我能说什么.avr-libc在完整的C++功能方面落后了很多,这使得很难在STL中加入,但是Andy Brown已经有很多工作了.
将这些东西放在一起,你就拥有了相当强大的开发环境.
(编辑:在编写我自己的答案时,我错过了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;
}
Run Code Online (Sandbox Code Playgroud)
做"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板实际上包含的代码比你自己的代码多.