Linux - 串口读取返回EAGAIN

2023-11-27

我在从按以下方式打开的串行端口读取一些数据时遇到一些问题。我已经多次使用这个代码实例,并且一切正常,但现在,由于某种我无法弄清楚的原因,我完全无法从串行端口读取任何内容。

我能够写入并且所有内容都在另一端正确接收,但从未收到回复(正确发送)(不,电缆都正常;))

我用来打开串口的代码如下:

fd = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK | O_NOCTTY);
if (fd == -1)
{
    Aviso("Unable to open port");
    return (fd);
}
else
{
    //Get the current options for the port...
    bzero(&options, sizeof(options)); /* clear struct for new port settings */
    tcgetattr(fd, &options);

    /*-- Set baud rate -------------------------------------------------------*/
    if (cfsetispeed(&options, SerialBaudInterp(BaudRate))==-1)
        perror("On cfsetispeed:");
    if (cfsetospeed(&options, SerialBaudInterp(BaudRate))==-1)
        perror("On cfsetospeed:");

    //Enable the receiver and set local mode...
    options.c_cflag |= (CLOCAL | CREAD);
    options.c_cflag &= ~PARENB; /* Parity disabled */
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;  /* Mask the character size bits */
    options.c_cflag |= SerialDataBitsInterp(8);           /* CS8 - Selects 8 data bits */
    options.c_cflag &= ~CRTSCTS;                            // disable hardware flow control
    options.c_iflag &= ~(IXON | IXOFF | IXANY);           // disable XON XOFF (for transmit and receive)
    options.c_cflag |= CRTSCTS;                         /* enable hardware flow control */
    
    options.c_cc[VMIN] = 0;     //min carachters to be read
    options.c_cc[VTIME] = 0;    //Time to wait for data (tenths of seconds)

    //Set the new options for the port...
    tcflush(fd, TCIFLUSH);
    if (tcsetattr(fd, TCSANOW, &options)==-1)
    {
        perror("On tcsetattr:");
    }

    PortOpen[ComPort] = fd;
}

return PortOpen[ComPort];

端口初始化后,我通过简单的写入命令向其写入一些内容......

int nc = write(hCom, txchar, n);

其中 hCom 是文件描述符(这是可以的),并且(正如我所说)这是有效的。但是......当我之后进行读取时,我从 errno 收到“资源暂时不可用”错误。

我测试了 select 来查看文件描述符何时读取内容...但它总是超时!

我读到的数据是这样的:

ret = read(hCom, rxchar, n);

我总是收到 EAGAIN,但我不知道为什么。

Update:

硬件工作正常!我可以看到串行端口上有入站数据,因为我制作了一条调试电缆来读取另一个终端上发生的情况。所以...

我知道非阻塞应该做什么。我的问题是...为什么没有任何内容被阅读!相同的设置在 Windows 上运行良好,因此所有硬件都运行良好......

这让我抓狂!我确信这件事非常简单!我什至尝试摆脱 O_NONBLOCK 来看看我什么时候会收到一些东西......但什么也没有......


Read this.

EAGAIN 非阻塞 I/O 已 使用 O_NONBLOCK 选择并且没有数据 立即可供阅读。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux - 串口读取返回EAGAIN 的相关文章

随机推荐

  • 如何开始使用 Java 构建 Web 应用程序? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想开始使用 java 进行 Web 开发 不知道如何开始 该学什么 或者什么是最好学习和使用的 Web 框架 帮帮我 我假设您只是 Web 应用程序的新手 而不是 Java 本
  • 超类中的私有方法可以在子类中重写吗?

    Java中私有方法可以被重写吗 如果不是 那么下面的代码如何工作 class Base private void func System out println In Base Class func method class Derived
  • 如何解决UITableView滚动缓慢的问题

    我是第一次在真实设备上进行测试 在修复了一些明显的性能问题后 我陷入了如何平滑滚动的困境 这就是我所做的 数据在sqlite中 我有一个带有标题的小数组 我在每个标头数组中都有来自数据库的 Id 列表 e g 标头 A Id 1 2 标头
  • 我可以替换 Java 正则表达式中的组吗?

    我有这段代码 我想知道是否可以仅替换 Java 正则表达式中的组 而不是所有模式 代码 Pattern p Pattern compile d d String input 6 example input 4 Matcher m p mat
  • 将 JAX-RS bean 验证错误消息绑定到视图

    我们可以使用 bean 验证轻松验证 JAX RS 资源类字段或方法参数 如下所示 Size min 18 max 80 message 年龄必须在 min 和 max 之间 String Age 将错误消息绑定到 JSP 页面的最简单方法
  • GPS 是否已激活 - Flutter

    有没有办法在 Flutter 中找出 GPS 是激活还是停用 我使用插件location然而 我只得到位置 而不是 GPS 的状态 更新 地理定位器8 0 1 bool isLocationEnabled await Geolocator
  • API Youtube,如何获得喜欢和不喜欢

    在一个网站上 我使用 API Youtube 和 ZendGdata 来检索用户的所有视频 并使用视频及其信息创建网页 现在我需要在我的网站上添加一个喜欢或不喜欢视频的系统 并且我需要检索喜欢和不喜欢的数量 是的 这里有2个问题 所以 我检
  • selectonemenu 出现错误 java.lang.String 无法转换为 javax.faces.model.SelectItem

    我想填写一个选择菜单 但总是出现此错误 java lang String cannot be cast to javax faces model SelectItem 这是代码 public class ToolsJIRA implemen
  • 仅将 ASP.NET MVC 应用程序管理站点锁定到 LocalHost

    我有一个 ASP NET MVC 网站 我想向其中添加一个小型管理页面 我遇到的问题是 我将全部部署它 但 SSL 不可用 我同意要求管理员远程桌面并使用本地浏览器来执行管理 这可以做到吗 我基本上希望得到与
  • 创建 SQLite 数据库和表

    在 C 应用程序代码中 我想创建一个或多个 SQLite 数据库并与之交互 如何初始化一个新的 SQLite 数据库文件并打开它进行读写 数据库创建完成后 如何执行DDL语句创建表 下一个链接将为您带来一个很棒的教程 这对我帮助很大 如何在
  • Meteor.js 中的运营转型?

    Meteor js 支持操作转换吗 我正在开发一个与 Etherpad 相关的项目 我想使用 Meteor js 我认为它非常适合此类项目 如果我想使其具有可扩展性 那么运营转型对于我的项目来说非常重要 我目前的知识表明 流星不支持开箱即用
  • 黑莓推送通知实施

    如何为黑莓应用程序实现推送通知 我听说为此我需要购买一台 Blackberry Enterprise Server 每年花费 1400 美元 这是真的 实施推送通知的良好起点在哪里 我对 iPhone 推送开发有经验 但找不到黑莓的同等功能
  • 一个简单的投票系统:如何防止重复投票[重复]

    这个问题在这里已经有答案了 我正在构建一个带有投票选项的简单网络应用程序 我计划为投票最多的人提供现金奖励 所以我想要一个相对安全的系统 我有几个关于受孕的问题 我知道我的帖子与其他一些帖子类似 但似乎没有一个帖子足够具体到该平台 让我放心
  • 如何使用 ggproto 扩展 ggplot2 boxplot?

    我经常在工作中使用箱线图等ggplot2美学 但标准geom boxplot缺少对我来说重要的两件事 胡须末端和中间标签 感谢这里的信息 我编写了一个函数 gBoxplot lt function formula NULL data NUL
  • 使用箭头键,并在 Angular 中使用 keyup

    我有一个 Angular 项目 我想为箭头键实现一些功能 我尝试使用类似的东西 keyup keyCode Move itemArray UP 其中 keyCode 代表箭头键之一的代码 但是没有任何作用 这是我使用它的模板 模板 HTML
  • GMSAutocompleteViewController 仅显示 5 个结果

    我综合了GMS自动完成视图控制器在我的应用程序中 let autocompleteController GMSAutocompleteViewController autocompleteController delegate self l
  • 关于十六进制形式的 EXIF 的问题

    我试图了解 jpeg 文件 十六进制 的 EXIF 标头部分以及如何理解它 以便我可以提取数据 特别是 GPS 信息 无论好坏 我正在使用 VB Net 2008 抱歉 这是我现在能掌握的 我已将 jpg 的前 64K 提取到字节数组中 并
  • 如何使函数异步信号安全?

    我有以下内容sigaction处理函数 void signal term handler int sig printf EXIT TERM signal Received n int rc flock pid file LOCK UN LO
  • 无法安装 Commonmarker gem(jekyll 需要)macos

    我该怎么办 依赖性有问题吗 我该如何解决这些问题 我在卡特琳娜 我反复收到此错误 并且已经查找过该目录 不存在 sudo bundle update Password Fetching gem metadata from https rub
  • Linux - 串口读取返回EAGAIN

    我在从按以下方式打开的串行端口读取一些数据时遇到一些问题 我已经多次使用这个代码实例 并且一切正常 但现在 由于某种我无法弄清楚的原因 我完全无法从串行端口读取任何内容 我能够写入并且所有内容都在另一端正确接收 但从未收到回复 正确发送 不