博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
互斥信号量
阅读量:5228 次
发布时间:2019-06-14

本文共 2387 字,大约阅读时间需要 7 分钟。

  互斥信号量是 uC/OS 操作系统的一个内核对象,与多值信号量非常相似,但它是二值的,只能是 0 1,所以也叫二值信号量,主要用于保护资源。

  如果想要使用互斥信号量,就必须事先使能互斥信号量。互斥信号量的使能位于“os_cfg.h

/* --------------------- MUTUAL EXCLUSION SEMAPHORES ------------------- */#define OS_CFG_MUTEX_EN                 1u   //使能或禁用互斥信号量#define OS_CFG_MUTEX_DEL_EN             1u   //使能或禁用 OSMutexDel() 函数    #define OS_CFG_MUTEX_PEND_ABORT_EN      1u   //使能或禁用 OSMutexPendAbort() 函数
View Code

OSMutexCreate ()

  要使用 uC/OS 的互斥信号量必须先声明和创建互斥信号量,调用 OSMutexCreate () 函数可以创建一个多值信号量。OSMutexCreate () 函数的信息如下表所示 :

  OSMutexCreate () 函数的定义位于“os_mutex.c”:

OSMutexCreate () 

  其中,调用了 OS_PendListInit() 函数初始化了互斥信号量的等待列表。每个互斥信号量都有一个等待列表,凡是等待该互斥信号量的的任务都会被插入到这个等待列表,方便高效管理。          OS_PendListInit() 函数的定义位于“os_core.c”:

OS_PendListInit() 

OSMutexPost () 

OSMutexPost () 函数用于释放(发布,提交)互斥信号量。OSMutexPost () 函数的信息如下表所示。

  OSMutexPost () 函数的定义也位于“os_mutex.c

OSMutexPost ()

  OSMutexPost () 函数中,会调用 OS_Post() 函数发布内核对象。OS_Post() 函数是一个底层的发布函数,它不仅仅用来发布互斥信号量,还可以发布多值信号量、消息队列、事件标志组、任务消息队列和任务信号量。

  OS_Post() 函数的定义位于“os_core.c”:

OS_Post() 

OSMutexPend () 

  OSMutexPost () 互斥信号量释放函数相对应,OSMutexPend() 函数用于申请(等待,请求)获取一个互斥信号量。

  OSMutexPend() 函数的定义也位于“os_mutex.c”:

OSMutexPend() 

  OSMutexPend() 函数会调用一个更加底层的等待函数来执行当前任务对互斥信号量的等待,该函数就是 OS_Pend()。与 OS_Post() 函数一样,OS_Pend() 函数不仅仅用来等待互斥信号量,还可以等待多值信号量、消息队列、事件标志组、任务消息队列和任务信号量

  OS_Pend() 函数的定义位于“os_core.c”:

OS_Pend()

OSMutexPendAbort()

  OSMutexPendAbort() 函 数 用 于 中 止 任 务 对 一 个 互 斥 信 号 量 的 等 待 。 要 使 用OSMutexPendAbort () 函 数 , 还 得 事 先 使 能 OS_CFG_MUTEX_PEND_ABORT_EN ( 位 于os_cfg.h”)

#define OS_CFG_MUTEX_PEND_ABORT_EN      1u   //使能或禁用 OSMutexPendAbort() 函数

  OSMutexPendAbort() 函数的信息如下表所示:

  OSMutexPendAbort() 函数的定义位于“os_mutex.c”:

OSMutexPendAbort()

  OSMutexPendAbort() 函数会调用一个更加底层的中止等待函数来执行当前任务对多值

信号量的等待,该函数就是 OS_PendAbort()OS_PendAbort() 函数不仅仅用来中止对多值信号量的等待,还可以中止对互斥信号量、消息队列、事件标志组、任务消息队列或任务信号量的等待。

  OS_PendAbort() 函数的定义位于“os_core.c”:

OS_PendAbort()

OSMutexDel()

  OSMutexDel() 函数用于删除一个互斥信号量。要使用 OSMutexDel() 函数,还得事先使OS_CFG_MUTEX_DEL_EN(位于“os_cfg.h”),

#define OS_CFG_MUTEX_DEL_EN             1u   //使能或禁用 OSMutexDel() 函数

  OSMutexDel() 函数的信息如下表所示:

 

  OSMutexDel() 函数的定义位于“os_mutex.c”:

OSMutexDel()

  OSMutexDel() 函数会调用一个更加底层的删除等待对象的函数来执行对互斥信号量的删除,该函数就是 OS_PendObjDel ()OS_PendObjDel () 函数不仅仅用来删除互斥信号量,还可以删除多值信号量、消息队列、事件标志组、任务消息队列或任务信号量。

  OS_PendObjDel() 函数的定义位于“os_core.c”。

OS_PendObjDel()

 

 

 

转载于:https://www.cnblogs.com/tianxxl/p/10370496.html

你可能感兴趣的文章
java面向接口编程之适配器模式
查看>>
testparm - 检查smb.conf配置文件的内部正确性
查看>>
iOS开发UI篇—UITabBarController简单介绍
查看>>
MAC OX 配置JDK环境变量
查看>>
数据结构与算法自学系列之动态规划(一)
查看>>
《团队-----吃货之家------项目总结》
查看>>
在Android迷你广告上添加浮动的关闭按钮
查看>>
python之HTMLParser解析HTML文档
查看>>
Attach、Detach和DeleteObject
查看>>
nodejs实现Websocket的数据接收发送
查看>>
Asp.Net Core 基于QuartzNet任务管理系统(这是一篇用来水的随笔)
查看>>
SpringMVC处理静态资源
查看>>
Weblogic漏洞修复记录
查看>>
《设计模式之禅》学习笔记(十四)
查看>>
linux中sudo命令的使用
查看>>
二、React中的更新
查看>>
Codeforces Round #499 (Div. 2) D. Rocket题解
查看>>
吃一垫长一智
查看>>
串口(USART)通信-串口通讯协议简介
查看>>
如何统计Visual Studio Code项目的代码行数
查看>>