打开ArduinoIDE,会看到只有setup和loop函数,还有几句注释,提示我们把运行一遍的程序放在setup中,把重复运行的部分放在loop中。但是,main函数呢?程序运行入口就是main函数,怎么可能没有main函数呢?
原来,Arduino将main函数写好了,放在main.cpp文件中。为什么不让用户自己写main函数呢?
main
在main函数中还做了一些重要的初始化工作,初始化之后有些函数才能正常工作,比如millis,PWM输出等。
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
进入main函数之后,先进行了两项初始化工作。init和initVariant。开发者将所有单片机共同的初始化部分放在init中,将不同型号单片机的初始化部分放在initVariant中,目前initVariant函数是空函数,是为以后可能的升级预留的。
init
init函数初始化了所有定时计数器,还初始化了AD转换模块,最后将串口0于bootloader断开,这样0,1号引脚能作为普通数字引脚使用。
init函数中代码量太多,还包含了大量的预编译命令来判断设备中是否有某个硬件,从而决定是否初始化。
在init函数中,