对于很多初学者, 尤其是刚接触通信行业的初学者而言, 通信中数据的接收如何才能做的比较妥善?
我们再写上位机程序时(指一般的上位机程序, 这个数据随便怎么处理都问题不大), 我们可以直接接受串口的READ函数中读取数据, 没读取时候, 操作系统会自动帮助缓存, 再比如网络也是同样的道理, 所有缓存是由操作系统来帮忙处理。 但是如果遇到像单片机, 或者直接要重新封装一个库的时候, 或者进行数据并发处理的时候。 这个时候就必须像处理原始数据那样, 因为已经没有操作系统的支持了, 所有的缓存得自己想办法处理。
经过多年的编程经验, 在进行通信数据接收处理时, 首先考虑的是采用一种数据结构, 将读取的数据进行缓存(很多情况下, 是要连续接收完整个包数据后才能对数据进行分析的), 然后进行分析工作。 这里提供2中会遇到的情况:
1. 单接收情况:
所谓单接收, 是指点对点通信。 这种通信方式非常简单, 但是对于数据的完整性来说, 保证数据不会丢失, 比较好的做法是先缓冲, 然后分析。 一般采用循环队列(CircleQueue)进行数据的缓存, 启动一个任务一直负责这个缓存的数据分析, 最后交给一个任务去处理。
2. 并发接收情况:
所谓并发, 指对点对1点, 或多点对多点的通信。 同样, 为了数据的完整性, 防止数据丢失。 采用循环队列进行各自任务的数据缓存(或统一缓存, 根据具体的情况), 并启动相应的任务进行缓存数据的分析, 最后交到相对应的任务进行数据的处理。