3.2 任务间通信
任务间通信机制是多任务间相互同步和通信,以协调各自活动的主要手段。VxWorks提供的任务间通信手段按其速度由快到慢依次是信号量、消息队列、管道和套接字。常用的通信机制是信号量和消息队列,套接字(Socket)用于网络编程。
(1) 信号量
信号量是实现任务互斥、同步操作的主要机制,VxWorks提供的信号量经过了高度优化,在所有任务间通信机制中,速度最快。对于互斥,信号量可以上锁对共享资源的访问,并且比禁止中断或禁止抢占提供更精确的互斥粒度。对于同步,信号量可以协调外部事件与任务的执行。
MBPLC使用二进制信号量来解决多个任务读写数据的互斥问题,使用计数器信号量来解决定时器计数问题;
(2) 消息队列
消息队列是VxWorks提供的单CPU中任务间通信的主要机制。消息队列允许以FIFO或基于优先级方式排队消息,消息的数目可变,消息的长度可变。任何任务都可以向消息队列发送消息,也可以从消息队列接收消息。多个任务允许从一个消息队列收发消息。但是,两个任务间的双向通信通常需要两个消息队列,各自用于一个方向。
MBPLC使用消息队列来实现任务间的数据交换。首先调用msgQCreate()函数创建消息队列,再用msgQSend()和msgQReceive()函数发送和接受消息,最后调用msgQDelete()函数中止消息队列。
3.3 中断处理程序
中断处理程序是实时系统的重要组成部分。系统通过中断机制了解外部世界,并对外部事件作出响应。实时系统的反应取决于系统对于中断的响应速度和中断处理程序的处理速度。由于在很短的时间内,可能产生很多中断,高优先级的中断将阻塞低优先级的中断,因此,必须使中断处理程序的处理时间最短。