c - 使用 Windows 32 位串行通信时程序挂起

标签 c

下面写的是我为访问串行端口编写的粗略代码。连接到该端口的是一个微 Controller ,它向我发送数据,波特率为 57600。我运行了一次代码并得到了结果,但关闭窗口后,我的计算机挂起了。我按 ctrl+alt+del 并看到在进程下我的程序仍在运行。我也关不掉

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);
  }

}

最佳答案

这听起来像是一个有问题的串行端口驱动程序。请参阅Why do some process stay in Task Manager after they've been killed? 。当您终止程序时,它不会消失,直到所有挂起的 I/O 操作都被取消。

关于c - 使用 Windows 32 位串行通信时程序挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746120/

相关文章:

c - 在无符号 32 位整数中查找位位置

c - 我对 C 中的 (char*) 元素数组进行了三个循环。为什么第三个循环失败了?

c - 使用 gcc 编译时 -ffreestanding 和 -nostdlib 之间的区别

c - 为什么 puts() 函数中的指针在以下代码的第 4 行中不起作用?虽然第 1 行正在运行

c - 如何解释 C 中的缓冲区溢出漏洞

c++ - 安全段错误?

c - 制作自己的 malloc 函数?

c - 如何在没有 math.h 的情况下编写一个简单的对数函数?

c - typedefs 和 #defines 对于 XCode 中的其他文件是不可见的

Cython:将指针传递给函数中的指针,采用 void **