voidloop是什么?C语言中void的loop用法解析

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 C语言 正文

void loop() 这个函数名并不是 C 语言标准库的一部分,也不是 C 语言语法的关键字,它是一个特定于 Arduino 平台的函数

c语言voidloop
(图片来源网络,侵删)

void loop() 是 Arduino 程序的心脏,当一个 Arduino 程序上传并运行后,setup() 函数只执行一次,然后程序会不断地、重复地执行 loop() 函数,直到断电或复位。


void loop() 的详细解释

void 的含义

  • void 是一个返回类型关键字,它表示这个函数不返回任何值,你不能在 loop() 函数内部写 return some_value; 这样的代码。

loop 的含义

  • loop 是函数的名称,它被命名为 "loop"(循环)就是为了明确地告诉程序员,这个函数的核心作用是“循环执行”。

的含义

  • 这表示 loop 是一个函数,括号内可以包含参数,但 loop() 函数不接受任何参数,所以括号是空的。

loop() 函数的工作原理

一个标准的 Arduino 程序结构如下:

// 1. 包含 Arduino 核心库
#include <Arduino.h>
// 2. setup() 函数:只运行一次
void setup() {
  // 初始化代码放在这里
  // 设置引脚模式、串口通信等
  pinMode(LED_BUILTIN, OUTPUT); // 将板载LED引脚设置为输出模式
  Serial.begin(9600);          // 初始化串口通信,波特率为9600
}
// 3. loop() 函数:无限循环运行
void loop() {
  // 主要功能代码放在这里
  // 这段代码会一遍又一遍地执行
  digitalWrite(LED_BUILTIN, HIGH); // 点亮LED
  delay(1000);                     // 等待1秒
  digitalWrite(LED_BUILTIN, LOW);  // 熄灭LED
  delay(1000);                     // 等待1秒
}

执行流程:

  1. Arduino 上电或复位后,首先执行 setup() 函数,在这个例子中,它会设置 LED 为输出模式,并启动串口。
  2. setup() 执行完毕后,程序立即进入 loop() 函数。
  3. loop() 执行完其内部的所有代码(点亮LED -> 等待1秒 -> 熄灭LED -> 等待1秒)后,并不会退出程序。
  4. 程序会自动跳回 loop() 函数的开头,开始下一次循环。
  5. 这个过程会无限重复,直到你断开 Arduino 的电源或按下复位按钮。

loop() 函数的用途和重要性

loop() 是实现所有动态、交互式 Arduino 项目的核心,几乎所有需要持续执行的任务都在这里完成。

c语言voidloop
(图片来源网络,侵删)

常见用途:

  • 读取传感器数据:不断读取温度、湿度、光照等传感器的值。
  • 控制执行器:让电机转动、控制继电器开关、驱动舵机等。
  • 处理用户输入:检测按键是否被按下、读取串口接收到的数据。
  • 状态机:管理设备的不同工作状态(一个自动售货机有“待机”、“选择商品”、“出货”等状态)。
  • 游戏逻辑:在简单的游戏中更新玩家位置、检测碰撞等。

loop() 与其他编程语言/平台的对比

理解 loop() 的最好方法就是把它和你熟悉的编程概念进行对比。

概念 Arduino loop() 标准 C/C++ while(1) 循环 操作系统任务/线程
本质 一个由 Arduino 框架(基于 Wiring)定义的特殊函数。 一个通用的、无限循环的编程结构。 操作系统调度的执行单元。
执行方式 setup() 执行完毕后,自动进入并无限循环。 程序员手动在 main 函数中编写。 由操作系统内核创建、调度和运行。
阻塞与非阻塞 默认是阻塞的。loop() 内部有一个 delay(1000),整个程序都会暂停1秒。 默认是阻塞的,如果循环内有耗时操作,程序会卡住。 可以是非阻塞的,操作系统通过时间片轮转,让多个线程“运行,一个线程阻塞(如等待网络数据)时,CPU 可以执行其他线程。
典型应用 嵌入式微控制器、快速原型开发。 单片机编程、后台服务、游戏主循环。 桌面应用程序、服务器、复杂系统。

loop() 就像你写在一个 while(1) 循环里的 main 函数,但它是 Arduino 为你“自动”写好的,让你只需要专注于 setup()loop() 的内容即可。


一个实际的例子:闪烁的LED

让我们通过一个最经典的 "Blink" 示例来加深理解。

c语言voidloop
(图片来源网络,侵删)

目标:让 Arduino 板上的 LED 每秒钟闪烁一次。

// 定义一个常量,让代码更易读
// LED_BUILTIN 是 Arduino 宏,代表板载LED的引脚号
#define LED_BUILTIN 13 
void setup() {
  // 在 setup 中,我们只做一次性的初始化工作
  // 将 LED_BUILTIN 引脚设置为输出模式
  pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
  // --- 循环开始 ---
  // 1. 点亮LED
  // digitalWrite() 函数向指定引脚写入 HIGH (5V) 电压
  digitalWrite(LED_BUILTIN, HIGH);   
  // 2. 等待1000毫秒(即1秒)
  // delay() 函数会暂停程序的执行,是阻塞函数
  delay(1000);                      
  // 3. 熄灭LED
  // digitalWrite() 函数向指定引脚写入 LOW (0V) 电压
  digitalWrite(LED_BUILTIN, LOW);    
  // 4. 再次等待1秒
  delay(1000);                       
  // --- 循环结束,程序会自动跳回 loop() 的开头 ---
}

执行过程:

  1. setup() 执行,设置引脚13为输出。
  2. 进入 loop()
  3. LED 亮 -> 等待1秒 -> LED 灭 -> 等待1秒。
  4. loop() 结束,立即返回开头。
  5. 重复第3、4步,LED 就会持续闪烁。

  • void loop() 是 Arduino 平台的特有函数,不是标准 C 的一部分。
  • 它在 setup() 函数执行完毕后,被无限次地重复执行。
  • 它是实现 Arduino 设备动态行为的核心,是程序的“主循环”。
  • loop() 中,你可以放置需要持续运行的代码,如读取传感器、控制电机、处理输入等。
  • 理解 loop() 的工作原理是学习 Arduino 编程的第一步,也是最关键的一步。
-- 展开阅读全文 --
头像
如何用Blockly生成C语言代码?
« 上一篇 04-18
dede如何调用栏目导航?
下一篇 » 04-18

相关文章

取消
微信二维码
支付宝二维码

目录[+]