诸位大侠:~~``
STATUS ComRecvTask(void) { struct fd_set readFds; /* bit mask of fds to read from */ int width; /* number of fds on which to pend */ int i; /* index for fd array */ int j;
/* clear bits in read bit mask */ FD_ZERO (&readFds);
for(i=0;i<2;i++) { FD_SET(fds[i], &readFds); } width = fds[0]; for(j=1;j<MAX_FDS;j++) { if(fds[j] > width) { width = fds[j]; } } width++;
while(1) { if (select (width, &readFds, NULL, NULL, NULL) == ERROR) { close(fds[0]); close(fds[1]); return(ERROR); } /* check if this fd has data to read */ for (i = 0; i < MAX_FDS; i++) { if (FD_ISSET (fds[i], &readFds)) { if(i==0) { read(fds[0],RecvBuf1,SendLength); semGive(syncSem1);/*在这里给信号量触发com1发送任务*/ FD_CLR(fds[0],&readFds); } else if(i==1) { read(fds[1],RecvBuf2,SendLength); semGive(syncSem2);/*在这里给信号量触发com2发送任务*/ FD_CLR(fds[1],&readFds); } } } } } 我做的是两个串口同时不停的收发,这里给出的是其中的接收部分。现在我遇到的问题是只能触发一个串口发送任务,而另一个没反应。不知为什么,我的select用的没什么问题吧?请各位高手指点一二 小弟万分感激!!!~~~~~
[em01][em01]