sigio обрабатывает только входной сигнал и не выводит переполнение стека

Я работаю над встроенной системой, которая отправляет информацию через последовательный порт uart ttyS0. Теперь я хотел бы получать данные с того же последовательного порта. Поэтому я реализовал обработчик сигнала, используя sigaction. Я хотел бы использовать сигнал SIGIO, но проблема в том, что происходит прерывание из-за данных, которые я отправляю.
Так можно ли поставить условие в методе блокировки выходных сигналов?

struct sigaction act;
memset(&act,0, sizeof(act));
act.sa_handler = &sigio_Handler;
//act.sa_flags=0;
//act.sa_restorer=NULL;
fcntl(this->stream_ ,F_SETFL, FNDELAY|FASYNC);
fcntl(this->stream_,F_SETOWN,getpid());
sigaction(SIGIO,&act,0);

void DataSender::sigio_Handler(int signo){
int fd;
std::cout << "helloworld1" << "\n";
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
std::cout << "helloworld2" << "\n";
if(signo == SIGIO ){
unsigned char rx_buffer[3];
int  rx_length = read(fd, (void*) rx_buffer,3);
std::string mode;
mode+=rx_buffer[0];
mode+=rx_buffer[1];

std::cout << "helloworld3" << std::endl;
std::cout << rx_buffer << std::endl;
std::cout << mode << std::endl;
std::cout << (int)rx_buffer[2] << std::endl;

projectionMode = mode;
if (rx_length  == -1 ){
std::cout << "could not read"<< std::endl;
}
if (rx_buffer[2] == 1){
std::cout << "could not read1"<< std::endl;
}else if(rx_buffer[2] == 2){

}else if(rx_buffer[2] == 3){

}else if(rx_buffer[2] == 4){

}
}
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]