내가 마이크로 컨트롤러는 내가이 형식으로 데이터를 전송하고 `제대로 WINDOWS.H에
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main (void)
{
int n = 25;
char szBuff[25 + 1] = {0};
HANDLE hSerial;
DCB dcbSerialParams = {0};
COMMTIMEOUTS timeouts={0};
DWORD dwBytesRead =25;
dcbSerialParams.DCBlength=sizeof(DCB);
hSerial = CreateFile("COM4",
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!");
return;
}
puts ("invalid handle value!");
return;
}
if (!GetCommState(hSerial, &dcbSerialParams))
{
puts ("error getting state");
return;
}
dcbSerialParams.BaudRate=CBR_57600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
{
puts ("error setting port state");
return;
}
timeouts.ReadIntervalTimeout = 30;
timeouts.ReadTotalTimeoutMultiplier = 100;
timeouts.ReadTotalTimeoutConstant = 100;
if (!SetCommTimeouts(hSerial, &timeouts))
{
puts ("timeouts setting fail!");
}
while (1){
if(!ReadFile(hSerial, szBuff, n, &dwBytesRead, NULL)){
puts ("serial read error fail!");
return;
}
else
{
printf ("%s\n" , szBuff);
}
}
getch();
return 0;
}
`
아래의 코드를 사용하여 읽고있다 내 USB 포트에 연결 한을 시리얼 창을 사용하여 데이터 문자열을 읽을 수 없습니다 ABC $ 다음에 개행 문자가옵니다. 그래서 7 (또는 개행을 포함한 8) 바이트가 맞습니까? 나는 모든 데이터 문자열을 성공적으로 읽을 수 있도록 readfile의 3 번째 인수를 20으로 설정했습니다. 7 바이트보다 큽니다. 그러나 때로는 몇자를 놓치는 경우가 있습니다. $ A.B.C $를 읽는 대신 한 줄에 $ A.B.C를 그리고 그 줄 뒤에 $ (숨겨진 '\ n')을 읽습니다. 내가 어떻게 고칠 수 있니?
내 전체 문자열을 읽는 방법을 알려줄 수있는 의견이 있으십니까? 그리고 죄송합니다. "수신 버퍼에 적어도 하나의 바이트가 들어 있으면 버퍼에있는 모든 것을 다시 가져올 것입니다." . 한 번에 7 바이트 인 전체 문자열을 때때로 얻습니다. – user582485
예, 가끔. 버퍼에있는 것이 무엇이든, 읽는 것이 더 느리면 더 많은 것이 있습니다. 특히 당신이 디버깅 할 때. 루프를 사용하고 줄 바꿈이 나타날 때까지 계속 읽고 읽고 추가하십시오. –
의사 코드를 입력해도 괜찮습니까? 그것은 내게 매우 도움이 될 것입니다 – user582485