Arduino程序main函数结构解析
在进行Arduino开发时,没有像传统C/C++程序使用入口函数main。实际上main函数存在于Arduino核心库中,且仍然是程序的入口。在Arduino核心库中可见main.cpp文件,其内容如下:
```
#include <Arduino.h>
// Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (* /*func*/ )()) { return 0; }
// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }
void setupUSB() __attribute__((weak));
void setupUSB() { }
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
```
通过以上程序可见,Arduino程序中编写的setup和loop函数,都在main函数中调用了。loop的循环执行,是通过for循环实现的。
且每次loop结束后,都会进行串口事件(serialEvent)判断,也正是因为这种设计,Arduino提供的串口事件并不能实时响应。
通常Arduino使用的MCU都是单核的,因此程序运行都是单线程的,在实际开发过程中,要处理好任务间的顺序与关系,避免某一操作影响其后的操作的正常进行。 399/1回复惨案 谢谢,给新人解惑了:) 感觉很乱! 谢谢,给新人解惑了 那setup函数和loop函数之外的语句什么时候执行呀,比兔setup之前的变量定义什么的 Vistar 发表于 2019-4-13 22:29
那setup函数和loop函数之外的语句什么时候执行呀,比兔setup之前的变量定义什么的 ...
之外语句不会执行,变量定义是变量定义,相当于全局变量 Arduino + FreeRTOS,不会进入 loop() 谢谢,给新人解惑了
页:
[1]