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); //在这里一直等待信号量,如果信号量有效,则执行下面的程序
//对串口数据进行处理,保存.....
}
}
用消息队列也可以!但是二进制信号量最快!