我有两个 Contiki 进程,一个进程,master
,将两个不同的事件发布到第二个进程,send
。发送的第一个事件是PROCESS_EVENT_CONTINUE
,第二个事件是PROCESS_EVENT_MSG
。
我从名为main
.
完整的代码是:
#include "contiki.h"
#include "lib/list.h"
#include "lib/memb.h"
#include "lib/random.h"
#include "net/rime/rime.h"
#include<stdio.h>
PROCESS(master, "master_DGHS");
PROCESS(send, "master_DGHS");
AUTOSTART_PROCESSES( &master, &send);
PROCESS_THREAD(master, ev, data)
{
PROCESS_BEGIN();
process_post(&send, PROCESS_EVENT_CONTINUE, NULL);
process_post(&send, PROCESS_EVENT_MSG, NULL);
PROCESS_END();
}
PROCESS_THREAD(send, ev, data)
{
static struct etimer et;
PROCESS_BEGIN();
while(1)
{
PROCESS_WAIT_EVENT();
if(ev == PROCESS_EVENT_CONTINUE)
{
printf("PROCESS_EVENT_CONTINUE\n");
etimer_set(&et, CLOCK_SECOND );
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
}else
if(ev == PROCESS_EVENT_MSG)
{
printf("PROCESS_EVENT_MSG\n");
etimer_set(&et, CLOCK_SECOND );
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
}
}
PROCESS_END();
}
问题是第二个进程send
看到第一个事件(它打印PROCESS_EVENT_CONTINUE
),但它没有看到第二个事件(它不打印PROCESS_EVENT_MSG
)。
换句话说,第二个事件丢失了。但是,如果我删除源代码行
PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
第二个过程send
看到两个事件(都打印出来)PROCESS_EVENT_CONTINUE
。PROCESS_EVENT_MSG
因此,添加此源代码行会导致第二个事件 ,PROCESS_EVENT_MSG
被忽略或丢弃。
为什么添加此源代码行会导致第二个事件丢失?