随笔 - 733  文章 - 2  评论 - 12  阅读 - 92万

UCOS-信号量(学习笔记)

当事件控制块类型为OS_Event_Type_SEM类型时就是信号量,包含2个内容:信号量计数器OSEventcnt和等待列表OSEventTbl[].

一创建信号量:OSSemCreat(int16u cnt);其参数表明信号量计数器的初值。该函数创建后等待列表都为0(即没有等待任务),因为等该信号量的任务有的一开始就要执行此时cnt=1;若该任务一开始不能获得运行则cnt=0;当多任务都等待该信号量时则可能cnt初值会大于1;

二等待(请求)信号量:OSSemPend(os_enent *p ,timeout,&err);//当有任务请求时且此时OSEventcnt>0,则减一后式任务运行,若OSEventcnt=0则将该任务存入等待列表指定位置;若其它任务等释放(发送)了该信号量,则会从该信号量的等待列表中找出最好优先级的任务使其运行,如果此时没有等待任务则简单加1.

  OSSemAccept(OS_EVENT *p)//当等待的信号无效时无需等待直接运行。

三发送信号量:INT8U OSSemPost(OS_EVENT *p)//成功则返回OS_NO_ERR

四删除信号量:不用时可删除:OS_EVENT *OSSemDel(OS_EVENT *p,opt,&err)//opt选型有2个值:强制删除和等没有任务等待改信号量时才删除。

五查询信号量状态:INT8U OSSemQuery(OS_EVENT *p,OS_SEM_DATA*pdata)//将查询的结果存在第二个变量中

 

 

 


 

posted on   杰瑞鼠  阅读(482)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示