类似于TCP三次握手、超时检测、自动重发机制以及主从应答方式的通信任务以及一个任务和多个任务通信时应该如何设计
设备有4个串口
1、USART1串口会每隔100毫秒接收到【某个外部设备A】发送的一串电压数据。
2、USART2串口会每隔100毫秒接收到【某个外部设备B】发送的一串电流数据。
3、USART3串口和移动终端通信(主从通信模式),移动终端为主站,本设备为从站。
移动终端每隔250毫秒会向本设备发送请求报文,本设备收到移动终端的请求报文后,会将USART1串口采集的电压数据和USART2串口采集的电流数据上传给移动终端。
注:移动终端和本设备通信特点如下, 如果移动终端如果不给本设备发送请求报文,本设备不会给移动终端发送数据。
4、USART4串口和服务器通信。
USART4串口实际上是一个4G转串口模块,该4G转串口模块分为命令模式通信和透传模式通信。当4G转串口模块刚刚上电时为[命令]模式,需要先按照一定的顺序发送握手命令,
握手成功后,即可进入[透传]模式,给服务器传输USART1串口采集的电压数据和USART2串口采集的电流数据。
(4.1)、命令模式
命令模式时,给服务器传输握手信号步骤如下:
第一步:定时200毫秒(时间不需要非常准确)给4G网络发送握手请求报文A。
如果收到4G的应答报文,跳转到第二步;否则重复发送请求报文A
第二步:定时200毫秒(时间不需要非常准确)给4G网络发送握手请求报文B
如果收到4G网络的应答报文,跳转到第三步;
否则重复发送请求报文B,如果自动重发次数超过3,则跳转到第一步,重新发送握手请求报文A。
第三步:给4G网络发送握手请求报文C,然后设备开始等待
如果在10秒内收到4G网络的应答报文,进入【透传模式】;
否则10秒后跳转到第一步,重新发送握手请求报文A。
(4.2)、透传模式
第一步:透传模式时定时每隔1秒给服务器传输USART1串口采集的电压数据和USART2串口采集的电流数据。
第二步:然后等待服务器的应答报文。
第三步:如果连续1分钟没有收到服务器的应答报文,则该4G转串口模块【断电重启】,然后跳转到命令模式第一步重新握手。
5、需要检测USART1通信是否出现通信中断(如果连续1秒钟USART1没有收到数据则认为USART1通信中断)
需要检测USART2通信是否出现通信中断(如果连续1秒钟USART2没有收到数据则认为USART2通信中断)
需要检测USART3通信是否出现通信中断
请问: (1)、这涉及到一个任务和多个任务进行通信,我该如何规划任务?
(2)、一个任务和多个任务通信是使用消息队列好呢?还是使用全局变量+互斥信号量锁定方式呢?
(3)、假设可以使用消息队列进行一个任务和多个任务通信,那么是不是只能编写成下述代码
void USART1_Task ()
{
while (1)
{
等待USART1的信号量;
解析USART1报文,得到电压数据;
发送电压数据到消息队列A; // ---> 消息队列A用于USART1和服务器通信
发送电压数据到消息队列B; // ---> 消息队列B用于USART1和移动终端通信
}
}
1、USART1串口会每隔100毫秒接收到【某个外部设备A】发送的一串电压数据。
2、USART2串口会每隔100毫秒接收到【某个外部设备B】发送的一串电流数据。
3、USART3串口和移动终端通信(主从通信模式),移动终端为主站,本设备为从站。
移动终端每隔250毫秒会向本设备发送请求报文,本设备收到移动终端的请求报文后,会将USART1串口采集的电压数据和USART2串口采集的电流数据上传给移动终端。
注:移动终端和本设备通信特点如下, 如果移动终端如果不给本设备发送请求报文,本设备不会给移动终端发送数据。
4、USART4串口和服务器通信。
USART4串口实际上是一个4G转串口模块,该4G转串口模块分为命令模式通信和透传模式通信。当4G转串口模块刚刚上电时为[命令]模式,需要先按照一定的顺序发送握手命令,
握手成功后,即可进入[透传]模式,给服务器传输USART1串口采集的电压数据和USART2串口采集的电流数据。
(4.1)、命令模式
命令模式时,给服务器传输握手信号步骤如下:
第一步:定时200毫秒(时间不需要非常准确)给4G网络发送握手请求报文A。
如果收到4G的应答报文,跳转到第二步;否则重复发送请求报文A
第二步:定时200毫秒(时间不需要非常准确)给4G网络发送握手请求报文B
如果收到4G网络的应答报文,跳转到第三步;
否则重复发送请求报文B,如果自动重发次数超过3,则跳转到第一步,重新发送握手请求报文A。
第三步:给4G网络发送握手请求报文C,然后设备开始等待
如果在10秒内收到4G网络的应答报文,进入【透传模式】;
否则10秒后跳转到第一步,重新发送握手请求报文A。
(4.2)、透传模式
第一步:透传模式时定时每隔1秒给服务器传输USART1串口采集的电压数据和USART2串口采集的电流数据。
第二步:然后等待服务器的应答报文。
第三步:如果连续1分钟没有收到服务器的应答报文,则该4G转串口模块【断电重启】,然后跳转到命令模式第一步重新握手。
5、需要检测USART1通信是否出现通信中断(如果连续1秒钟USART1没有收到数据则认为USART1通信中断)
需要检测USART2通信是否出现通信中断(如果连续1秒钟USART2没有收到数据则认为USART2通信中断)
需要检测USART3通信是否出现通信中断
请问: (1)、这涉及到一个任务和多个任务进行通信,我该如何规划任务?
(2)、一个任务和多个任务通信是使用消息队列好呢?还是使用全局变量+互斥信号量锁定方式呢?
(3)、假设可以使用消息队列进行一个任务和多个任务通信,那么是不是只能编写成下述代码
void USART1_Task ()
{
while (1)
{
等待USART1的信号量;
解析USART1报文,得到电压数据;
发送电压数据到消息队列A; // ---> 消息队列A用于USART1和服务器通信
发送电压数据到消息队列B; // ---> 消息队列B用于USART1和移动终端通信
}
}
...全文
相关推荐
wireshark抓包分析tcp三次握手四次挥手详解及网络命令
**点对点通信**:每条TCP连接只能有两个端点,且只能是点对点的。3. **可靠传输**:提供错误检测机制,确保数据能够正确到达目的地。4. **全双工通信**:支持双向同时传输数据。5.
TCP三次握手及四次挥手详细图解.docx
TCP 三次握手及四次挥手详细图解TCP 三次握手是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包。
TCP超时和重传机制之停等协议ARQ
**超时重发机制**:设置合理的超时时间,当发送方在超时时间内未收到应答,或接收到NAK信号时,立即重发相应的数据帧。### 实践中的考量在实际应用中,合理设置超时时间尤为关键。
TCP三次握手及四次挥手详细图解
TCP 三次握手和四次挥手是 TCP/IP 协议栈自动创建的连接建立和拆除过程,对于理解 TCP 底层运作机制非常有帮助。
TCP恋爱史 三次握手和四次分手
总结,TCP的三次握手和四次分手是确保可靠连接和有序关闭的关键步骤,它们保证了数据传输的安全性和有效性。理解这些机制对于网络编程和网络故障排查至关重要。


单片机/工控
