こんにちはlunuxのC++で2つのシリアルポートにintrruptハンドラが必要です
私のプログラムには2つのシリアルポートがあります。 私はシリアルポートの初期化と機能のためのクラスを持っています。 シリアルポートを機能させるために送信すると、それを開くことができます。 しかし、私は別のシリアルポート情報を送信し、この関数で割り込みハンドラを設定すると、最初のシリアルポートは割り込みハンドラで受信できなくなります。
serial_port_init::serial_port_init(char *sp_name,speed_t baud,void (*event_func)(int32_t)){
struct termios termAttr;
struct sigaction saio;
sp = open(sp_name, O_RDWR | O_NOCTTY | O_NDELAY);
saio.sa_handler = (event_func);
saio.sa_flags = 0;
saio.sa_restorer = NULL;
sigaction(SIGIO,&saio,0);
fcntl(sp, F_SETFL, FNDELAY);
fcntl(sp, F_SETOWN, getpid());
fcntl(sp, F_SETFL, O_ASYNC);
tcgetattr(sp,&termAttr);
cfsetispeed(&termAttr,baud);
cfsetospeed(&termAttr,baud);
termAttr.c_cflag &= ~PARENB;
termAttr.c_cflag &= ~CSTOPB;
termAttr.c_cflag &= ~CSIZE;
termAttr.c_cflag |= CS8;
termAttr.c_cflag |= (CLOCAL | CREAD);
termAttr.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
termAttr.c_iflag &= ~(IXON | IXOFF | IXANY);
termAttr.c_oflag &= ~OPOST;
tcsetattr(sp,TCSANOW,&termAttr);
tcgetattr(sp, &termAttr);
私はシリアルポートが
serial_port_init link_sp(link_usart_addr,link_usart_baud,&link_get_all_data_event);
で初期化を呼び出し、今私はそれらの両方のためのintruptを必要としています。 THANKSこのような
* "私は... 2つのシリアルポートのintrrupt [原文]ハンドラを必要とする" * - いいえ、あなたはしないでください。カーネルはすでにこれらのデバイス用の割り込みハンドラを持っています。アプリケーションプログラムにはデバイス用の割り込みハンドラはありません。どうやら[XY質問](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)を尋ねているようです。 – sawdust
どのようにいくつかの機能を実行するためにそれを使用することができます。 –