RTX5 | 互斥量01 - 互斥量的使用
文章目录
- 一、前言
- 二、实验目的
- 三、API
- 3.1、osMutexAttr_t
- 3.2、osMutexNew
- 3.3、osMutexAcquire
- 3.4、osMutexGetOwner
- 3.5、osMutexRelease
- 四、代码
- 4.1、main.h
- 4.2、main.c
- 五、Event Recorder调试
- 5.1、System Analyzer
- 5.2、RTX RTOS
- 5.3、Debug (printf) Viewer
一、前言
互斥量通常在各种各样的操作系统上用于资源管理。MCU上的很多资源能被复用,但是,在同一个时刻上仅仅只有一个线程能访问这些资源(例如通讯(串口,SPI),内存,文件等)。互斥量通常用于保护一些共享资源的访问。在线程上获取互斥量,也必须释放互斥量(释放了互斥量,其他线程才能访问共享资源)。
互斥量是一个特别的信号量。在同一个时刻,信号量可以有多个访问权限,而互斥量仅仅只有一个访问权限(只允许一个线程访问)。它要么有效的(1),要不被一个获取了互斥量的线程阻塞(0)。互斥量的好处在于它引入线程所有权。当一个线程获取了互斥量就变成互斥量的拥有者,获取互斥量并没有任何延时(通过osMutexRecursive设置)。所以,互斥量的获取与释放可以被嵌套。
以上都是从RTX5官方文档翻译过来的。除此之外,我强烈建议把《嵌入式实时操作系统uc/OS-III》的第13章-资源管理仔细读几遍,在实际工作中反复思考。
STM32工程:
链接:https://pan.baidu.com/s/1jZc6XpyOJ9So2ey_7Bw4CA
提取码:jalh
二、实验目的
1、LED线程与A线程分别成功获取互斥量后继续,线程终止时释放互斥量。
三、API
3.1、osMutexAttr_t
/* 使用案例1 */
const osMutexAttr_t Thread_Mutex_attr =
{.name = "Mutex One", /* 互斥量名字 */.attr_bits = osMutexPrioInherit | osMutexRobust, /* 继承更高优先级(解决优先级反转问题),线程终止时(终止态)自动释放互斥量 */
};/* 使用案例2 */
const osMutexAttr_t Thread_Mutex_attr =
{.name = "Mutex One",.attr_bits = osMutexPrioInherit | osMutexRobust | osMutexRecursive, /* 继承更高优先级,线程终止时自动释放互斥量,一个线程多次获取互斥量不会进入阻塞态 */
};/* 使用案例3 */
const osMutexAttr_t Thread_Mutex_attr =
{.name = "Mutex One",.attr_bits = 0, /* 不继承更高优先级,线程终止时不自动释放互斥量,一个线程多次获取互斥量将会进入阻塞态(除非先释放互斥量才能再一次获取互斥量) */
};
3.2、osMutexNew
/* 使用案例1 */
osMutexId_t mutexID_One = NULL; /* 保存互斥量ID */const osMutexAttr_t Thread_Mutex_attr =
{.name = "Mutex One", /* 互斥量名字 */.attr_bits = osMutexPrioInherit | osMutexRobust, /* 继承更高优先级(解决优先级反转问题),线程终止时自动释放互斥量 */
};mutexID_One = osMutexNew(&Thread_Mutex_attr); /* 创建互斥量 */
3.3、osMutexAcquire
/* 使用案例 */
osMutexAcquire(mutexID_One,osWaitForever); /* 获取互斥量,一直等待直到获取成功 */
osMutexAcquire(mutexID_One,10U); /* 获取互斥量,超时时间10个time ticks */
3.4、osMutexGetOwner
/* 使用案例 */
osThreadId_t thread_Owner; thread_Owner = osMutexGetOwner(mutexID_One); /* 获取互斥量metxID_One的线程拥有者 */
3.5、osMutexRelease
/* 使用案例 */
status = osMutexRelease(mutexID_One); /* 释放互斥量 */
四、代码
4.1、main.h
4.2、main.c
五、Event Recorder调试
5.1、System Analyzer
从System Analyzer看到互斥量被使用。
5.2、RTX RTOS
5.3、Debug (printf) Viewer
LED线程与A线程在交替运行。
RTX5 | 互斥量01 - 互斥量的使用相关推荐
- 3.9、互斥锁(互斥量)
3.9.互斥锁(互斥量) 1.互斥锁(互斥量)的介绍 2. 互斥量相关操作函数 3.互斥量函数的使用介绍 ①pthread_mutex_init ②pthread_mutex_destroy ③pth ...
- 线程同步之互斥量(互斥锁)
1 同步的概念 所谓同步, 即同时起步,协调一致.不同的对象, 对"同步" 的理解方式略有不同. 如,设备同步,是指在两个设备之间规定一个共同的时间参考: 数据库同步, 是指让两个 ...
- mmse评估量表_简易精神状态评价量表(mmse量表) 打印版.doc
简易精神状态评价量表(mmse量表)15016 简易精神状态评价量表(MMSE) 项目 积分 定向力 (10分) 1.今年是哪一年 现在是什么季节? 现在是几月份? 今天是几号? 今天是星期几? 1 ...
- 底量超顶量超级大黑马指标源码_底量超顶量+地量买点_月线底量超顶量大牛股,底量超顶量超级大黑马,底量超顶量买入指标,后量超前量买入指标_指标公式分享交流论坛_理想论坛 - 股票论坛...
l 图形特征: (1) 当股价从头部滑落一段时间后,会有一个见底回升的过程. (2) 这个头部区间的成交量称为顶量,见底回升时的成交量称为底量. (3) ...
- 国庆期间每类视频点赞量和转发量
国庆期间每类视频点赞量和转发量 题目链接 描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_l ...
- 牛客网 SQL大厂面试真题篇 SQL5 国庆期间每类视频点赞量和转发量
描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet commen ...
- OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量
关于 数学 的分支 - 线性变化量.离散量.随机量 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作 ...
- Python爬虫获取文章的标题及你的博客的阅读量,评论量。所有数据写入本地记事本。最后输出你的总阅读量!
Python爬虫获取文章的标题及你的博客的阅读量,评论量.所有数据写入本地记事本.最后输出你的总阅读量!还可以进行筛选输出!比如阅读量大于1000,之类的! 完整代码在最后.依据阅读数量进行降序输出! ...
- Pytorch 计算参数量与计算量Flops
获取网络模型的每一层参数量与计算量(Flops)---Pytorch 分析网络的参数量与计算量: 1.ptflops 安装: pip install --upgrade git ...
最新文章
- P114、面试题17:合并两个排序的链表
- Windows Phone 7第一次亲密接触
- 华为配置(S3100)
- Vue 全家桶 + Express 实现的博客(后端API全部自己手写)
- Android Activity:四种启动模式,Intent Flags和任务栈(转自他人博客)
- vxlan 资料及其在 neutron中的应用
- mpvue 从零开始 女友的收纳盒 6 mpvue-entry入口管理
- 握手失败_主人用吃的训练小柴犬握手,老柯基看到后的表现出了吃货的本能!...
- java-DateFormat
- 一个简单的PopupWindow做的选项菜单点击按钮会在按钮下弹出几个下拉控件
- Python基础10—I/O编程
- php社工源码,社工库源码搜集
- 易语言取MySQL错误代码,易语言中“取错误码”命令详解
- 分享几款狂拽炫酷屌炸天的大屏监控场景案例
- 计蒜客·中国邮递员问题
- 基于SSM+Layui的逆风医疗管理系统
- 人人都会用的矢量设计软件,这6个不可不知道!
- GIS开发之二维地下管线综合管理系统(Arcgis)第四节 使用arcgis api for js 加载天地图
- 如何向一个普通人说明什么是物联网?
- python异常处理的作用_Python 中的异常处理方式
热门文章
- MySQL5.7的搭建以及SSL证书
- (转)shiro权限框架详解02-权限理论介绍
- 另类玩法:通过 DNS 进行文件传输
- gitlab与已安装nginx(tengine)冲突解决方案,使用自己安装的nginx(tengine)
- C#的未来:扩展属性及更多
- web developer tips (78):使用文档大纲导航
- 2008年秋季学期文兴小学四年级班主任工作计划
- 一个有钱人儿子写的作文!
- 如何去除字符串中的 “\n“ ?80% 的同学错了!
- 飞鸽传书是怎么就变成飞秋了的?