【嵌入式 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.mzph.cn/bicheng/35684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇聚荣做拼多多运营,是新手怎么做?

作为电商领域的一颗新星,拼多多以其独特的商业模式迅速崛起,吸引了众多商家和消费者的目光。对于新手来说,如何在拼多多平台上开展运营活动,成为了许多初入电商领域的人们关心的问题。本文将围绕如何做好拼多多运营这一核心内容&a…

DataGrip 2024 po for Mac 数据库管理工具解

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…

基于Springboot+Vue的校友社交系统(带1w+文档)

基于SpringbootVue的校友社交系统(带1w文档) 校友社交系统作为一种典型的管理系统也迅速的发展并深入人们的日常生活中,它使用户足不出户就可以管理自己的校友社交信息等,最大化减缩了用户的管理时间,提高了管理效率。 项目简介 基于SSMVUE的…

【小学期】操纵数据的DAO设计——以学生管理系统为例

项目结构 student_management │ ├── src │ ├── model │ │ ├── Student.java │ │ └── StudentDAO.java │ │ │ ├── view │ │ └── StudentView.java │ │ │ ├── controller │ │ └── StudentController.java │…

基于百度地图实现矩形绘制/电子围栏/自定义覆盖物选择、点击、区域选中、轨迹绘制

目录 开发前的准备账号注册页面创建地图初始化矩形绘制开启绘制模式监听绘制完成事件矩形取消事件自定义覆盖物渲染数据准备覆盖物渲染自定义点击事件优化用户刷新提供的覆盖物添加右键菜单轨迹绘制开发前的准备 账号注册 百度地图开发者平台点此访问 登录注册后点击右上角的控…

keepalived 服务高可用(简约版)

本文基于centos 7记述如何使用keepalived 背景 为生产环境准备一台备机是极其必要的,防止主机宕掉无服务可用的情况出现。但是同一局域网内每台主机都分配了一个唯一IP,这些IP既然相互不同,那么服务请求的时候岂不是要切换IP地址&#xff1f…

任务5.1 初识Spark Streaming

实战概述:使用Spark Streaming进行词频统计 1. 项目背景与目标 背景: Spark Streaming是Apache Spark的流处理框架,用于构建可伸缩、高吞吐量的实时数据处理应用。目标: 实现一个实时词频统计系统,能够处理流式数据并统计文本中的单词出现频…

allWebPlugin助力iWebOffice2015插件在高版本浏览器使用

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏…

11-Django项目--Ajax请求二

目录 模版: demo_list.html perform_list.html 数据库操作: 路由: 视图函数: Ajax_data.py perform.py 模版: demo_list.html {% extends "index/index.html" %} {% load static %} # 未实现修改,删除操作{% block content %}<div class"container…

vue2 + dataV 组件问题

在使用 dataV 过程中&#xff0c;遇见 svg 动画不加载问题。 一、理想状态下&#xff1a; 二、开发中遇到的 加载不出来问题。 解决方案 在查找官方资料中&#xff0c;提到使用 key 可以解决方案。 1 绑定 key 2 改变 key 值 注意&#xff1a;一定要在 $nextTick 里面执…

理解论文笔记:基于AHP和模糊综合评价的无线传感器网络可维护性评估方法

作为一个研0的娃,这是我认真读的第一篇论文,想着笔记让自己能看懂。如有侵权,请联系删除。 I. INTRODUCTION 介绍 主要介绍了无线传感器网络可维护性研究的重要性和必要性,并对下面的各章进行了总结。 翻译:第二部分简要介绍了无线传感器网络的维护,并对影响系统的因素…

VS 在多线程中仅调试某个线程

调试多线程程序时&#xff0c;只想观察某个线程的运行情况&#xff1b; 但是&#xff0c;由于线程切换执行&#xff0c;会导致调试时焦点在几个代码块之间跳来跳去&#xff0c;故需要解决这个问题。 参考文章&#xff1a; C#使用线程窗口调试多线程程序。 1 打开线程窗口&…

【第15章】常见报错汇总(持续更新)ComfyUI基础入门教程

🔮概述 如果大家是一步步的跟随教程学到了这节,并且期间也自己动手尝试过一些工作流,会发现: ComfyUI是一个“经常会出问题”的软件,动辄就会有很难安装的节点,或者节点兼容问题,或者模型找不到,或者出图效果跟工作流作者的效果相去甚远的问题。 那么,有没有一劳永…

基于高度的纹理混合shader

基于高度的纹理混合shader 原文&#xff1a;基于高度的纹理混合shader - 知乎 (zhihu.com) 最近支持一个使用unity2021的项目&#xff0c;发现urp自带的Terrain/Lit shader已经自带高度混合了&#xff0c;看了下和我当初写的那个基本差不多&#xff0c;感觉稍微要比我的严谨一…

A股探底回升,跑出惊天大阳,你们知道为什么吗?

今天的A股&#xff0c;探底回升&#xff0c;让人惊呆了&#xff0c;你们知道是为什么吗&#xff1f;盘面上出现3个重要信号&#xff0c;一起来看看&#xff1a; 1、今天A股市场炸锅了&#xff0c;AI人工智能、国产软件、存储芯片迎来了涨停潮&#xff0c;惊呆了&#xff0c;科技…

阿里提出MS-Diffusion:一键合成你喜爱的所有图像元素,个性化生成新思路!

文本到图像生成模型的最新进展极大地增强了从文本提示生成照片级逼真图像的能力&#xff0c;从而增加了人们对个性化文本到图像应用的兴趣&#xff0c;尤其是在多主题场景中。然而&#xff0c;这些进步受到两个主要挑战的阻碍&#xff1a; 需要根据文本描述准确维护每个参考主题…

python--open()函数的使用(超详细)

在Python中&#xff0c;open() 函数用于打开文件&#xff0c;并返回文件对象&#xff0c;该对象可用于后续的文件操作&#xff0c;如读取或写入数据。open() 函数的基本语法如下&#xff1a; open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdT…

淘宝商铺电话怎么获取?使用爬虫工具采集

访问淘宝商铺是一个合法的行为&#xff0c;你可以使用爬虫工具来提取淘宝商铺的信息。下面是一个基本的Python程序示例&#xff0c;用于使用爬虫工具访问淘宝商铺&#xff1a; import requestsdef get_store_info(store_id):url fhttps://shop{id}.taobao.comresponse reque…

力扣:59. 螺旋矩阵 II(Java,模拟)

目录 题目描述示例 1&#xff1a;代码实现 题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5…

前端新手小白的第一个AI全栈项目---AI聊天室

前言 ok&#xff0c;大家好。- ̗̀(๑ᵔ⌔ᵔ๑)最近也是想做自己的第一个前后端分离的项目&#xff0c;刚好最近学了一点AI接口的实现。想着用接口做一个自己的ai聊天室并且尝试一下全栈式开发。中间真的解决了很多问题&#xff0c;也是成功之后也是想要将实现过程分享一下&a…