uCOS-II任务间通信之信号量 [转载]

本文详细介绍了uCOS-II操作系统中信号量的创建、查询及使用,包括OSSemCreate()、OSSemQuery()、OSSemPost()和OSSemPend()函数的代码分析,阐述了如何在任务间进行通信。
摘要由CSDN通过智能技术生成
uCOS-II任务间通信之信号量
信号量是什么?信号量有什么用?
信号量是可以用来表示一个或多个事件的发生,还可以用来对共享资源的访问。
uCOS-II提供了5个对信号量进行操作的函数。如下所示:
1. 建立一个信号量 -- OSSemCreate()
2. 等待一个信号量 -- OSSemPend()
3. 发送一个信号量 -- OSSemPost()
4. 无等待地请求一个信号量 -- OSSemAccept()
5. 查询一个信号量的当前状态 -- OSSemQuery()

OSSemCreate()的实现代码如下:

OS_EVENT *OSSemCreate (INT16U cnt)
{
    OS_EVENT *pevent;
 
    OS_ENTER_CRITICAL();
    pevent = OSEventFreeList;                                          //(1)
    if (OSEventFreeList != (OS_EVENT *)0) {                            //(2)
        OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
    }
    OS_EXIT_CRITICAL();
    if (pevent != (OS_EVENT *)0) {                                     //(3)
        pevent->OSEventType = OS_EVENT_TYPE_SEM;                       //(4)
        pevent->OSEventCnt  = cnt;                                     //(5)
        OSEventWaitListInit(pevent);                                   //(6)
    }
    return (pevent);                                                   //(7)
}

在MCU看来,创建一个信号量就是申请一个事件控制块,接着初始化这个事件控制块。
首先,它从空闲任务控制块链表中得到一个事件控制块(1),并对空闲事件控制链表的指针进行适当的调整,使它指向下一个空闲的事件控制块(2)。如果这时有任务控制块可用(3),就将该任务控制块的事
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值