原创 uCOS II中信号量的使用

2009-6-1 17:18 9016 6 8 分类: MCU/ 嵌入式

  对于信号量,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。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2012-9-3 16:40

很有用,正想了解这个

用户1248856 2009-11-16 11:32

有没有搞错OSSemDel???
相关推荐阅读
用户211336 2011-06-27 15:28
NEC的扩展RAM和CODE BANK在IAR的设置和使用
    NEC的8位单片机有很多型号具有内部扩展RAM和额外代码段,在IAR中如何使用呢,一直没有资料说明,特将它整理后放于此文。 扩展RAM:   变量申明方法如下:#pragma dataseg=...
用户211336 2011-03-02 10:53
define宏定义中的#,##,@#及\符号
1、# (stringizing)字符串化操作符。其作用是:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。 如: #def...
用户211336 2010-07-03 00:41
C51定义位变量方法
使用位域 typedef union {   unsigned char byte;   struct   {      unsigned char bit0:1, bit1:1, bit2:1, b...
用户211336 2010-03-24 20:10
程序编写最重要的原则
代码简单化        编写的代码不仅仅是给计算机执行的,更大的价值在于能被其他人以及自己所理解.        尽量用人的语言来编写程序而不是计算机的语言. ...
用户211336 2009-06-14 20:11
AD6导入使用SolidWorks建立的3D模型
在传统的电子产品整机设计流程里,电器设计部门与结构设计部分是两个完全独立工作的部门,之间没有什么直接的合作关系。多数情况下(这里指的是大多数。因为也是有部分企业的产品是已定型化的,都是先设计好外壳再根...
用户211336 2009-06-12 10:32
使用STM32的PWM输入功能计算输入PWM的周期!
1、时钟部分,TIMER2的时钟频率,我是初始化为36M.      RCC_PCLK1Config(RCC_HCLK_Div2);           //设置低速AHB时钟=系统时钟/2     ...
EE直播间
更多
我要评论
2
6
关闭 站长推荐上一条 /3 下一条