RT_Thread 调试笔记:信号量,互斥量,事件集 的创建和使用流程

说明:记录日常使用 RT_Thread 开发时做的笔记。

持续更新中,欢迎收藏。

1. 信号量

1. 使用流程

/* 信号量的定义和使用流程 *//*step1: 定义用于接收消息的信号量*/
static struct rt_semaphore rx_sem;  或者 static rt_sem_t rx_sem;/*step2: 初始化信号量 */
rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);/*step3:获取信号量函数,阻塞等待接收信号量,等到信号量后再次读取数据,RT_WAITING_FOREVER参数,永远阻塞,直到获得资源 */
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);/*step4:释放信号量可以唤醒挂起在该信号量上的线程。释放信号量使用下面的函数。可以在中断或线程内使用*/
rt_sem_release(&rx_sem);
//示例:rt_sem_release(&rx_sem_adc_dma);//释放信号量

2.rt_sem_control()

rt_err_t rt_sem_control(rt_sem_t sem, int cmd, void *arg)

        rt_sem_release释放信号量后会将挂起在sem_ack上的线程唤醒并重新调度,rt_sem_control是有可能等下次该线程运行时才会被执行的。在rt_sem_release后使用rt_sem_control的目的是因为在某些应用中必须rt_sem_take和rt_sem_release依次出现,而不允许rt_sem_release被连续多次调用,一旦出现这种情况会被认为是出现了异常,通过调用rt_sem_control接口来重新初始化sem_ack,恢复异常。

2. 互斥量

/* 互斥量的使用:* 1:当线程完成互斥资源的访问后,应尽快释放它占据的互斥量,使得其他线程能及时获取该互斥量。* 2:互斥量的 flag 标志设置为 RT_IPC_FLAG_PRIO,表示在多个线程等待资源时,将由优先级高的线程优先获得资源。* 3:互斥量的 flag 标志设置为 RT_IPC_FLAG_FIFO,表示在多个线程等待资源时,将按照先来先得的顺序获得资源。* 4:当不再使用互斥量时,通过删除互斥量以释放系统资源,适用于动态创建的互斥量。* .删除互斥量使用下面的函数接口:rt_err_t rt_mutex_delete (rt_mutex_t mutex);* *//*step1: 定义指向互斥量的指针*/
static rt_mutex_t dynamic_mutex = RT_NULL;/*step2: 创建一个动态互斥量 */
dynamic_mutex = rt_mutex_create("dmutex", RT_IPC_FLAG_FIFO);/*step3: 获取互斥量: rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time);time 可以是等待具体时间也可以是永远等待*/
rt_mutex_take(dynamic_mutex, RT_WAITING_FOREVER);/*step4: 释放互斥量:*/
rt_mutex_release(dynamic_mutex);

3. 事件集

1. 事件集使用流程及案例:看门狗 事件 控制线程 

/* 看门狗 事件 控制线程 */#define EVENT_FLAG3 (1 << 3)
#define EVENT_FLAG4 (1 << 4)
#define EVENT_FLAG5 (1 << 5)
#define EVENT_FLAG6 (1 << 5)#define WDT_EVENT (EVENT_FLAG3 | EVENT_FLAG4 |EVENT_FLAG5 | EVENT_FLAG6) /* 开启的事件打包 *//* 事件集的管理方式 */
/* step1: 创建事件控制块 */
/* step2: 初始化事件对象 */
/* step3: 发送事件 */
/* step4: 接收事件 */
/* step5: 删除,脱离事件 *//* step1: 创建事件控制块 */
static struct rt_event wdt_event;/* 事件应用 线程 入口函数 */
static void thread_recv_event(void *param)
{rt_uint32_t e;      /* 接收事件的变量 */rt_err_t result;/* step2: 初始化事件对象 */result = rt_event_init(&wdt_event, "wdt_event", RT_IPC_FLAG_FIFO);if (result != RT_EOK){rt_kprintf("init event failed.\n");return -1;}while(1){/* step4:接收事件,事件 WD_ENENT 打包的事件全部收集后 ....,接收完后清除事件标志 */if (rt_event_recv(&wdt_event,  /* 事件集对象的句柄 */WDT_EVENT,  /* 接收线程感兴趣的事件 */RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, /* 接收选项 ,事件逻辑与,接收后清除事件标志 */RT_WAITING_FOREVER, /* 指定超时时间 */&e)                /* 指向接收到的事件 */== RT_EOK){rt_kprintf("thread1: AND recv event 0x%x\n", e);}/* 收到事件后要执行的代码 */}/* step3: 发送事件 *//* 发送事件函数使用实例 (此处仅做使用方法记录,本行代码并非使用在此处)*/rt_event_send(&wdt_event, EVENT_FLAG5); /* 发送事件函数,事件控制块,事件标志位 */}/* 接以上 */

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

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

相关文章

vue3 的内置组件汇总

官方给出的说明&#xff1a; Fragment: Vue 3 组件不再要求有一个唯一的根节点&#xff0c;清除了很多无用的占位 div。Teleport: 允许组件渲染在别的元素内&#xff0c;主要开发弹窗组件的时候特别有用。Suspense: 异步组件&#xff0c;更方便开发有异步请求的组件。 一、fr…

模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案

文/朱季谦 熬夜写完&#xff0c;尚有不足&#xff0c;但仍在努力学习与总结中&#xff0c;而您的点赞与关注&#xff0c;是对我最大的鼓励&#xff01; 在一些本地化项目开发当中&#xff0c;存在这样一种需求&#xff0c;即开发完成的项目&#xff0c;在第一次部署启动时&…

基于SpringBoot的个人理财系统

文章目录 项目介绍主要功能截图部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的个人理财系统,java项目。…

3C电子制造:智慧物流引领产业升级

在当今科技飞速发展的时代&#xff0c;3C电子制造行业正面临着一系列挑战和机遇。市场需求的多变和技术革新的加速&#xff0c;使得企业必须不断创新和升级。在这个过程中&#xff0c;智慧物流成为了一个关键的环节&#xff0c;它能够有效地提高生产效率、降低成本并增强企业的…

Docker学习与应用(二)-docker常用命令

注&#xff1a;此为笔者学习狂神说Docker的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! Docker的常用命令 帮助命令 docker version # 显示docker的版本信息 docker info # 显示docker的系统信息&am…

【学习笔记】1、数字逻辑概论

1.1 数字信号 数字信号&#xff0c;在时间和数值上均是离散的。数字信号的表达方式&#xff1a;二值数字逻辑和逻辑电平描述的数字波形。 &#xff08;1&#xff09; 数字波形的两种类型 数值信号又称为“二值信号”。数字波形又称为“二值位形图”。 什么是一拍 一定的时…

新手可理解的PyTorch 损失函数:优化机器学习模型的关键

目录 torch.nn子模块Loss Functions详解 nn.L1Loss 用途 用法 使用技巧 注意事项 代码示例 nn.MSELoss 用途 用法 使用技巧 注意事项 代码示例 nn.CrossEntropyLoss 用途 用法 使用技巧 注意事项 代码示例 使用类别索引 使用类别概率 nn.CTCLoss 用途 …

【Pytorch】学习记录分享13——OCR(Optical Character Recognition,光学字符识别)

[TOC](OCR(Optical Character Recognition,光学字符识别)) 1. OCR资源汇总 OCR(Optical Character Recognition,光学字符识别)指提取图像中的文字信息&#xff0c;通常包括文本检测和文本识别。 文字检测&#xff1a;将图片中的文字区域位置检测出来&#xff08;如图1(b)所示…

Dash+Plotly | Web应用开发(1)

本文为https://github.com/CNFeffery/DataScienceStudyNotes的学习笔记&#xff0c;部分源码来源于此仓库。 本期内容主要为基础概念、web布局方法和交互回调。 文章目录 Dash的主要模块Highlightlayoutcallback 惰性交互阻止初次回调忽略回调匹配错误控制部分回调输出不更新获…

【总线接口】1.以Xilinx开发板为例,直观的认识硬件板卡和接口

初接触硬件&#xff0c;五花八门的总线、接口一定会让你有些疑惑&#xff0c;我尝试用一系列文章来解开你的疑惑 系列文章 【总线接口】1.以Xilinx开发板为例&#xff0c;直观的认识硬件接口 【总线接口】2.学习硬件这些年接触过的硬件接口、总线 大汇总 【总线接口】…

【STM32】STM32学习笔记-DMA数据转运+AD多通道(24)

00. 目录 文章目录 00. 目录01. DMA简介02. DMA相关API2.1 DMA_Init2.2 DMA_InitTypeDef2.3 DMA_Cmd2.4 DMA_SetCurrDataCounter2.5 DMA_GetFlagStatus2.6 DMA_ClearFlag 03. DMA数据单通道接线图04. DMA数据单通道示例05. DMA数据多通道接线图06. DMA数据多通道示例一07. DMA数…

关于一个热成像仪的总结(一)硬件篇电源电路

1、电源部分 电源部分电路原理是这样的通过3.7V的锂电池供电&#xff0c;用Type-C选用TP4056作为充电电路给电池充电。使用MP2161开关电源作为5转3.3V 电源为MCU供电。 1-1电池 待定 1-2充电管理芯片TP4056 参考datasheet&#xff1a;https://atta.szlcsc.com/upload/publi…

数据传输:连接数字世界的纽带

在当今数字化时代&#xff0c;数据传输已经成为了我们日常生活和工作中不可或缺的一部分。无论是通过互联网发送电子邮件、传输文件&#xff0c;还是在智能手机上浏览网页、观看视频&#xff0c;都离不开数据传输的支持。本文将对数据传输进行深度分析&#xff0c;探讨其原理、…

Vue 3中toRaw和markRaw的使用

Vue 3的响应性系统 在Vue 3中&#xff0c;响应性系统是构建动态Web应用程序的关键部分。Vue使用响应性系统来跟踪依赖关系&#xff0c;使数据更改能够自动更新视图。这使得Vue应用程序在数据变化时能够高效地更新DOM。Vue 3引入了新的Proxy对象来替代Vue 2中的Object.definePro…

vue3+echart绘制中国地图并根据后端返回的坐标实现涟漪动画效果

1.效果图 2.前期准备 main.js app.use(BaiduMap, {// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */ak: sRDDfAKpCSG5iF1rvwph4Q95M6tDCApL,// v:3.0, // 默认使用3.0// type: WebGL // ||API 默认API (使用此模式 BMapBMapGL) });i…

CSDN博客重新更新

说来惭愧&#xff0c;好久没更新博客文章&#xff0c;导致个人博客网站&#xff1a;https://lenky.info/ 所在的网络空间和域名都过期了都没发觉&#xff0c;直到有个同事在Dim上问我我的个人博客为啥打不开了。。。幸好之前有做整站备份&#xff0c;后续慢慢把内容都迁回CSDN上…

学习笔记——C++运算符之比较运算符

作用&#xff1a;用于表达式的比较&#xff0c;并返回一个真值或假值 比较运算符有以下符号&#xff1a; #include<bits/stdc.h> using namespace std; int main(){//int a10;int b20;cout<<(ab)<<endl;//0//!cout<<(a!b)<<endl;//1//>cout&…

第十二章 编写测试报告/项目总结(笔记)

一、编写测试报告 测试报告的侧重点是什么&#xff1f; 结果分析 1.bug数据统计&#xff0c;bug状态&#xff0c;bug严重级别统计&#xff0c;测试各阶段统计 2.需求覆盖率&#xff0c;用例数&#xff0c;用例执行率&#xff0c;通过率&#xff0c;bug关闭率&#xff0c;bug遗…

CSS实现瀑布流

column 多行布局实现瀑布流 1.column 实现瀑布流主要依赖两个属性。 2.column-count 属性&#xff0c;是控制屏幕分为多少列。 3.column-gap 属性&#xff0c;是控制列与列之间的距离。 <!DOCTYPE html> <html lang"en"> <head><meta charset&q…

链 表

3_1 删除链表中的节点 Answer-将被删节点下一个val复制到待删除节点&#xff0c;然后将待删节点直接连接到下下一个节点即可。 学到&#xff1a; /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) …