欢迎来到天天文库
浏览记录
ID:9887612
大小:72.00 KB
页数:9页
时间:2018-05-13
《vxworks实时操作系统signal机制的应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ECC/BJVXWORKS实时操作系统SIGNAL机制的应用版本:1.0版[摘要]介绍VXWORKS实时操作系统的信号机制以及各种处理方法,特别是利用该机制实现异常情况的恢复和处理。1.概述信号可用来在同一任务内部或不同任务之间实现异步通信,从而改变对多个任务的控制流程。所有任务或中断服务程序均能向指定的任务发送信号,该信号的接收任务将立刻挂起当前的执行线程,而激活任务指定的信号处理程序。信号处理程序是由用户定义的,它关联与特定的信号,而且任务接收到该指定信号时的所有必要处理都在该程序中实现。信号
2、的这种机制使得它特别适合于用来实现差错和异常处理。2.信号屏蔽在信号处理时,可通过信号屏蔽来选择需要进行处理的信号,接收到被屏蔽的信号,即使指定了相应的处理程序,也不作任何处理。为了实现对信号的屏蔽,需要定义数据类型为sigset_t的变量,同时必须包含头文件“signal.h”。下面介绍实现这一功能的函数:intsigemptyset(sigset_t*pSet)该函数初始化信号集,使得该信号集不包含任何信号;intsigfillset(sigset_t*pSet)该函数初始化信号集,使得该信号
3、集包含所有信号;intsigaddset(sigset_t*pSet,intsigno)该函数向信号集中增加新的信号;intsigdelset(sigset_t*pSet,intsigno)该函数删除信号集中的信号;intsigismember(sigset_t*pSet,intsigno)该函数用来判断信号集是否包含某信号;intsigprocmask(inthow,constsigset_t*pSet,sigset_t*pOset)该函数用来设置信号屏蔽;这里,pSet为新的信号集,pOset
4、为当前的信号集,而how则指示处理方式,其取值与处理方式对应关系如下:SIG_BLOCK结果信号集为当前信号集和指定信号集二者的并集,通过这种方式,可向当前信号集增添指定的元素;SIG_UNBLOCK结果信号集为指定信号集的补集和当前信号集二者的交集;通过这种方式,可从当前信号集删除指定的元素;页码:9/8ECC/BJVXWORKS实时操作系统SIGNAL机制的应用版本:1.0版SIG_SETMASK结果信号集为指定信号集;1.信号发送intraise(intsigno)任务调用该函数来向自己发送
5、指定的信号;intkill(inttid,intsigno)该函数可向任何任务发送指定的信号;2.信号处理程序如果一个任务指定了对于某个信号的处理程序,不管该任务是否被挂起时,接收到该信号将立刻调用信号处理程序,信号处理程序执行完毕后,任务恢复到先前的状态,比如:任务在挂起状态接收到该信号,那么处理程序执行完毕后任务将返回到挂起状态。由于信号处理函数由操作系统调用,所以其函数形式有着严格的要求,包括下面的两种形式:第一方案:利用signal函数实现信号与处理函数的关联void*signal(int
6、signo,void*pHandler())()该函数建立信号signo与处理函数pHandler之间的联系;同时,其返回当前信号处理函数的指针;voidsigHandler(intsigno);单参数信号处理程序,这里sigHandler为用户自己定义的函数名(下同),该函数只提供了不同的信号编号signo,进一步的信号代码信息无法获取。voidsigHandler(intsigno,intcode,structsigcontext*pContext);多参数信号处理程序,该函数只提供了不同的信
7、号编号signo和信号代码code信息,可对信号接收所更加详细的处理。第二方案:利用sigaction函数实现信号与处理函数的关联intsigaction(intsigno,conststructsigaction*pAct,structsigaction*pOact);该函数建立信号signo与pAct结构中指定的处理函数之间的联系;同时,当前信号处理函数的有关信息将保存在结构pOact中;另外,为了调用多参数处理程序,pAct结构中的成员sa_flags必须设置SA_SIGINFO;voids
8、igHandler(intsigno);单参数信号处理程序,这里sigHandler为用户自己定义的函数名(下同),该函数只提供了不同的信号编号signo,进一步的信号代码信息无法获取。voidsigHandler(intsigno,siginfo_t*pInfo,void*pContext);多参数信号处理程序,该函数只提供了不同的信号编号signo和信号代码code信息,可对信号接收所更加详细的处理。这里有必要介绍一下几个数据结构:页码:9/8ECC/BJVXWORKS实时操作
此文档下载收益归作者所有