Arduino程序main函数结构解析-Arduino中文社区 - Powered by Discuz! Archiver

奈何col 发表于 2017-7-27 23:52

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都是单核的,因此程序运行都是单线程的,在实际开发过程中,要处理好任务间的顺序与关系,避免某一操作影响其后的操作的正常进行。

QAQC_Y 发表于 2017-8-27 11:23

399/1回复惨案

yangjf 发表于 2017-11-21 11:05

谢谢,给新人解惑了:)

疯狂的菜鸟 发表于 2018-3-17 18:01

感觉很乱!

epigone 发表于 2018-4-2 22:11

谢谢,给新人解惑了

Vistar 发表于 2019-4-13 22:29

那setup函数和loop函数之外的语句什么时候执行呀,比兔setup之前的变量定义什么的

奈何col 发表于 2019-4-16 00:39

Vistar 发表于 2019-4-13 22:29
那setup函数和loop函数之外的语句什么时候执行呀,比兔setup之前的变量定义什么的 ...

之外语句不会执行,变量定义是变量定义,相当于全局变量

szllee 发表于 2019-11-26 20:27

Arduino + FreeRTOS,不会进入 loop()

moso 发表于 2020-2-29 22:23

谢谢,给新人解惑了
页: [1]
查看完整版本: Arduino程序main函数结构解析