OS_EVENT *OSSemCreate (INT16U cnt)
{
OS_EVENT *pevent;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
}//如果是中断服务子程序调用创建信号量函数,则返回空指针
OS_ENTER_CRITICAL();//关中断
pevent = OSEventFreeList;//如果不是中断服务子程序调用,则将下一个空闲事件控制块链表指针赋给当前指针 /* Get next free event control block */
if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */
OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
}//如果事件控制块不为空,则将下一个空闲的事件控制块指针赋给空闲事件控制块链表<
信号量之创建信号量——OSSemCreate()
最新推荐文章于 2025-03-24 14:06:33 发布
本文介绍如何使用OS_EVENT *OSSemCreate(INT16U cnt)函数创建信号量。当在中断服务子程序中调用时,函数会返回空指针。在非中断环境下,函数获取空闲事件控制块并初始化为信号量类型,设置计数值,并对等待任务列表进行初始化。返回的事件控制块指针作为信号量的操作句柄。

最低0.47元/天 解锁文章
6919

被折叠的 条评论
为什么被折叠?



