问题描述如下:两个核完成同一个任务的一半,中间需要同步。这里采用事件触发产生旗语的方式,下面是简化的程序:
Int main(Int argc, Char* argv[])
{
semHandle = Semaphore_create(0,NULL,NULL);
}
void task()
{
if(MultiProc_self()==0)
{
tskProcess();
Notify_sendEvent(dstProc, INTERRUPT_LINE, EVENTID, 0, TRUE);
System_printf("tsk1_func: Sent request #%d to %s\n", seq, MultiProc_getName(dstProc));
Semaphore_pend(semHandle, BIOS_WAIT_FOREVER);
System_printf("tsk1_func: Received request #%d from %s\n", seq, MultiProc_getName(recvProcId));
}
if(MultiProc_self()==1)
{
Semaphore_pend(semHandle, BIOS_WAIT_FOREVER);
System_printf("tsk1_func: Received request #%d from %s\n", seq, MultiProc_getName(recvProcId));
}
}
正常情况下,应该是核0完成 tskProcess()后触发事件并停止等待核1的回音,
核1只有接收事件后才能运行并返回一个事件。
但运行结果显示,核1一开始就运行了,好像Semaphore_pend(semHandle, BIOS_WAIT_FOREVER)这条语句不存在一样。
直接就被触发了,这是为什么呢?请指点。