在VxWorks中关闭无响应设备文件端口的正确方法是啥?

Posted

技术标签:

【中文标题】在VxWorks中关闭无响应设备文件端口的正确方法是啥?【英文标题】:What is the proper way of closing the port of a non-responding device file in VxWorks?在VxWorks中关闭无响应设备文件端口的正确方法是什么? 【发布时间】:2018-02-12 20:29:13 【问题描述】:

我目前正在开发 VxWorks 中的一个应用程序,它使用read() 函数与设备文件通信,并使用一组ioctl() 来配置通信端口。 read() 有时会因为等待消息而永远卡住,但从未收到消息。然后将永远无法联系到以下ioctl(fd,FIOCANCEL,0)

我的问题是如何将select() 与 FIOCANCEL 结合使用以正确断开连接,以便以后可以再次执行read()

如果可能的话,我也想知道FIOCANCEL的实现,这样我可以修改它。

【问题讨论】:

【参考方案1】:

VxWorks 上的select() 与任何其他 POSIX 平台上的 select 相同(尽管我不记得它是否像 Linux 那样修改了超时参数;POSIX 说这两种行为都很好)。

大概你在谈论一个串行端口?那么这应该可以包含在对select() 的调用中。然后,您将不需要 ioctl(fd, FIOCANCEL, 0),因为如果 select() 表明确实有要阅读的内容,您只会调用 read()。如果select() 超时,请不要调用read()

【讨论】:

以上是关于在VxWorks中关闭无响应设备文件端口的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式操作系统的分类

VxWorks 6.9 内核编程指导之读书笔记 -- ISRs和Watchdog Timer

漏洞扫描设备检测出服务存在漏洞:可通过HTTPS获取远端WWW服务版信息,如何解决?

VxWorks_PCI函数注释

如何使用 CRACO 在自定义端口上启动响应应用程序?

从串口读取命令的响应