- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ECC/BJ VXWORKS实时操作系统SIGNAL机制的应用 版本:1.0版
页码: PAGE 5/8
[摘要] 介绍VXWORKS实时操作系统的信号机制以及各种处理方法,特别是利用该机制实现异常情况的恢复和处理。
概述
信号可用来在同一任务内部或不同任务之间实现异步通信,从而改变对多个任务的控制流程。所有任务或中断服务程序均能向指定的任务发送信号,该信号的接收任务将立刻挂起当前的执行线程,而激活任务指定的信号处理程序。信号处理程序是由用户定义的,它关联与特定的信号,而且任务接收到该指定信号时的所有必要处理都在该程序中实现。信号的这种机制使得它特别适合于用来实现差错和异常处理。
信号屏蔽
在信号处理时,可通过信号屏蔽来选择需要进行处理的信号,接收到被屏蔽的信号,即使指定了相应的处理程序,也不作任何处理。
为了实现对信号的屏蔽,需要定义数据类型为sigset_t的变量,同时必须包含头文件“signal.h”。
下面介绍实现这一功能的函数:
int sigemptyset ( sigset_t *pSet )
该函数初始化信号集,使得该信号集不包含任何信号;
int sigfillset ( sigset_t *pSet )
该函数初始化信号集,使得该信号集包含所有信号;
int sigaddset ( sigset_t *pSet , int signo )
该函数向信号集中增加新的信号;
int sigdelset ( sigset_t *pSet , int signo )
该函数删除信号集中的信号;
int sigismember ( sigset_t *pSet , int signo )
该函数用来判断信号集是否包含某信号;
int sigprocmask ( int how, const sigset_t *pSet, sigset_t *pOset )
该函数用来设置信号屏蔽;这里,pSet为新的信号集,pOset为当前的信号集,而how则指示处理方式,其取值与处理方式对应关系如下:
SIG_BLOCK
结果信号集为当前信号集和指定信号集二者的并集,通过这种方式,可向当前信号集增添指定的元素;
SIG_UNBLOCK
结果信号集为指定信号集的补集和当前信号集二者的交集;通过这种方式,可从当前信号集删除指定的元素;
SIG_SETMASK
结果信号集为指定信号集;
信号发送
int raise (int signo )
任务调用该函数来向自己发送指定的信号;
int kill (int tid, int signo )
该函数可向任何任务发送指定的信号;
信号处理程序
如果一个任务指定了对于某个信号的处理程序,不管该任务是否被挂起时,接收到该信号将立刻调用信号处理程序,信号处理程序执行完毕后,任务恢复到先前的状态,比如:任务在挂起状态接收到该信号,那么处理程序执行完毕后任务将返回到挂起状态。
由于信号处理函数由操作系统调用,所以其函数形式有着严格的要求,包括下面的两种形式:
第一方案:利用signal函数实现信号与处理函数的关联
void* signal( int signo, void* pHandler () ) ()
该函数建立信号signo与处理函数pHandler之间的联系;同时,其返回当前信号处理函数的指针;
void sigHandler (int signo);
单参数信号处理程序,这里sigHandler为用户自己定义的函数名(下同),该函数只提供了不同的信号编号signo,进一步的信号代码信息无法获取。
void sigHandler (int signo, int code, struct sigcontext * pContext);
多参数信号处理程序,该函数只提供了不同的信号编号signo和信号代码code信息,可对信号接收所更加详细的处理。
第二方案:利用sigaction函数实现信号与处理函数的关联
int sigaction ( int signo, const struct sigaction *pAct, struct sigaction *pOact );
该函数建立信号signo与pAct结构中指定的处理函数之间的联系;同时,当前信号处理函数的有关信息将保存在结构pOact中;
另外,为了调用多参数处理程序,pAct结构中的成员sa_flags必须设置SA_SIGINFO;
void sigHandler (int signo);
单参数信号处理程序,这里sigHandler为用户自己定义的函数名(下同),该函数只提供了不同的信号编号signo,进一步的信号代
您可能关注的文档
- NM400,NM360,NM45,NM300,NM500耐磨钢化学成分及机械性能.doc
- On Sexism in English Personal Names 从英语人名中看性别歧视.doc
- OPPO音乐手机电视广告效果调研报告.doc
- Oracle DataGuard在云浮市电子政务容灾系统中的应用计算机本科毕业论文.doc
- ORACLE数据库SQL语句编写优化总结.doc
- ORACLE数据库高级技术培训-性能优化.ppt
- origin75自定义函数拟合.doc
- OTS认可培训 质保PPAP,OTS奇瑞格式 工装样件认可程序.ppt
- Outfit7会说话的汤姆猫1,2官方幻灯片.ppt
- p-01皮肤的解剖与和功能.ppt
文档评论(0)