【MCU】一种基于RTOS的无应答重发机制

本文探讨了在RTOS环境中,通过信号量和定时器实现UART通信的无应答重发策略,包括信号量的使用来同步发送和接收,以及基于定时器的定期重发设计。适合理解和实践嵌入式微控制器数据通信稳定性提升。

一、背景描述

​ 在微控制器之间进行数据通信时,大多需要添加无应答重发机制,以增强数据交互和通信的稳定性。

在使用UART通信的双方设备,当一次数据传输发起后,数据传输方需要再次接收到数据接收方反馈的数据(可以称之为应答数据)后,再停止发送重复的数据。这就相当于通信双方的一个监听“心跳”,维持着通信的稳定和健壮性,当然,通信的稳定性受多方面的影响,本文不考虑过多的因素。那么,在基于RTOS的嵌入式微控制器软件的设计过程中,如何来实现UART通信双方无应答重发机制呢。本文就这个话题,分享两种基于RTOS的无应答重发机制。

​ 文本以rt-thread操作系统作为RTOS基建,其他RTOS类似,本文的代码实现主要依赖于操作系统下的一些线程同步、或者定时器机制。

二、结构框图

请添加图片描述

三、基于RTOS的信号量的实现
(3-1)思路描述

​ 通过定义一个无应答重发信号量,在发送线程函数中执行无应答重发操作,并接收无应答重发信号量,当没有接收到无应答重发信号量,则重新发起数据重发操作;在接收线程中接收应答码,如果接收到应答码,则发送信号量,如果接收线程接收到了信号量,则结束无应答重发操作。

(3-2)步骤
(3-2-1)定义无应答重发信号量
 /* 定义无应答重发信号量 */
static struct rt_semaphore no_Ask_resend_sem ;      
(3-2-2)定义发送线程入口
static void sendThreadEntry(void *parameter)
{
   
   
    while(1)
    {
   
   
        if(/* 是否接收到数据 */)
        {
   
   
            /* 无应答重发 */
            while(1)
            {
   
   
                /* 发送数据 */
               rt_device_write(/* 省略 */));
              
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iriczhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值