文章目录

  • 一、前言
  • 二、实验目的
  • 三、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 - 互斥量的使用相关推荐

  1. 3.9、互斥锁(互斥量)

    3.9.互斥锁(互斥量) 1.互斥锁(互斥量)的介绍 2. 互斥量相关操作函数 3.互斥量函数的使用介绍 ①pthread_mutex_init ②pthread_mutex_destroy ③pth ...

  2. 线程同步之互斥量(互斥锁)

    1 同步的概念 所谓同步, 即同时起步,协调一致.不同的对象, 对"同步" 的理解方式略有不同. 如,设备同步,是指在两个设备之间规定一个共同的时间参考: 数据库同步, 是指让两个 ...

  3. mmse评估量表_简易精神状态评价量表(mmse量表) 打印版.doc

    简易精神状态评价量表(mmse量表)15016 简易精神状态评价量表(MMSE) 项目 积分 定向力 (10分) 1.今年是哪一年 现在是什么季节? 现在是几月份? 今天是几号? 今天是星期几? 1 ...

  4. 底量超顶量超级大黑马指标源码_底量超顶量+地量买点_月线底量超顶量大牛股,底量超顶量超级大黑马,底量超顶量买入指标,后量超前量买入指标_指标公式分享交流论坛_理想论坛 - 股票论坛...

    l         图形特征: (1)       当股价从头部滑落一段时间后,会有一个见底回升的过程. (2)       这个头部区间的成交量称为顶量,见底回升时的成交量称为底量. (3)     ...

  5. 国庆期间每类视频点赞量和转发量

    国庆期间每类视频点赞量和转发量 题目链接 描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_l ...

  6. 牛客网 SQL大厂面试真题篇 SQL5 国庆期间每类视频点赞量和转发量

    描述 用户-视频互动表tb_user_video_log id uid video_id start_time end_time if_follow if_like if_retweet commen ...

  7. OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量

    关于 数学 的分支 - 线性变化量.离散量.随机量 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作 ...

  8. Python爬虫获取文章的标题及你的博客的阅读量,评论量。所有数据写入本地记事本。最后输出你的总阅读量!

    Python爬虫获取文章的标题及你的博客的阅读量,评论量.所有数据写入本地记事本.最后输出你的总阅读量!还可以进行筛选输出!比如阅读量大于1000,之类的! 完整代码在最后.依据阅读数量进行降序输出! ...

  9. Pytorch 计算参数量与计算量Flops

    获取网络模型的每一层参数量与计算量(Flops)---Pytorch 分析网络的参数量与计算量: 1.ptflops             安装: pip install --upgrade git ...

最新文章

  1. P114、面试题17:合并两个排序的链表
  2. Windows Phone 7第一次亲密接触
  3. 华为配置(S3100)
  4. Vue 全家桶 + Express 实现的博客(后端API全部自己手写)
  5. Android Activity:四种启动模式,Intent Flags和任务栈(转自他人博客)
  6. vxlan 资料及其在 neutron中的应用
  7. mpvue 从零开始 女友的收纳盒 6 mpvue-entry入口管理
  8. 握手失败_主人用吃的训练小柴犬握手,老柯基看到后的表现出了吃货的本能!...
  9. java-DateFormat
  10. 一个简单的PopupWindow做的选项菜单点击按钮会在按钮下弹出几个下拉控件
  11. Python基础10—I/O编程
  12. php社工源码,社工库源码搜集
  13. 易语言取MySQL错误代码,易语言中“取错误码”命令详解
  14. 分享几款狂拽炫酷屌炸天的大屏监控场景案例
  15. 计蒜客·中国邮递员问题
  16. 基于SSM+Layui的逆风医疗管理系统
  17. 人人都会用的矢量设计软件,这6个不可不知道!
  18. GIS开发之二维地下管线综合管理系统(Arcgis)第四节 使用arcgis api for js 加载天地图
  19. 如何向一个普通人说明什么是物联网?
  20. python异常处理的作用_Python 中的异常处理方式

热门文章

  1. MySQL5.7的搭建以及SSL证书
  2. (转)shiro权限框架详解02-权限理论介绍
  3. 另类玩法:通过 DNS 进行文件传输
  4. gitlab与已安装nginx(tengine)冲突解决方案,使用自己安装的nginx(tengine)
  5. C#的未来:扩展属性及更多
  6. web developer tips (78):使用文档大纲导航
  7. 2008年秋季学期文兴小学四年级班主任工作计划
  8. 一个有钱人儿子写的作文!
  9. 如何去除字符串中的 “\n“ ?80% 的同学错了!
  10. 飞鸽传书是怎么就变成飞秋了的?