类似于TCP三次握手、超时检测、自动重发机制以及主从应答方式的通信任务以及一个任务和多个任务通信时应该如何设计

ba_wang_mao ba_wang_mao 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
设备有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和移动终端通信

}
}
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
ba_wang_mao
单片机/工控 27,522 成员 28,796 内容