欢迎来到天天文库
浏览记录
ID:14905781
大小:91.50 KB
页数:12页
时间:2018-07-30
《os_sem信号量源码注释》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1/*2*************************************************************************************3*uC/OS-II实时控制内核4*主要的包含文件5*信号量程序函数6*7*文件:OS_SEM.C信号量程序函数8*作者:JeanJ.Labrosse9*中文注解:钟常慰zhongcw@126.com译注版本:1.0请尊重原版内容10***************************************************
2、**********************************11*/1213#ifndefOS_MASTER_FILE//是否已定义OS_MASTER_FILE主文件14#include"includes.h"//包含"includes.h"文件,部分C语言头文件的汇总打包文件15#endif//定义结束1617#ifOS_SEM_EN>0//条件编译:当OS_SEM_EN允许产生信号量程序代码18/*19************************************************
3、*************************************20*无条件地等待请求一个信号量21*22*描述:该函数是查看资源是否使用或事件是否发生。中断调用该函数查询信号量。23*不同于OSSemPend()函数,如果资源不可使用,OSSemAccept()函数并不挂起任务。2425*参数:pevent指向需要保护地共享资源地信号量。当建立信号量时,用户得到该指针26*27*返回:当调用OSSemAccept()函数时;28共享资源信号量的值>0,则说明共享资源可以使用,这个值被返回调用者,信
4、号量的值减1;29共享资源信号量的值=0,则说明资源不能使用,返回0。30*************************************************************************************31*/3233#ifOS_SEM_ACCEPT_EN>0//允许生成OSSemAccept()函数34INT16UOSSemAccept(OS_EVENT*pevent)//无条件地等待请求一个信号量函数35{36#ifOS_CRITICAL_METHOD==3//中
5、断函数被设定为模式337OS_CPU_SRcpu_sr;38#endif39INT16Ucnt;//信号量的内容暂时存储变量404142#ifOS_ARG_CHK_EN>0//所有参数必须在指定的参数内43if(pevent==(OS_EVENT*)0){//当信号量指针为NULL时,返回0,空指针44return(0);45}46if(pevent->OSEventType!=OS_EVENT_TYPE_SEM){//当事件类型≠信号量类型47return(0);//返回048}49#endif50OS_E
6、NTER_CRITICAL();//关闭中断51cnt=pevent->OSEventCnt;//取信号值52if(cnt>0){//当信号值>0时,该值有效53pevent->OSEventCnt--;//信号量减154}55OS_EXIT_CRITICAL();//打开中断56return(cnt);//返回信号值57}58#endif5960/*$PAGE*/?61/*62******************************************************************
7、*************************建立一个信号量63*64*描述:建立并初始化一个信号量。信号量的作用为:65*1、允许一个任务与其它任务或中断同步;66*2、取得共享资源的使用权;67*3、标志事件的发生68*69*参数:cnt建立信号量的初始值,可以为0~65535的任何值70*71*注意:必须先建立信号量,然后才能使用72*73*返回:!=(void*)0返回指向分配给所建立的消息邮箱的事件控制块指针;74*==(void*)0如果没有可用的事件控制块,返回空指针75**********
8、**********************************************************************************76*/7778OS_EVENT*OSSemCreate(INT16Ucnt)//建立并初始化一个信号量(输入一个信号量值)79{80#ifOS_CRITICAL_METHOD==3//中断函数被设定为模式381OS_CPU_SRcpu_
此文档下载收益归作者所有