读书人

vxworks中的事件驱动该如何理解

发布时间: 2013-01-05 15:20:40 作者: rapoo

vxworks中的事件驱动该怎么理解?
我理解的事件驱动,比如:建立了两个任务A,B,A中接收串口数据并解析,B执行某个算法;平时B挂起,当A中解析到特定命令时立刻执行B。
那么这样的立刻执行B需要怎么实现呢?
[解决办法]
在Vxworks中,没有事件驱动这个概念!
任务进行的同步用:信号量、消息!

示例如下:
SEM_ID semSync;
semSync = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY);

taskA(void)
{
while(1)
{
//读取串口数据,并解析
if(如果解析到命令,释放该信号量)
semGive(semSync); //信号量释放,有效
}
}

taskB(void)
{
while(1)
{
semTake(semSync, WAIT_FOREVER); //在这里一直等待信号量,如果信号量有效,则执行下面的程序
//对串口数据进行处理,保存.....

}
}

用消息队列也可以!但是二进制信号量最快!

读书人网 >VxWorks

热点推荐