首页 > 系统相关 >linux串口(epoll)

linux串口(epoll)

时间:2024-09-30 10:50:21浏览次数:8  
标签:epoll read 串口 events epfd int linux event

void *thread_basedata(void* arg)
{

    int i, ret;

    // Allocate memory for read buffer, set size according to your needs
    unsigned char read_buf [DATA_LEN];

    // Normally you wouldn't do this memset() call, but since we will just receive
    // ASCII data for this example, we'll set everything to 0 so we can
    // call printf() easily.
    memset(&read_buf, '\0', sizeof(read_buf));

    // Read bytes. The behaviour of read() (e.g. does it block?,
    // how long does it block for?) depends on the configuration
    // settings above, specifically VMIN and VTIME
    int num_bytes = 0;

    int epfd, nfds;
    struct epoll_event event;
      struct epoll_event* events;

      events=calloc(10, sizeof(event));  
    epfd = epoll_create(10); // 创建epoll实例

    event.data.fd = uart3; // 添加标准输入到epoll
    event.events = EPOLLIN | EPOLLET;
     epoll_ctl(epfd, EPOLL_CTL_ADD, uart3, &event);

    for(;;)
    {
        ret = epoll_wait(epfd, events, 10, -1);// -1 :wait until it happen
        for(i=0; i<ret; i++)
        {
            if (events[i].data.fd == uart3) {
                num_bytes = read(events[i].data.fd, read_buf, DATA_LEN);

                if (num_bytes < 0) 
                {
                    UARTSendData((char*)"Error reading: %s\r\n", strerror(errno));
                    //while(1);
                }
                RTK_LOCATION_HandleRoverData(read_buf, num_bytes);
                WriteFIFO(&save_fifo,read_buf, num_bytes);
                num_bytes = 0;
            }
        }
    }
    close(uart3);
}

 

标签:epoll,read,串口,events,epfd,int,linux,event
From: https://www.cnblogs.com/boring-luobo/p/18441435

相关文章

  • 关于linux修改密码和用户名
    1.重启linux 按下e键会看见 找到以linux16开头的那一行:linux16/vmlinuz-3.10.0-862.el7.x86_64root=UUID=...rocrashkernel=autorhgbquietLANG=zh_CN.UTF-8把光标移动到行尾,删除rhgbquiet,然后添加rd.break。最终看起来应该像这样:linux16/vmlinuz-3.......
  • linux路由知识入门
    博主githubpageiprule和iproute网络包优先匹配iprule中的规则,然后再被转到相应的iptable路由规则处理iprule#output#0:fromalllookuplocal#32766:fromalllookupmain#32767:fromalllookupdefault这三条规则是内核创建的前面的数字代......
  • 【玩转Linux】如何简单快速理解权限?
     学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客Hello,这里是kiki,今天更新Linux部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要讲的是权限~目录 循环渐进Forward-CSDN博客shell命令以及运行......
  • linux中的标准信号
    什么是标准信号信号是事件发生时对进程的通知机制。有时也称之为软件中断。信号与硬件中断的相似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。信号分为两大类。第一组用于内核向进程通知事件,构成所谓传统或者标准信号。Linux中标准信号的编号......
  • linux: ss的常用场景
    一,列出所有监听中的端口#-l:  仅显示处于监听状态的套接字#-n: 以数字格式显示地址和端口。使用此选项可以避免将地址和端口转换为主机名或服务名,从而加快查询速度#-t: 仅显示TCP套接字信息#-p: 显示与每个套接字相关联的进程信息,包括进程ID和进程名称ss-lntp二,查......
  • 服务器Linux的一些常用命令,收藏备用!
    在Linux服务器的管理和维护过程中,掌握一些常用的命令是非常必要的。这些命令不仅可以帮助你更好地了解和控制系统,还能提高工作效率,减少错误发生的概率。本文将详细介绍一些在Linux服务器上常用的命令,覆盖从基本的文件操作到高级的系统管理,力求内容全面,帮助读者深入理解每一个命令......
  • Linux小tracks
    1.修改dns服务器:/etc/resolv.conf2.ssh证书连接简易操作:ssh-keygen-trsa-b2048|生成密钥对ssh-copy-idusername@remote_host|将你的公钥(通常是~/.ssh/id_rsa.pub)添加到你想要连接的服务器上的~/.ssh/authorized_keys文件中。你可以使用ssh-copy-id命令来......
  • Web服务器小项目(Linux / C / epoll)
    欢迎访问我的另一个博客:https://xingzhu.top/注意:前置知识:HTTP:https://xingzhu.top/archives/web-fu-wu-qiLinux多线程:https://xingzhu.top/archives/duo-xian-cheng源码放github上了,欢迎star:https://github.com/xingzhuz/webServer思路实现代码server.h......
  • 轻松上手Linux,掌握这些基础指令就够了
    想要成为Linux高手吗?掌握常用指令是关键!本指南将为你介绍最实用的Linux指令,让你轻松管理你的系统,从文件操作到系统监控,我们将一步步引导你成为Linux的行家里手,快来学习这些必备技能,让你的工作效率飞速提升!目录1、whoami命令语法:whoani功能:显示当前用户名2、pwd命令......
  • - 串口通信
    USART串口通信目录USART串口通信回顾USART串口通信1、通信分类与作用2、串口通信的相关参数(重点)3、位协议层--RS232协议4、STM32F103中的串口外设5、调试串口编程--(1)串口初始化:时钟、IO、外设--(2)串口发送--(3)串口接收--补充--应用6、中断usart.c完整代......