我需要一个中断处理程序,用于在Linux中使用c ++的两个串口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要一个中断处理程序,用于在Linux中使用c ++的两个串口相关的知识,希望对你有一定的参考价值。

你好

我的程序中有两个串口。我有串口初始化和功能的课程。当我发送我的串口功能打开它。但是当我在此函数中发送另一个串口信息并设置中断处理程序时,第一个串口不能通过中断处理程序接收。

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);

现在我需要两个中断。谢谢

答案

像这样的东西:

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

serial_port_init link_sp(link_usart_addr,link_usart_baud,&handler);

以上是关于我需要一个中断处理程序,用于在Linux中使用c ++的两个串口的主要内容,如果未能解决你的问题,请参考以下文章

linux源码分析

Linux中断补充

#导入Word文档图片# Linux下内核微线程tasklet

Linux CPU的中断转载

使用无限循环时,x86中断处理程序被阻止

《Linux内核设计与实现》学习笔记——中断中断处理程序