gpt4 book ai didi

linux - OS X 与 Linux - 串口处理

转载 作者:太空狗 更新时间:2023-10-29 11:20:39 24 4
gpt4 key购买 nike

我正在尝试将纯 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 来控制串口。

最佳答案

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

关于linux - OS X 与 Linux - 串口处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com