2010-08-22 68 views
3

我試圖將一個純粹的Linux應用程序移植到OS X Snow Leopard(10.6.4)。它是一個通過串口向目標硬件發送二進制文件的應用程序。該應用程序幾乎運行,但我遇到了串行端口寫入有趣的問題。OS X與Linux - 串行端口處理

使用與Linux相同的設置(115.2k是波特率),OS X串行數據發送似乎比Linux慢10倍或更多。在Linux中需要3秒,需要30-40秒,到那時接收端的目標固件超時:)。

挖掘到串口寫功能,我看到它正在使用select()系統調用來查找設備(或文件描述符)是否準備好寫入數據。每個寫系統調用在OS X中寫入1024個字節的數據,在Linux中寫入1087個字節的數據(這就是寫入的返回值)。對於一級二進制文件,我的數據大小約爲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下,寫發生的時間此起彼伏。一系列的寫入,它以jiffy的形式出現在函數中。但是,在OS X中,如同3個寫入然後選擇兩次(2秒後)再返回一些寫入和選擇超時等等,使功能慢很多。

任何線索?

說明: 該應用程序使用termios lib API來控制串行端口。

回答

1

我可以通過更改多產品芯片設備驅動程序來解決此問題。默認情況下,它使用的是非標準的開源驅動程序,我從多產網站下載了OS X驅動程序,並且工作正常。 感謝Nils和其他人的支持!