2011-06-29 60 views
1

我正在編寫一個vxworks任務,涉及通過串口發送數據。打開串口是成功的。但是當我試圖使用ioctl()系統調用設置端口的波特率時,它會失敗。我在下面給出代碼。任何人都可以請解釋一下嗎?第二個功能是總是失敗...設置串口的波特率在vxworks上失敗

int f, status; 

if (f = open("/tyCo/1", O_RDWR, 0) == ERROR) 
{ 
    printf("error opening serial port; exiting..."); 
    return 1; 
} 

if (status = ioctl(f, FIOBAUDRATE, 2400) == ERROR) 
{ 
    printf("ioctl error; exiting..."); 
    return 1; 
} 
+2

只是要清楚。你是說你打開端口然後設置波特率?如果這是正確的,請嘗試設置波特率,然後打開端口。 – dbasnett

+0

@dbasbett - ioctl()需要從open()調用返回的文件描述符 - 您如何建議首先設置波特率? –

+0

m - 檢查您正在使用的設備上的文檔以查看有效的波特率。仔細檢查設備上的任何配置設置。 –

回答

5

也許是有點太晚了,但上面的代碼看起來像是錯誤的。賦值運算符的優先順序低的比較操作,所以你應該寫這樣的代碼:

if((f = open("/tyCo/1", O_RDWR, 0)) == ERROR) 
{ 
    printf("error opening serial port; exiting..."); 
    return 1; 
} 

if((status = ioctl(f, FIOBAUDRATE, 2400)) == ERROR) 
{ 
    printf("ioctl error; exiting..."); 
    return 1; 
} 

這樣它在VxWorks的完美。 您編寫代碼的方式是分配f 0或1(在這種情況下爲0,因爲您可以打開串口),然後嘗試設置文件描述符0的波特率(我猜是stdout id)。同樣你分配狀態0或1(在這種情況下1,因爲你不能設置波特率,所以ioctl返回-1)

+0

優秀的分析! – QuasarDonkey