VxWorks实验八 信号

实验八信号
1 实验目的
1.学习使用信号
2 实验内容
在实验一建立的 project 中,编写一段信号处理程序,将其与SIGINT 相关连,
使用kill()发送SIGINT 信号并调用信号处理程序。观察运行结果。
3 实验设备及工具
1.硬件:
a) PC 机
2.软件:
a) PC 机操作系统Windows2000 或windowsXP
b) Tornado2.2
4 实验原理

信号可以用来通知任务处理特定的事件。当引起一个信号的事件发生时,信号产生(generated)。当处理事件的任务激活时,信号释放(delivered)。信号的
生命期是从产生到释放之间的时间。一个已经产生但还没有释放的信号是挂起的(pending)。信号的生命期可能比较长。VxWorks 允许软件信号功能。信号将异步地改变任务的控制流。任何任务都可以向一个特定任务发送信号。被信号通知的任务立即挂起它当前的执行线程,在下次任务被调度运行的时刻,指定的信号处理程序将获得处理器。甚至尽管任务处于阻塞状态,其信号处理程序仍可以被调用执行。信号处理程序是由用户提供并与特定的信号相联系,用于执行当信号发生时必要的处理工作。信号适用于错误和异常处理,很少用于任务间通信。Wind 内核提供了两种信号接口:BSD4.3 和POSIX 信号接口。POSIX 接口提供比BSD4.3 接口更强大的标准接口。应用程序仅能使用其中一个。VxWorks 提供31 种不同的信号。程序可以调用kill()产生一个信号,与中断和硬件异常类似;调用sigaction()将信号与指定的信号处理程序相对应。当信号处理程序运行时,其他信号被阻塞。通过调用sigprocmask(),任务可以阻止一些信号的出现,如果当信号产生时被阻塞,它的信号处理程序将在信号解除阻塞时调用。信号处理程序通常定义形式为:

数据结构 struct sigaction 包含处理程序的信息,sigaction()含有三个参数:需要捕获的信号编号、指向新的处理数据结构的指针(类型为struct sigaction),指向旧的处理数据结构的指针(类型为struct sigaction)。如果程序不需要旧的处理数据结构的指针(*pOact),那么可以传递一个空指针NULL。当需要把一个信号发送给一个任务时,可以调用kill()函数,第一个参数是任务的id 号,第二个参数是欲发送信号。

5 实验步骤
1.编程(假设编写的源文件为s8_signal.c)
2.将s8_signal.c 添加到project 中
3.编译(如果有错误,则改正)
4.下载到VxSim 模拟器上运行,观察输出。
6 实验报告要求
1.写出实验过程
2.记录输出结果。
3.附上源程序

附C源程序如下:

 1 #include"vxWorks.h"
 2 #include"sigLib.h"
 3 #include"taskLib.h"
 4 #include"stdio.h"
 5
 6 SEM_ID semMutex;
 7 int sigflag=0;
 8
 9 static void catchSIGINT(int signal)
10 {
11     logMsg("sigCatcher:i got this sig\n",0,0,0,0,0,0);
12     sigflag=1;
13 }
14
15 static void sigCatcher(void)
16 {
17     struct sigaction newAction;
18     int i;
19
20     newAction.sa_handler=catchSIGINT;
21     sigemptyset(&newAction.sa_mask);
22     newAction.sa_flags=0;
23     if(sigaction(SIGINT,&newAction,NULL)==-1)
24         logMsg("couldn‘t install signal handler.\n");
25     logMsg("sigCatcher:install SIGINT handler success.\n");
26     semGive(semMutex);
27     for(i=0;i<15;i++)
28         logMsg("sigCatcher:i am doing some work.\n");
29     logMsg("sigCatcher: i exit.\n");
30
31 }
32
33 void s8(void)
34 {
35     int i,j,taskId;
36     STATUS taskAlive;
37     semMutex=semBCreate(SEM_Q_PRIORITY,SEM_EMPTY);
38     if((taskId=taskSpawn("signal",100,0x100,20000,
39         (FUNCPTR)sigCatcher,0,0,0,0,0,0,0,0,0,0))==ERROR)
40     semTake(semMutex,WAIT_FOREVER);
41     logMsg("sigSender:i send SIGINT.\n");
42     kill(taskId,SIGINT);
43     logMsg("sigSender:i exit.\n");
44 }

运行的主要步骤如下:

时间: 2024-11-10 15:18:18

VxWorks实验八 信号的相关文章

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验八:PS/2模块② — 键盘与组合键

实验八:PS/2模块② — 键盘与组合键 实验七之际,我们学习如何读取PS/2键盘发送过来的通码与断码,不过实验内容也是一键按下然后释放,简单按键行为而已.然而,实验八的实验内容却是学习组合键的按键行为. 不知读者是否有类似的经历?当我们使用键盘的时候,如果5~6按键同时按下,电脑随之便会发出“哔哔”的警报声,键盘立即失效.这是键盘限制设计,不同产品也有不同限制的按键数量.默认下,最大按键数量是5~7个.所谓组合键就是两个以上的按键所产生的有效按键.举例而言,按下按键 <A> 输出“字符a”,

实验八——函数定义及调用总结

实验八--函数定义及调用总结 1.本次课学习到的知识点: (1)void为不反回结果的函数,且void不能省略,否则默认为int,函数体中没有表达式的return语句,也可省略return. (2)不返回结果的函数在定义.调用.参数传递.函数声明上,思路与以前相同,适用于把一些确定的.相对独立的程序功能封装成函数. (3)局部变量:定义在函数的内部,且有效作用范局部变量一般定义在函数或复合语句的开始处,围局限于所在的函数内部,形参是局部变量. (4)不能定义在中间位置. (5)全局变量:定义在函

实验八:RIPv1

实验八:RIPv1 在GNS3上连接设备 配置路由器 (1)R1 (2)R2 (3)R3 (4)R4

Packet Tracer 5.0实验(八) 路由器静态路由配置

Packet Tracer 5.0实验(八) 路由器静态路由配置 一.实验目标 掌握静态路由的配置方法和技巧: 掌握通过静态路由方式实现网络的连通性: 熟悉广域网线缆的连接方式: 二.实验背景 学校有新旧两个校区,每个校区是一个独立的局域网,为了使新旧校区能够正常相互通讯,共享资源,每个校区出口利用一台路由器进行连接,两台路由器间学校申请了一条2M的DDN专线进行相连,要求你做适当配置实现两个校区间的正常相互访问. 三.技术原理 路由器属于网络层设备,能够根据IP包头的信息,选择一条最佳路径将数

实验八 进程的切换和系统的一般执行过程

实验八 进程的切换和系统的一般执行过程 20135114王朝宪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.进程切换的关键代码switch_to分析 1.1 进程调度与进程调度的时机分析 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程,选择的过程中运用了不同的策略而已. 对于理解操作系统的工作机制,反而是进程的调度时机与进程的切换机制

Linux基础入门(新版)(实验五至实验八)

实验五 环境变量与文件查找 (环境变量的作用与用法,及几种搜索文件的方法) 一.环境变量 1.变量 (1)常变量与值是一对一的关系 (2)变量的作用域即变量的有效范围(比如一个函数中.一个源文件中或者全局范围),在该范围内只能有一个同名变量.一旦离开则该变量无效,如同不存在这个变量一般. 这里是一个例子: declare命令创建一个变量名为 tmp 的变量: $ declare tmp 使用=号赋值运算符为变量 tmp 赋值为 shiyanlou:$ tmp=shiyanlou 读取变量的值,使

实验八--排序算法

实验八 排序算法的实现 一. 实验目的: 熟练掌握常用的直接插入排序.简单选择排序.冒泡排序等算法. 深入理解各种查找排序的结构特点及各算法之间的区别. 二. 实验内容: 采用直接插入排序.简单选择排序.冒泡排序等常用的排序算法实现给数据的排序. 各种排序算法的结构特点及各算法之间的区别. 代码如下: RecordNode.java package sort; import java.util.Scanner; public class RecordNode { public int key ;

实验八 应用层协议Ⅱ-FTP协议分析

实验八 应用层协议Ⅱ-FTP协议分析 一.实验目的 1.掌握FTP协议的实现原理. 2.了解控制通道和数据通道. 二.实验内容 用WareShark追踪ftp连接. 1.三次握手 2.ftp服务器回发"准备就绪". 3.客户端给服务器发送用户名,服务器回发ACK,并向服务器请求密码. 4.客户端给服务器发送密码,密码为"[email protected]",服务器回发ACK并告诉客户端登录       成功. 三.实验总结 这次实验体验了FTP文件传输的过程,从三次

《软件技术基础》实验指导 实验八

查找 实验八 查找 一.实验目的 熟悉线性表.二叉排序树和散列表的查找 能够编写一些查找的算法 二. 实验内容 18个记录的关键字如下,编写分块查找的算法进行查找. 22.12.13.8.9.20.33.42.44.38.24.48.60.58.74.49.86.53 编写一个判别给定的二叉树是否为二叉排序树的算法,设二叉树以二叉链表存储表示,结点的数据域只存放正整数. Tips 8.1 分块查找 http://student.zjzk.cn/course_ware/data_structure