_serial_.bufferUntil(byte) 有什么作用,它与 serialEvent 有什么协同作用?
What does _serial_.bufferUntil(byte) do, and how does it synergies with serialEvent?
我无法理解这一点。搜索后我发现
Sets a specific byte to buffer until before calling serialEvent()
这来自 this link 来自处理网站
串口事件是函数,如果我没记错的话,用户通过定义为函数的串口来声明。
但我看到 bufferUntil(‘\n’)
没有任何东西被发送到串行,那么这是在做什么,在调用 serialEvent() 之前它是什么意思,它是在设置中设置的,怎么每次都调用它在功能之前?我也看到了像 lf
这样的论点,那么这里发生了什么,它如何与 serialEvent() 函数协同作用?
感谢帮助,干杯!
使用 bufferUntil(lf)
设置串口监听(将数据写入其缓冲区)直到它获得特定字符(lf,在您链接的示例中是换行符)。
如您所见,bufferUntil(lf)
实际上不会读取任何数据。要读取端口收到的数据,您需要在调用 readString
:
的地方定义一个中断函数
void serialEvent(Serial port)
{ inString = port.readString(); }
一旦串行端口接收到您用 bufferUntil(lf)
定义的字符,就会自动调用此函数(中断程序的正常流程并因此而得名);直到示例的换行符为止。从端口的缓冲区读取数据后,您的程序将 return 到它被中断的地方。
编辑:什么是缓冲区?缓冲区可以是软件(隐藏在您正在使用的库中的变量)或硬件(串行端口芯片上的内存库),用于存储到达端口的数据(这个是接收缓冲区,但是还有一个传输缓冲区用于您通过端口发送的信息)。
可以将其视为位或字节的桶。类比从水龙头流出的水流,如果您想喝一杯水,可以打开水龙头并在水龙头下放一个玻璃杯。但是可能你以后想喝你的水,所以你可以放一个桶(水缓冲器)来为你储存水。在这种情况下,bufferUntil(lf)
语句将是放置水桶的动作,您可以将 serialEvent
视为从水桶中取水的动作(您正在使用水桶的事实允许您继续在房子周围做事,但在某些时候水桶会溢出,除非你关闭水龙头或开始清空水龙头,而要做到这一点,你必须打断你的正常活动流程)。
为什么我们需要缓冲区?好吧,你可以连续轮询(从你的软件的主要任务监听端口)但是你的代码会非常低效。使用缓冲区,您可以做其他事情(计算东西、从传感器读取数据或其他),并且只有在您确定(因为您的例程被中断)所需数据存在时,您才会检查端口。在这种情况下,您需要的数据由您在 bufferUntil(lf)
函数中用作参数的字符表示。
希望我没有过度类比。
我无法理解这一点。搜索后我发现
Sets a specific byte to buffer until before calling serialEvent()
这来自 this link 来自处理网站
串口事件是函数,如果我没记错的话,用户通过定义为函数的串口来声明。
但我看到 bufferUntil(‘\n’)
没有任何东西被发送到串行,那么这是在做什么,在调用 serialEvent() 之前它是什么意思,它是在设置中设置的,怎么每次都调用它在功能之前?我也看到了像 lf
这样的论点,那么这里发生了什么,它如何与 serialEvent() 函数协同作用?
感谢帮助,干杯!
使用 bufferUntil(lf)
设置串口监听(将数据写入其缓冲区)直到它获得特定字符(lf,在您链接的示例中是换行符)。
如您所见,bufferUntil(lf)
实际上不会读取任何数据。要读取端口收到的数据,您需要在调用 readString
:
void serialEvent(Serial port)
{ inString = port.readString(); }
一旦串行端口接收到您用 bufferUntil(lf)
定义的字符,就会自动调用此函数(中断程序的正常流程并因此而得名);直到示例的换行符为止。从端口的缓冲区读取数据后,您的程序将 return 到它被中断的地方。
编辑:什么是缓冲区?缓冲区可以是软件(隐藏在您正在使用的库中的变量)或硬件(串行端口芯片上的内存库),用于存储到达端口的数据(这个是接收缓冲区,但是还有一个传输缓冲区用于您通过端口发送的信息)。
可以将其视为位或字节的桶。类比从水龙头流出的水流,如果您想喝一杯水,可以打开水龙头并在水龙头下放一个玻璃杯。但是可能你以后想喝你的水,所以你可以放一个桶(水缓冲器)来为你储存水。在这种情况下,bufferUntil(lf)
语句将是放置水桶的动作,您可以将 serialEvent
视为从水桶中取水的动作(您正在使用水桶的事实允许您继续在房子周围做事,但在某些时候水桶会溢出,除非你关闭水龙头或开始清空水龙头,而要做到这一点,你必须打断你的正常活动流程)。
为什么我们需要缓冲区?好吧,你可以连续轮询(从你的软件的主要任务监听端口)但是你的代码会非常低效。使用缓冲区,您可以做其他事情(计算东西、从传感器读取数据或其他),并且只有在您确定(因为您的例程被中断)所需数据存在时,您才会检查端口。在这种情况下,您需要的数据由您在 bufferUntil(lf)
函数中用作参数的字符表示。
希望我没有过度类比。