说明
flush函数可让开发板在所有待发数据发送完毕前,保持等待状态。
请注意:很多人误认为flush函数具有清除开发板接收缓存区的功能。事实上此函数是没有此功能的。如需了解如何清除开发板接收缓存区内信息的方法,请点击这里进入相应说明页面。
本函数属于Stream类。该函数可被Stream类的子类所使用,如(Serial, WiFiClient, File 等)。
为了更好的理解flush函数的作用,我们在这里用Serial.flush()作为示例讲解。
当我们通过Serial.print或Serial.println来发送数据时,被发送的字符数据将会存储于开发板的“发送缓存”中。这么做的原因是开发板串行通讯速率不是很高,如果发送数据较多,发送时间会比较长。
在没有使用flush函数的情况下,开发板不会等待所有“发送缓存”中数据都发送完毕再执行后续的程序内容。也就是说,开发板是在后台发送缓存中的数据。程序运行不受影响。
相反的,在使用了flush函数的情况下,开发板是会等待所有“发送缓存”中数据都发送完毕以后,再执行后续的程序内容。
语法
stream.flush()
注:此处stream为概念对象名称。在实际使用过程中,需要根据实际使用的stream子类对象名称进行替换。如:
Serial.flush()
wifiClient.flush()
参数
无
返回值
无
示例程序
为了演示flush函数工作效果,一共为您准备了两个示例程序。这两个程序一个使用了flush函数另外一个没有使用flush函数。
通过这两个示例程序的运行结果比较,您可以看到flush函数的工作效果。
示例1:没有使用flush函数的情况下,通过串口监视器显示开发板输出一大串字符的运行效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : stream_With_flush 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200318 程序目的/Purpose : 此程序使用Serial来演示Stream类中的flush函数。 flush函数可让开发板在所有发送数据全部发送完毕之前,保持等待状态。 为了演示flush函数工作效果,一共为您准备了两个示例程序。这两个程序一个使用了flush函数 另外一个没有使用flush函数。 通过这两个示例程序的运行结果比较,您可以看到flush函数的工作效果。 此程序为没有使用flush函数的情况下,通过串口监视器显示开发板在输出一大串字符的运行效果。 ----------------------------------------------------------------------- 本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。 该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ void setup() { Serial.begin(9600); // 记录输出串口信息前的millis时间 unsigned long millisNoFlushStart = millis(); // 通过串口输出信息 Serial.println(F("abcdefghijklmnopqrstuvwxyz")); // 记录输出串口信息后的millis时间 unsigned long millisNoFlushStop = millis(); // 通过串口监视器输出没有使用flush函数情况下,输出信息前后的时间差。 Serial.print(F("NO flush: ")); Serial.print( millisNoFlushStop - millisNoFlushStart); Serial.println(F(" milliseconds.")); } void loop() {} /* Stream类用于处理字符数据流或二进制数据流。Stream类是不能被直接调用的。 然而当我们使用基于Stream类的库时,都会调用Stream中的内容。 以下Arduino库及相应库中的类都是基于Stream类所实现的。 库 类 Core Serial Wifi WiFiClient Ehternet EthernetClient ESP8266FS File SD File Wire Wire GSM GSMClient SoftwareSerial SoftwareSerial ----------------------------------------------------------------------- */ |
示例2:使用flush函数的情况下,通过串口监视器显示开发板输出一大串字符的运行效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : stream_With_flush 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : CYNO朔 日期/Date(YYYYMMDD) : 20200318 程序目的/Purpose : 此程序使用Serial来演示Stream类中的flush函数。 flush函数可让开发板在所有发送数据全部发送完毕之前,保持等待状态。 为了演示flush函数工作效果,一共为您准备了两个示例程序。通过这两个示例程序的 运行结果比较,您可以看到flush函数的工作效果。 此程序为没有使用flush函数的情况下,通过串口监视器显示开发板在输出一大串字符的运行效果。 ----------------------------------------------------------------------- 本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。 该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ void setup() { Serial.begin(9600); // 记录输出串口信息前的millis时间 unsigned long millisWithFlushStart = millis(); // 通过串口输出信息 Serial.println(F("abcdefghijklmnopqrstuvwxyz")); // 使用flush函数,让开发板在完成串口输出信息以前"原地等待" Serial.flush(); // 记录输出串口信息后的millis时间 unsigned long millisWithFlushStop = millis(); // 通过串口监视器输出没有使用flush函数情况下,输出信息前后的时间差。 Serial.print(F("WITH flush: ")); Serial.print( millisWithFlushStop - millisWithFlushStart); Serial.println(F(" milliseconds.")); } void loop() { } /* Stream类用于处理字符数据流或二进制数据流。Stream类是不能被直接调用的。 然而当我们使用基于Stream类的库时,都会调用Stream中的内容。 以下Arduino库及相应库中的类都是基于Stream类所实现的。 库 类 Core Serial Wifi WiFiClient Ehternet EthernetClient ESP8266FS File SD File Wire Wire GSM GSMClient SoftwareSerial SoftwareSerial ----------------------------------------------------------------------- */ |
通过以上两个程序的运行,您可以看到。在没有使用flush函数的情况下,开发板在输出信息前后时间差别微乎其微。但是在使用了flush函数以后,可以明显看到开发板输出信息占用了一定的时间。