2017-12-20 24 views
-1

こんにちは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このような

+0

* "私は... 2つのシリアルポートのintrrupt [原文]ハンドラを必要とする" * - いいえ、あなたはしないでください。カーネルはすでにこれらのデバイス用の割り込みハンドラを持っています。アプリケーションプログラムにはデバイス用の割り込みハンドラはありません。どうやら[XY質問](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)を尋ねているようです。 – sawdust

+0

どのようにいくつかの機能を実行するためにそれを使用することができます。 –

答えて

0

何か:

static void handler(int sig) 
{ 
    printf ("Hello world from handler\n"); 
} 

serial_port_init link_sp(link_usart_addr,link_usart_baud,&handler); 
+0

私はハンドラ静的Qtを定義すると定義されていません –

+0

私はそれを行うが、問題を解決していない –

+0

Plsコンパイラメッセージを投稿 – mbieren

関連する問題