luaTask的串口接收为什么要设置等待时间(if not sys.waitUntil("UART_RECEIVE",100) then),接收数据会产生一条消息,为什么不根据消息指向用户函数确定数据完整性,而要设置超时时间来确定完整性呢?

请先 登录 后评论

最佳答案 2018-09-03 15:35

有的场景下,外部设备是通过uart持续性的输入很多数据,直到发送完毕,才会停止,发送期间是没有间断的。所以这里设置100ms是为了判断是否已经停止接收,从而进行下一步的处理。

代码的注释也说的很清楚:

--[[
功能定义:
uart接收数据,如果100毫秒没有收到新数据,则打印出来所有已收到的数据,清空数据缓冲区,回复received x frame给对端,然后等待下次数据接收
注意:
串口帧没有定义结构,仅靠软件延时,无法保证帧的完整性,如果对帧接收的完整性有严格要求,必须自定义帧结构(参考testUart.lua)
因为在整个GSM模块软件系统中,软件定时器的精确性无法保证,例如本demo配置的是100毫秒,在系统繁忙时,实际延时可能远远超过100毫秒,达到200毫秒、300毫秒、400毫秒等
设置的延时时间越短,误差越大
]]
请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,3218 浏览
  • 聆风 提出于 2018-09-03 14:46

相似问题