아래에 쓰여진 것은 시리얼 포트에 액세스하기 위해 작성한 코드입니다. 그 포트에 부착 된 것은 데이터를 보내고 보드 속도가 57600 인 마이크로 컨트롤러입니다. 코드를 한 번 실행하고 결과를 얻었지만 창을 닫은 후 컴퓨터가 멈 췄습니다. Ctrl + Alt + Del 키를 눌렀는데 프로세스 아래에서 프로그램이 실행 중임을 확인했습니다. 나는 그것을 닫을 수 없다.Windows 32bit 시리얼 통신을 사용할 때 프로그램이 멈 춥니 다
int n = 20;
char szBuff[20 + 1] = {0};
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts={0};
DWORD dwBytesRead = 20;
dcbSerialParams.DCBlength=sizeof(DCB);
hSerial = CreateFile("COM5",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hSerial==INVALID_HANDLE_VALUE)
{
if(GetLastError()==ERROR_FILE_NOT_FOUND)
{
puts ("cannot open port!");
}
puts ("invalid handle value!");
}
if (!GetCommState(hSerial, &dcbSerialParams))
{
puts ("error getting state");
}
dcbSerialParams.BaudRate=CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
{
puts ("error setting port state");
}
while (1)
{
if(!ReadFile(hSerial, szBuff, n, &dwBytesRead, NULL)){
puts ("serial read error fail!");
}
else
{
printf ("%s\n" , szBuff);
}
}
'while 1'을 (를) 사용하고 있습니다. 어떻게 프로그램을 종료 하시겠습니까? – stijn
계속 포트에서 데이터를 계속 읽고 싶습니다. 잘못하고 있다고 가정합니다. 어떻게하면 더 효율적으로 할 수 있는지 말해 줄 수 있어요? – user582485
그 자체가 잘못된 것은 아니지만 프로그램을 중단 할시기를 알려주는 방법이 필요합니다. 예를 들어'puts ("serial read error fail!") 대신'puts ("serial read error fail!"); break;'직렬 장치가 실패하거나 연결이 끊어졌을 때 이미 루프가 종료되어야합니다. – stijn