uCOS II中信号量的使用
2016-07-13 10:27
441 查看
对于信号量,uCOS II中共提供了六个函数:OSSemCreate 、OSSemDel、OSSemPend、OSSemPost、OSSemAccept、OSSemQuery。其中我们常用的只有三个即 OSSemCreate 、OSSemPend、OSSemPost 。
信号量的结构为:
typedef struct {
INT8U OSEventType;
INT8U OSEventGrp;
INT16U OSEventCnt;
void *OSEventPtr;
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
} OS_EVENT;
OSSemCreate的函数原型为:OS_EVENT *OSSemCreate(INT16U cnt),cnt 表示在实际使用中有多少个相同的资源,cnt的值就是OSEventCnt的值。
OSSemPend的函数原型为:void OSSemPend(OS_EVENT *pevent,INT16U timeout,INT8U err),pevent:就是要请求的信号量地址;timeout:请求的超时时间,如果为0表示无限时等待;err:用来返回是否出错。每执行一次 OSSemPend,OSEventCnt就会减1。如果OSEventCnt值为0,执行OSSemPend时,当时任务将因为无法得到相应的资源而被 挂起。
OSSemPost的函数原型为:INT8U OSSemPost(OS_EVENT *pevent),同样pevent 就是要发送的信号量地址;每执行一次OSSemPost,OSEventCnt就会加1。
信号量的结构为:
typedef struct {
INT8U OSEventType;
INT8U OSEventGrp;
INT16U OSEventCnt;
void *OSEventPtr;
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
} OS_EVENT;
OSSemCreate的函数原型为:OS_EVENT *OSSemCreate(INT16U cnt),cnt 表示在实际使用中有多少个相同的资源,cnt的值就是OSEventCnt的值。
OSSemPend的函数原型为:void OSSemPend(OS_EVENT *pevent,INT16U timeout,INT8U err),pevent:就是要请求的信号量地址;timeout:请求的超时时间,如果为0表示无限时等待;err:用来返回是否出错。每执行一次 OSSemPend,OSEventCnt就会减1。如果OSEventCnt值为0,执行OSSemPend时,当时任务将因为无法得到相应的资源而被 挂起。
OSSemPost的函数原型为:INT8U OSSemPost(OS_EVENT *pevent),同样pevent 就是要发送的信号量地址;每执行一次OSSemPost,OSEventCnt就会加1。
相关文章推荐
- Linux基础(1)之shell
- 切换zendstudio默认的文件存储位置
- Ubuntu 建立Samba服务器
- twig nl2br不能用
- Linux常用命令大全
- bzoj1449/2895[JSOI2009]球队收益
- Servlet 中文乱码问题及解决方案剖析
- HTML学习笔记1.11-引入样式表
- 异常org.hibernate.QueryException: could not resolve property的原因 解决办法
- Qt5.4中遇到找不到头文件<QApplication>等。
- YAML简介与使用实例
- jquery checkbox 是否选择
- WebStorm 10.0.3安装
- 键盘回车事件导致页面刷新的问题
- ucos-ii 信号量的使用
- hdu 1969 pie 贪心+二分
- php检测404页面
- 关于安卓屏幕横竖屏设置以及屏幕旋转的问题
- java NIO原理 图文分析及代码实现
- ucos ii信号量的理解