MBPLC的中断包括秒中断、分同步中断、CAN网中断以及BSP级的以太网中断、硬盘中断等等。下面以秒中断(中断级别为5)为例说明中断的使用方法:
ntConnect(INUM_TO_IVEC(INT_VEC_GET(5)), SECISR, 0);
sysIntEnablePIC(5);
这两个函数用于将中断处理程序SECISR()与秒中断相关联,存放于中断向量表的对应表项中,当秒中断事件出现时,VxWorks内核将调用中断处理程序。这时可利用中断处理程序释放一个信号量(通过semGive()函数),通过该信号量驱动相应的数据处理模块(通过sem- Take()函数),从而实现实时操作。
此外,我们还使用intLock()函数和intUnlock()函数来设置中断屏蔽,用以保证受保护的代码在执行过程中不受中断的干扰。
3.4 网络通信
网络通信一般可通过套接口(socket)实现。Vx- Works提供了标准的BSD socket调用,具有两种类型:Stream socket(全双工流类型)、Datagram socket(数据报类型)。前者支持TCP协议,后者支持UDP协议。任何一个任务都可以打开一或多个socket,其它任务的socket可与之连接。
客户端程序首先调用socket()函数产生用于与各分系统连接的套接字,然后初始化一个套接口结构体,为其赋上服务端的IP地址和端口号,并将其作为函数connect()的参数,调用connect()函数主动去连接服务器端。连接成功后,用send()和recv()函数读写数据,直到全部数据都交换完,再用close()函数关闭套接口。
服务器端也先用socket()函数建立套接口,再调用bind()函数将自身IP和端口号绑定,以保证客户端正确识别,然后用listen()函数指明已准备好接受来自客户端的连接,又用accpet()函数接受一个连接请求,接受后用send()和recv()函数来传输数据,直到全部数据都交换完,再用close()函数关闭套接口。为了确保服务器能够实时接收客户端的数据,当服务端与客户端建立连接之后,必须嵌入循环,利用recv()函数不断等待客户数据。同时客户端每次发送数据之后也应等待服务端回复,建立握手机制。