![](https://csdnimg.cn/release/download_crawler_static/9506605/bg3.jpg)
思想是当更高优先级的进程
Ji
被进程
Jk
阻塞时,
Jk
暂时继承
Ji
的优先级,这将
防止中间优先级的进程抢占进程
Jk
使高优先级进程
Ji
的阻塞时间延长),略高
于最高优先级任务的优先级。
例:
OSMutexCreate(9,&err)
。建立互斥型信号量,
9
为
PIP
。
其它服务:
OSMutexDel
(),删除互斥型信号量,在删除信号量之前应先删除可能用
到该信号量的所有任务。
OSMutexPend
(),等待一个互斥型信号量(挂起),定义超时值为
0
时则
无限期等待。
OSMutexPost
(),释放一个互斥型信号量。
OSMutexAccept
(),无等待地获取互斥型信号量(不挂起)。
OSMutexQuery
(),获取互斥型信号量的当前状态。
所有服务只能用于任务与任务之间,不能用于任务与中断服务子程序之间。
图
1.3
任务与互斥型信号量之间的关系
1.3 事件标志组( event flag)
事件标志组由 2 部分组成:一是保存各事件状态的标志位。二是等待这些标
志位置位或清除的任务列表。可以用 8 位、16 位或 32 位的序列表示事件标志组,
每一位表示一个事件的发生。
要 使 系 统 支 持 事 件 标 志 组 功 能 , 需 要 在 OS_CFG.H 文 件 中 打 开
OS_FLAG_EN 选项。
应用场合: 如果一个任务需要等待多个事件的同时发生或者多个事件的中
的某个事件发生才能转为就绪态,就可以考虑事件标志组进行任务的同步通信。
操作集合:
OSFlagCreate(),建立一个事件标志组。
事件标志组数据结构包括:指针类型,等待事件标志组的任务列表,以及表
明当前事件标志状态的位。
OSFlagDel(),删除一个事件标志组,在删除事件标志组前必须首先删除操
作该事件标志组的所有任务。
OSFlagPend(),等待事件标志组的事件标志位。
OSFlagPost(),置位或清 0 事件标志组中的事件标志。
OSFlagAccept(),无等待地获得事件标志组中的事件标志,可以被 ISR 调用。
OSFlagQuery(),查询事件标志组的状态。
其中 OSFlagCreate()、OSFlagDel()、OSFlagPend()只能被任务调用,不能被
中断调用。其它服务任务和中断都可调用。