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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16719|回复: 8

[拓展] Arduino程序main函数结构解析

[复制链接]
发表于 2017-7-27 23:52 | 显示全部楼层 |阅读模式

[md]在进行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都是单核的,因此程序运行都是单线程的,在实际开发过程中,要处理好任务间的顺序与关系,避免某一操作影响其后的操作的正常进行。[/md]
发表于 2017-8-27 11:23 | 显示全部楼层
399/1回复惨案
发表于 2017-11-21 11:05 | 显示全部楼层
谢谢,给新人解惑了
发表于 2018-4-2 22:11 | 显示全部楼层
谢谢,给新人解惑了
发表于 2019-4-13 22:29 | 显示全部楼层
那setup函数和loop函数之外的语句什么时候执行呀,比兔setup之前的变量定义什么的

点评

之外语句不会执行,变量定义是变量定义,相当于全局变量  详情 回复 发表于 2019-4-16 00:39
 楼主| 发表于 2019-4-16 00:39 | 显示全部楼层
Vistar 发表于 2019-4-13 22:29
那setup函数和loop函数之外的语句什么时候执行呀,比兔setup之前的变量定义什么的 ...

之外语句不会执行,变量定义是变量定义,相当于全局变量
发表于 2019-11-26 20:27 | 显示全部楼层
Arduino + FreeRTOS,不会进入 loop()
发表于 2020-2-29 22:23 | 显示全部楼层
谢谢,给新人解惑了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:38 , Processed in 0.139819 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表