[問題] Linux C開啟串列埠失敗..
各位板友們好,
小弟目前是在用Linux來寫程式,
不過在打開串列埠卻遇上困難...
執行環境:在PC上使用VMware安裝Ubuntu 10.04LTS,
是採用USB轉RS232的線來短路其2、3腳(傳送及接收)
而查詢到此通訊埠為/dev/ttyUSB0,
以下的程式由範例書本所截錄(原本此程式編譯環境是Windows)
不過在Linux編譯執行時卻卡在開埠的部份,fd不曉得為何會『等於』負1,
是有什麼權限小弟尚未打開嗎!?
還請各位板友先進們能夠提點小弟,
小弟感激不禁...謝謝:D
------------------------------------------------------------------------------------------------------
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <termio.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include "matrix500.h"
int main(int argc, char *argv[])
{
int fd, interface, ret,iCount=1;
char buf[1024];
struct termios T_new;
//開啟串列埠
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
printf("open COM1 Failed, errno: %d\r\n", errno);
return 0;
}
//設定為RS-232
interface = UC500_UART_TYPE_232;
if(ioctl(fd, UC500_SET_UART_TYPE, &interface) != 0) {
printf("set UART type: %d...Failed, errno: %d\r\n", interface, errno);
close(fd);
return 0;
}
//讀取串列埠參數至結構變數中
if (tcgetattr(fd, &T_new) != 0) {
printf("tcgetattr failed. errno: %d\r\n", errno);
close(fd);
return 0;
}
//設定通訊參數
T_new.c_cflag = (B9600 | CS8 | CREAD | CLOCAL);/* 控制模式旗標 */
T_new.c_cflag &= ~PARENB; //No parity
T_new.c_cflag &= ~CSTOPB; //Stop bit = 1
T_new.c_oflag = 0; /* 輸出模式旗標 */
T_new.c_lflag = 0; /* 區域模式旗標 */
//將設定寫回,並即時反應
if (tcsetattr(fd, TCSANOW, &T_new) != 0) {
printf("tcsetattr failed. errno: %d\r\n", errno);
close(fd);
return 0;
}
printf( "Ready to communicate ttys1 (Loop back) ...\n\n");
while(1) {
iCount++;
//輸出資料
sprintf(buf,"Data Send %d ",iCount);
printf("Out : %s , Len = %d\n",buf,strlen(buf));
write(fd, buf, strlen(buf)) ;
usleep(500000);
//擷取資料
ret = read(fd, buf, sizeof(buf));
if (ret > 0) {
printf("In :% s , Len = %d\n",buf,ret);
}
if (iCount>100) iCount = 0;
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.124.42.56
→
03/26 15:58, , 1F
03/26 15:58, 1F
推
03/26 16:08, , 2F
03/26 16:08, 2F
→
03/27 08:35, , 3F
03/27 08:35, 3F
感謝各位熱心的板友回答,errno是回報13..
問題已經解決,經測試的確是權限的問題..
我以為使用者就一定有開port的權利.. (請原諒Linux新手..)
謝謝大家哦^^
※ 編輯: BIAO 來自: 140.124.42.56 (03/27 16:56)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章