Programación del puerto serie síncrono Win32 ReadFile no puede recibir datos, cómo resolver el problema
Cuando el puerto serie lee y escribe datos sincrónicamente, ReadFile siempre estará bloqueado, pero los datos se pueden recibir utilizando el asistente de depuración del puerto serie.
Sin embargo, después de iniciar el programa, será normal. Estoy muy deprimido. No sé dónde está el problema. Publicaré el código a continuación:
Abra el. puerto serie en modo síncrono:
bool CSerialIO::openSerialPort(char* szSerial){HANDLE hSerial=CreateFileA(szSerial,
GENERIC_READ|GENERIC_WRITE,0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL); si (INVALID_HANDLE_VALUE==hSerial)
devuelve falso; p>
this-gt; hComm= hSerial;
memcpy(cComm, szSerial, strlen(szSerial));
cComm[strlen(szSerial)]='\0 ';
return true ;} Leer puerto serie: WINAPI RecieveData(void* pProcessData){ProcessData* pPD=(ProcessData*)pProcessData while(1){if(pPD-gt;bClosePushThread== verdadero)
ExitThread(0 );
byte byteTempBuffer[512]={0};
int iRead=0;
if(pPD-gt;pSerialIO-gt;readSerialPort( byteTempBuffer, 511, iRead)){if (iReadlt;=0){Sleep(1000);continue;}else{pPD-gt;critSecData.lock(); p>
pPD-gt;bVectorRawData.insert (pPD-gt; bVectorRawData.end(), byteTempBuffer, byteTempBuffer iRead
pPD-gt; critSecData.unLock() continuar; Sleep(1000); } return 0; } Esta es una función de entrada de hilo, pPD-gt; pSerialIO-gt; readSerialPort (byteTempBuffer, 511, iRead). Cada vez que ingrese a este hilo, se bloqueará aquí, pero si uso el asistente de depuración del puerto serie, este problema no ocurrirá, lo que significa que primero debe leer y escribir el puerto serie que quiero leer y escribir. otros procesos antes de que pueda ejecutarse normalmente.
ps: No me sugieran leer y escribir el puerto serie de forma asincrónica, porque aún no he resuelto el problema. No sé si todavía necesito configurar los parámetros del puerto serie.
Hablemos nuevamente del punto importante. La premisa de que mi programa se puede ejecutar normalmente es que antes de ejecutarlo, he usado un asistente de depuración de puerto serie o similar, lo que significa que debo usar otros programas. para configurar los parámetros del puerto serie el programa puede ejecutarse normalmente.