我正在通过串行RS232从Linux向Windows发送数据字节,一切正常,只需处理来自Linux的0xa,因为Windows将其视为0xd + 0xa。
但是当我从Windows向Linux发送数据字节时,一些字节会被替换为“-”:
Windows发送 - 0xd,Linux收到0xa
Windows发送 - 0x11,Linux收到整数中的垃圾tyte值,大约为8200。
请解释一下从Windows向Linux发送数据时出了什么问题。 提前感谢您。
Windows串行端口初始化。
请解释一下从Windows向Linux发送数据时出了什么问题。 提前感谢您。
Windows串行端口初始化。
char *pcCommPort = "COM1";
hCom = CreateFile( TEXT("COM1"),
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
fSuccess = GetCommState(hCom, &dcb);
FillMemory(&dcb, sizeof(dcb),0);
dcb.DCBlength = sizeof(dcb);
dcb.BaudRate = CBR_115200; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
dcb.fOutxCtsFlow = false;
fSuccess = SetCommState(hCom, &dcb);
buff_success = SetupComm(hCom, 1024, 1024);
COMMTIMEOUTS cmt;
// ReadIntervalTimeout in ms
cmt.ReadIntervalTimeout = 1000;
cmt.ReadTotalTimeoutMultiplier = 1000;
cmt.ReadTotalTimeoutConstant=1000;
timeout_flag = SetCommTimeouts(hCom, &cmt);
Windows写串口 -
WriteFile(hCom, buffer, len, &write, NULL);
Linux串口初始化-
_fd_port_no = open("//dev//ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
tcgetattr(_fd_port_no, &options);
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
options.c_cflag |= (CS8);
options.c_cflag|=(CLOCAL|CREAD);
options.c_cflag &=~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag |= (IXON | IXOFF | IXANY);
options.c_cflag &= ~ CRTSCTS;
tcsetattr(_fd_port_no, TCSANOW, &options);
阅读Linux串口-
while(read(_fd_port_no,buffer+_buffer_len,sizeof(buffer))>0)
{
_buffer_len = _buffer_len+sizeof(buffer);
}
是的,正如我所说的,从Linux到Windows只有NL/CR问题,但我通过字节替换解决了这个问题, 但你有没有关于从Windows发送串行数据到Linux(字节替换策略)的想法。 实际上,我必须将200 KB文件以200字节块的形式通过串行端口发送,因此如果从Windows发送到Linux,则可以替换哪个字节。
0x0a
是换行符,0x0d
是回车符。这听起来像是典型的 NL/CR 问题。 - meaning-matters