【问题标题】:OS X Vs Linux - Serial port handlingOS X Vs Linux - 串行端口处理
【发布时间】:2010-08-22 07:31:24
【问题描述】:

我正在尝试将纯 Linux 应用程序移植(或更确切地说是自定义)到 OS X Snow Leopard (10.6.4)。它是一个通过串行端口将二进制文件发送到目标硬件的应用程序。该应用程序几乎正在运行,但我遇到了一个有趣的串行端口写入问题。

使用与 Linux 相同的设置(115.2k 是波特率)OS X 串行数据发送似乎比 Linux 慢 10 倍或更多。在 Linux 中需要 3 秒,需要 30-40 秒,到那时接收端的目标固件超时:)。

深入了解串口写入函数,我看到它正在使用 select() 系统调用来查找设备(或者更确切地说是文件描述符)是否准备好写入数据。每个 write 系统调用在 OS X 中写入 1024 字节数据,在 Linux 中写入 1087 字节数据(这就是 write 的返回值)。对于一级二进制文件,我的数据大小约为 50KB(它是一个小型引导加载程序,可以在下一级加载更大的二进制文件)。

伪代码

    select() configuration with 1s time out and observing the serial port file descriptor for write ready.
while(true)
{
rc=select(...)
if(rc>0){write(...) and other logic to get out of while if done}
if(rc==0){//try again}
if(rc<0){//error}
}

我观察到在 linux 中,写入总是一个接一个地发生。一系列写入,它很快就从函数中出来了。但是,在 OS X 中,这就像 3 次写入,然后 select 两次返回零(2 秒消失),再次写入几次并选择超时等,这使得函数变得更慢。

有什么线索吗?

注意事项: 该应用正在使用 termios lib API 来控制串口。

【问题讨论】:

    标签: linux embedded osx-snow-leopard serial-port porting


    【解决方案1】:

    我可以通过更改多产的芯片设备驱动程序来解决这个问题。默认情况下它使用的是非标准的开源驱动程序,我从多产的网站下载了 OS X 驱动程序,它工作正常。 感谢 Nils 等人的支持!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2010-09-08
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多