任务间通信机制
任务间通信机制是多任务间相互同步和通信以协调各活动的主要手段,VxWorks提供的任务问通信手段按其速度由 快到慢排列为信号量、消息队列、管道到网络透明的套接字。 本例子中,主要采用了共享内存、信号量和消息队列等手段实现任务间通信。任务间通信最直接、最明显的方法是访问共享内存数据结构,VxWorks操作系统采用的是 32位平滑内存地址空间,所有任务共存于单一的地址空间,任一程序定义的各种类型的全局变量都可以被任务直接访问。本系统中所有的全局控制参数数组都采用这种方法来访问,虽然这种方法不是最好的,但是却减少了函数调用时传递很多参数的 环节,对于实时控制系统来说是可取的。信号量是任务间通信同步互斥的最优选择,VxWorks提供3种信号量:二进制,互斥和计数器信号量。常用的是二进制信号量和互斥信号量。在本例子资源分配任务中就采用二进制信号量的同步方法。
//在主任务中创建二进制信号量
STATUS mainTask(void){…
if(dtmfcSem="SemBSmCreate"(SEM_Q_FIFO,SEM_FULL)==NULL)return(ERROR);
…
//在 20ms中断程序中给出该信号量
LOCAL STATUS inq20ms(void){
. . . SemGive(dtmfcSere);
…
/在资源管理与分配程序中取得该信号量
STATUS Managetask(c0umster1inktab1e ptr… .){…
SemTake(dtmfcSem。WATT_FOREVER);
//将该资源分配给ptr指向的用户。
…
}
通过信号量的同步实现中断、资源分配和管理任务的同步,减少了中断服务程序中的执行时间,有助于提高系统的实时性。
文章评论(0条评论)
登录后参与讨论