ファイル記述子 (シリアル ポート) からのデータを待機するスレッドを作成したいと思います。その間、このポートを介してデータを送信できる必要があります。
pthreadとpollを使用しようとしていましたが、プログラムが最初からハング (スリープ) しており、メイン関数で最初のコマンドを実行していません。
問題は確かにポーリング機能にあります-時間を制限すると、すべての指示がこの時間後に実行されました。
これが私のコードです:
#define SERIAL_DEVICE "/dev/ttyUSB0"
#define SERIAL_BAUD 2400
#include <wiringSerial.h>
#include <stdio.h>
#include <pthread.h>
#include <poll.h>
//deklaracje
void *receiving( void *ptr )
{
printf("New thread started");
int fd= (int)ptr;
struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN ;
int pollrc=-1;
while(1)
{
pollrc = poll( fds, 1, -1);
if (pollrc < 0)
{
perror("poll");
}
else if( pollrc > 0)
{
if( fds[0].revents & POLLIN )
{
unsigned char buff[1024];
ssize_t rc = read(fd, buff, sizeof(buff) );
if (rc > 0)
{
printf("RX: %s",buff);
}
}
}
}
}
int main(int argc, char *argv[])
{
int fd = serialOpen(SERIAL_DEVICE, SERIAL_BAUD);
if (fd<0)
{
printf("Serial opening error");
return 1;
}
pthread_t serialReceiver;
printf("-----");
int thr=pthread_create(&serialReceiver,NULL,receiving,fd);
printf("%i",thr);
if(thr!=0)
{
printf("Error during creating serialReceiver thread.");
return 1;
}
int status;
pthread_join(serialReceiver,(void **)&status);
printf("%i",status);
return 0;
}