[問題] VC++ RS232控制
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
使用的環境是VC++ 2005,包率是9600
利用CreateFile, WriteFile與ReadFile對Com Port做控制(USB 轉 RS232)
CreateFile方式
HANDLE OpenPort(char *szport, int baudrate)
{
HANDLE hport;
hport = CreateFile (szport, // _T("COM3:")
GENERIC_READ | GENERIC_WRITE, // Open for Read-Write
0, // COM port cannot be shared
NULL, // Always NULL for Windows CE
OPEN_EXISTING, // For communication resource
0, // Non-overlapped operation only
NULL); // Always NULL for Windows CE
if(hport == INVALID_HANDLE_VALUE)
{
OutputDebugString("Error Opening COM Port.");
return 0;
}
DCB dcb;
dcb.DCBlength = sizeof(DCB);
if(!GetCommState(hport, &dcb))
{
CloseHandle(hport);
hport = INVALID_HANDLE_VALUE;
return 0;
}
dcb.BaudRate = baudrate; //CBR_9600;
dcb.fOutxCtsFlow = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fOutxDsrFlow = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if(!SetCommState(hport, &dcb))
{
CloseHandle(hport);
hport = INVALID_HANDLE_VALUE;
return 0;
}
return hport;
}
WriteFile是用按鈕控制,每按一次傳一次
int r = WriteFile(h_ComPort, msg, msglen, &outlen, NULL);
而ReadFile是開一個Thread,在Com Port開成功後就一直收
while(h_ComPort != INVALID_HANDLE_VALUE)
{
dwBytesRead = 0;
Sleep(100);
status = ReadFile(h_ComPort, szSentence, 256, &dwBytesRead, NULL);
if (!status && dwBytesRead <=0)
{
Sleep(5);
continue;
}
}
目前遇到的問題:
1. ReadFile在啟動Thread後,Thread在執行ReadFile後就停住了(在ReadFile
設斷點停住後,按F10單步執行無法跳到下面的if判斷式)
2. WriteFile第一次按下可動作,但是第二次之後也會停住,個人猜想是因為
ReadFile卡住的關係
請問這兩個問題該怎麼解決,因為在ReadFile就停住,是否要設Timer?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.161.149.80
→
09/09 13:05, , 1F
09/09 13:05, 1F
→
09/09 13:12, , 2F
09/09 13:12, 2F
→
09/09 13:13, , 3F
09/09 13:13, 3F
→
09/09 13:13, , 4F
09/09 13:13, 4F
推
09/10 12:44, , 5F
09/10 12:44, 5F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章