0%

Windows C/C++编程

Windows串口接收代码

参考

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <Windows.h>

void* serial_openSerial(void* lpFileName, unsigned int baudRate, unsigned int dwInQueue, unsigned int dwOutQueue) {
HANDLE hComm = NULL;
DCB dcb;
COMMTIMEOUTS commTimeOuts;
hComm = CreateFile(lpFileName, //串口名称
GENERIC_READ | GENERIC_WRITE, //允许读和写
0, //独占方式
NULL, // 无安全属性,不可被子程序继承
OPEN_EXISTING, //创建文件的性质,打开而不是创建
0, // Non Overlapped I/O
NULL); // Null for Comm Devices
SetupComm(hComm, dwInQueue, dwOutQueue);
GetCommState(hComm, &dcb);
dcb.BaudRate = baudRate;
SetCommState(hComm, &dcb);
commTimeOuts.ReadIntervalTimeout = 0;
commTimeOuts.ReadTotalTimeoutMultiplier = 0;
commTimeOuts.ReadTotalTimeoutConstant = 0;
commTimeOuts.WriteTotalTimeoutMultiplier = 0;
commTimeOuts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hComm, &commTimeOuts); // 配置Timeout参数(ms),0表示不Timeout
return hComm;
}

int serial_readLen(void* hComm, unsigned char* pBuff, unsigned int len, unsigned int* pLenRead) {
return ReadFile(hComm, pBuff, len, pLenRead, NULL);
}

int serial_closeSerial(void* hComm) {
return CloseHandle(hComm);
}

int serial_purgeSerial(void* hComm) {
return PurgeComm(hComm, PURGE_RXCLEAR | PURGE_TXCLEAR);
}

注意

Windows.h的api是正确返回非0

不同系统编译各数据类型所占内存空间大小

区别

类型 win32 win64 linux32 linux64
char 1 1 1 1
short 2 2 2 2
int 4 4 4 4
long 4 4 4 8
long long 8 8 8 8
float 4 4 4 4
double 8 8 8 8
void* 4 8 4 8

总结

  1. 指针所占空间看系统是16位、32位还是64位。
  2. win64把long编成4字节,linux64把long编成8字节。
  3. 在32位系统中,int和long都是4字节,取值范围相同。