【嵌入式 RT-Thread】一种优雅的使用 [互斥锁] 和 [信号量] 解决数据多路并发思路

rt-thread 中的信号量和互斥锁在工业开发项目中的应用,本博文主要介绍了一种优雅的使用 [互斥锁] 和 [信号量] 解决数据多路并发思路
2024-06
by 积跬步、至千里

目录

  • 0. 个人简介 && 授权须知
  • 1. 工业场景描述
    • 1.1 工业数据采集需求
    • 1.2 总线协议与数据采集
  • 2. 互斥锁和信号量的应用场合
  • 3. 使用RT-Thread 的互斥锁和信号量的伪代码
  • 4. 源代码下载链接

0. 个人简介 && 授权须知

image-20230911133730620

📋 个人简介

  • 💖 作者简介:大家好,我是喜欢记录零碎知识点的菜鸟打工人。😎
  • 📝 个人主页:欢迎访问我的博客主页🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:嵌入式开发 🍁 🍁
  • 💬格言:写文档啊不是写文章,重要的还是直白!🔥

转载文章,禁止声明原创;不允许直接二次转载,转载请根据原文链接联系作者

若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:积跬步、至千里

image-20230911133724204

符号:

1. 工业场景描述

1.1 工业数据采集需求

  1. 串口1和2接受的数据遵从mudbus协议
  2. 串口1收到modbus指令,第1路传感器采集数据
  3. 串口2收到modbus指令,第2路传感器采集数据
  4. 将采集的数据显示到lcd屏幕上
  5. soc运行RTOS,比如RT-Thread

1.2 总线协议与数据采集

工业上接线图如下所示:
在这里插入图片描述

2. 互斥锁和信号量的应用场合

在这里插入图片描述

3. 使用RT-Thread 的互斥锁和信号量的伪代码

thread_sum_init()
  -> cpuMtx // 初始化互斥锁
  -> sensor_read_thread2()
     -> sensor_read_uart2_routine()
  -> sensor_read_thread3()
     -> sensor_read_uart3_routine()
    

    
sensor_read_uart2_routine()
{
	rx_sem2;  // 创建接收信号量
    // 串口2接收中断中,接收到串口数据则释放信号量 rt_sem_release(rx_sem2);
    while(1)
    {
         // 阻塞,等待 mcu 释放互斥锁,若释放了
         // ===【持有】互斥锁 === 
        rt_mutex_take(cpuMtx, RT_WAITING_FOREVER);
        
        // 阻塞:若串口收到数据,信号量2被释放
        // 传感器1,持有信号量2,采集数据
        
        // 阻塞:若串口收到数据,信号量2被释放
        // 传感器2,持有信号量2,采集数据
       
        // ===释放互斥锁 === 	
    }
}


sensor_read_uart3_routine()
{
    rx_sem3;  // 创建接收信号量
    // 串口3接收中断中,接收到串口数据则释放信号量 rt_sem_release(rx_sem2);
    
    while(1)
    {
         // 阻塞,等待 mcu 释放互斥锁,若释放了
         // ===【持有】互斥锁 === 
        
         rt_mutex_take(cpuMtx, RT_WAITING_FOREVER);
        
        // 阻塞:若串口收到数据,信号量3被释放
        // 传感器1,持有信号量3,采集数据
        
        // 阻塞:若串口收到数据,信号量3被释放
        // 传感器2,持有信号量3,采集数据
        
        // ===释放互斥锁 === 
    }
}

4. 源代码下载链接

gitee 下载链接

https://gitee.com/PokertZhang/rt-thread

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/746937.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

杭州代理记账报税全程托管专业实力全面指南

杭州代理记税报税服务可以为企业提供全程托管财务管理解决方案,确保企业的财务工作专业、高效、合规。以下是杭州代理记税报税服务全面指南: https://www.9733.cn/news/detail/185.html 一、代理记账报税服务的内容 基础服务: 每日记&#xf…

昇思25天学习打卡营第3天|张量Tensor

认识张量 张量,是一个数据结构,也可以说是一个函数,它描述了标量、矢量和张量之间线性关系。这些关系包括 内积、外积、线性映射以及笛卡尔积。张量中既有大小、又有方向。张量由多个数值构成,在n维空间里,会出现 n …

java对word文档预设参数填值并生成

目录 (1)定义word文档模板 (2)模板二次处理 处理模板图片,不涉及图片可以跳过 处理模板内容 (3)java对word模板填值 (4)Notepad的XML Tools插件安装 工作上要搞一个…

Yolo v5实现细节(2)

Yolo v5代码实现细节 IOU系列损失 在之前的yolo v3中我们使用的定位损失主要使用的是差值平方的形式,通过预测边界框的参数和真实边界框的参数来进行计算求解的。 定位损失 L loc ( t , g ) ∑ i ∈ pos ( σ ( t x i ) − g ^ x i ) 2 ( σ ( t y i ) − g ^ …

c语言学习记录(十)———函数

文章目录 前言一、函数的基本用法二、函数的参数传递1.基本方式2 数组在函数中的传参 前言 一个学习C语言的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、函数的基本用法 函数是一个完成特定功能的代码模块&…

【Linux】锁|死锁|生产者消费者模型

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ ​ 访问互斥 …

modelsim做后仿真的一点思路

这是以TD_5.6.3_Release_88061生成的网表文件(其他工具生成的网表文件类似),与modelsim联合进行门级仿真的样例,时序仿真与门级仿真的方法类似,只是增加了标准延时文件。 1、建立门级仿真工程 将门级网表和testbench添…

深度学习31-33

1.负采样方案 (1)为0是负样本,负样本是认为构造出来的。正样本是有上下文关系 负采样的target是1,说明output word 在input word之后。 2.简介与安装 (1)caffe:比较经常用于图像识别,有卷积网…

一文详细了解Bootloader

Bootloader是什么 bootloader是一个引导加载程序,它的主要作用是初始化硬件设备、设置硬件参数,并加载操作系统内核。在嵌入式系统中,bootloader是硬件启动后第一个被执行的程序,它位于操作系统和硬件之间,起到桥梁的…

操作符详解(上) (C语言)

操作符详解(上) 一. 进制转换1. 二进制2. 二进制的转换 二. 原码 补码 反码三. 操作符的分类四. 结构成员访问操作符1. 结构体的声明2. 结构体成员访问操作符 一. 进制转换 1. 二进制 在学习操作符之前,我们先了解一些2进制、8进制、10进制…

魔众一物一码溯源防伪系统——守护品牌,守护信任!

在这个充满竞争的市场上,如何确保你的产品不被仿冒,如何赢得消费者的信任?魔众一物一码溯源防伪系统,为你提供一站式解决方案,守护你的品牌,守护消费者的信任! 🔍魔众一物一码溯源防…

Node.js全栈指南:浏览器显示一个网页

上一章,我们了解到,如何通过第二章的极简 Web 的例子来演示如何查看官方文档。为什么要把查阅官方文档放在前面的章节说明呢?因为查看文档是一个很重要的能力,就跟查字典一样。 回想一下,我们读小学,初中的…

防火墙双机热备

防火墙双机热备 随着移动办公、网上购物、即时通讯、互联网金融、互联网教育等业务蓬勃发展,网络承载的业务越来越多,越来越重要。所以如何保证网络的不间断传输成为网络发展过程中急需解决的一个问题。 防火墙部署在企业网络出口处,内外网之…

windows系统修改克隆虚拟机的SID(报错:尝试将此计算机配置为域控制器时出错)

当我们用克隆虚拟机加入域的时候,可能会出现图下所示报错。这时我们可以用微软自带的工具sysprep来修改机器的SID来解决该问题 注意:用sysprep修改SID之后,系统会自动重启,之前配置好的网络、修改过的机器名会重置。所以&#xff…

6.2 通过构建情感分类器训练词向量

在上一节中,我们简要地了解了词向量,但并没有去实现它。在本节中,我们将下载一个名为IMDB的数据集(其中包含了评论),然后构建一个用于计算评论的情感是正面、负面还是未知的情感分类器。在构建过程中,还将为 IMDB 数据…

Windows上PyTorch3D安装踩坑记录

直入正题,打开命令行,直接通过 pip 安装 PyTorch3D : (python11) F:\study\2021-07\python>pip install pytorch3d Looking in indexes: http://mirrors.aliyun.com/pypi/simple/ ERROR: Could not find a version that satisfies the requirement p…

JS(JavaScript)入门指南(DOM、事件处理、BOM、数据校验)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 玉阶生白露,夜久侵罗袜。 却下水晶帘,玲珑望秋月。 ——《玉阶怨》 文章目录 一、DOM操作1. D…

从零开始做题:有手就行

1 题目 2 解题 ARPHCR工具破解 得到flag DASCTF{2b3767763885a019b65bbfe9d1136c3b}

从零开始学docker(四)-安装mysql及主从配置(一)

mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关…

仿Photoshop利用曲线对图像调整亮度与色彩

曲线调整是Photoshop的最常用的重要功能之一。对于一个RGB图像, 可以对R, G, B 通道进行独立的曲线调整,即,对三个通道分别使用三条曲线(Curve)。还可以再增加一条曲线对 三个通道进行整体调整。 因此,对一个图像&a…