我需要一个中断处理程序,用于在linux中使用c++的两个串口(代码片段)

author author     2022-12-29     345

关键词:

你好

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

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设备驱动程序》(十六)-中断处理

...在的参数有所区别,这里都主要介绍概念,具体实现方法需要结合具体的内核版本。request_irq函数申请中断,返回0表示申请成功,其他返回值表示申请失败,其具体参数解释如下:flags掩码可以使用以下几个:快速和慢速处理例... 查看详情

如何在 linux 中找到用于给定 mime 类型的程序?

...typeinlinux?【发布时间】:2010-11-2718:38:06【问题描述】:我需要为给定的mime类型打开一个查看器。如何在Linux中做到这一点。我想该方法将特定于使用中的桌面环境。我想通过一个C程序来做到这一点。【问题讨论】:【参考方案1... 查看详情

中断处理程序使用哪个堆栈 - Linux

】中断处理程序使用哪个堆栈-Linux【英文标题】:WhichstackisusedbyInterruptHandler-Linux【发布时间】:2015-04-2919:41:06【问题描述】:在多任务系统中,当任何硬件对特定CPU产生中断时,CPU可以执行以下任何一种情况,除非它已经在为IS... 查看详情

Windows 批处理脚本 - 用于使用命令输出

...ommandoutput【发布时间】:2021-10-0416:25:17【问题描述】:我需要创建一个脚本来列出一个nfs目录,因此我需要在特定文件夹中映射驱动程序。例子:C:\\dir/b\\\\172.16.30.6\\mysharefolder1folder2folder3folder4folder5...返回上面的代 查看详情

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

...部分。IO资源包括:中断,I/O端口,共享RAM,DMA。驱动程序需要管理注册释放这些 查看详情

c语言怎么监听键盘按键

...大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识别出哪些消息是重要的,哪些是不重要的。键盘基础知识  虽然应用程序在很多情况下可以通过鼠标实现信息的输入,但到现在为止... 查看详情

linux中断补充

...断允许让设备(如键盘,串口卡,并口等设备)表明它们需要CPU。一旦CPU接收了中断请求,CPU就会暂时停止执行正在运行的程序,并且调用一个称为中断处理器或中断服务程序(interruptserviceroutine)的特定程序。CPU处理完中断后... 查看详情

中断与操作系统之间有啥关系?

...Linux的顶半部机制以及底半部机制,顶半部是指中断代码需要立即执行的情况,对于情况不紧急的情况,会将中断程序注册到队列,在cpu 查看详情

中断简介

1.中断简介中断是计算机中的一个十分重要的概念,在现代计算机中毫无例外地都采用中断机制。在计算机执行程序的过程中,由于出现某个特殊情况(或称为"事件"),使得CPU中止现行程序,而转去执行处理该事件的处理程序... 查看详情

需要说明在 GNU C 中使用 settimer 和 alarm 功能的程序

】需要说明在GNUC中使用settimer和alarm功能的程序【英文标题】:needprogramsthatillustrateuseofsettimerandalarmfunctionsinGNUC【发布时间】:2010-01-1813:01:27【问题描述】:谁能用一些程序示例来说明gnuC中settimer或alarm函数的使用?我有一个持续... 查看详情

#导入word文档图片#linux下内核微线程tasklet

...是软中断实现的。所以服务函数也是运行在中断上下文,需要注意一些使用细节。​一个使用tasklet的中断程序首先会通过执行中断处理程序来快速完成上半部分的工作,接着通过调用task 查看详情

在 c 程序和 C++ Qt 应用程序之间使用啥 Linux IPC?

...010-10-0409:11:46【问题描述】:我时不时有一个老式的c程序需要告诉基于C++Qt的应用程序我的系统上发生的一些“事件”。但是当我开始处理这个问题时,我注意到一些ipc技术在c程序中很容易 查看详情

中断系统调用?

...想确认我正确理解了如何调用系统调用。因此,如果程序需要访问内核功能,它会将系统调用号加载到寄存器中并调用软件中断(在linux0x80中)。然后NVIC(或AVIC)使处理器跳转到中断处理程序的开头并使cpu进入管理模式。然后... 查看详情

如何使用 PyQt 在 python 应用程序中处理 Ctrl+C?

...0【问题描述】:我有一个基于PyQt4的python2.7应用程序。我需要在特定的处理程序中处理Ctrl+C(KeyboardInterrupt,SIGINT,2)。我看到通过按Ctrl+C创建的异常未在try-except块中捕获,并且未在处 查看详情

使用 C 程序启用禁用键

...singCProgram【发布时间】:2014-10-1306:26:34【问题描述】:我需要使用C程序禁用Linux和Windows的任务键。我尝试使用windows.h,但正如名称所述,它不适用于Linux,如果是Windows,它也无法正常工作。我尝试使用GetAsyncKeyState函数来执行此... 查看详情

西门子plc的atch中断指令使用

...照先来先服务的顺序对中断提供服务。任何时刻只能激活一个用户中断。其它中断处于激活状态时,CPU发出中断暂时入队,等待以后处理。如果发生的中断数目过多,队列无法处理,则设定队列溢出状态位。当队空时,重置这些... 查看详情

cc2530的外部中断(代码片段)

...也就结束了。对于单片机系统,如果硬件发生了一些事件需要应用程序立即来处理,这就需要用到中断了。要CPU立即暂停执行即将执行的指令,去执行一些特定的指令,执行完成之后再回到暂停的位置继续执行,这种机制就叫中... 查看详情

我需要在 Swift 中 memset 一个 C 结构吗?

】我需要在Swift中memset一个C结构吗?【英文标题】:DoIneedtomemsetaCstructinSwift?【发布时间】:2015-06-2202:13:52【问题描述】:AFAIK,在swift中,调用类/结构的默认初始化程序会将所有内容初始化为0、nil。在C(例如套接字编程)中,... 查看详情