问题描述:
一个串口类,采用线程,然后定义两个类对象,分别用于两个通信协议,
RS485的MODBUS通信协议(假设为A协议)和用于GPRS上的通信协议(假设为B协议),
那么我原本是在串口类中采用回调函数来处理接收到的数据,
但是由于,底层的驱动是是每接收到8个字节的数据就往应用层发送,
那么如果一串数据是20个,那么就要调用多次回调函数,
而我原先是在回调函数进行数据接收,校验错误,然后直接回发数据的.
(1)那么,我就想在串口类里,直接将20个数据接收完,然后传给全局变量,再调用回调函数处理,接收到的数据,
但是这样就引起了数据交叉问题.
(2)或者,我将两个协议处理成两个类,然后(A协议类和B协议类,在串口类中作为子类)
串口类中有数据的时候,就调用A,B两个协议类,的接收处理数据方法来处理接收到的数据.
请问,这个问题应该如何处理巧妙一些.
两个协议无非就是对同一数据的两种不同处理方式,串口接收到完整数据后,直接在回调函数中根据协议标识分开处理不就可以了?
就是在串口类中定义一个协议标识变量,标识为0就调用a协议,1就调用b协议
你说的协议标识符是要协议有标识符,那到可以,
就是一个协议的头字节来判断吧,或者协议的长度来判断,这样是吧。
不过,我用串口类,构造两个子串口类对象,因为,不同的串口,硬件串口接的通信设备不一样。
然后哪个串口的数据过来,就调用哪个子串口类的回调函数处理,、
问题是,它底层接到8个字节数据,就调用一次回调函数,
现在我把回调函数进行处理?明天再调试下,看能搞定GPRS和上位机正常通信吗?
哎,国庆都快到了,我要赶紧搞啊,不然,国庆没得玩了,哎。