gpt4 book ai didi

c++ - 串行通信 : 0x0D is replaced by 0x0A during transmission

转载 作者:IT王子 更新时间:2023-10-29 01:04:46 25 4
gpt4 key购买 nike

我正在使用 Linux 从串行接口(interface)读取一些数据。数据流中有时会出现 0x0D。在接收器端,该值被 0x0A 替换。这看起来像是一种期望的行为 - 不幸的是,在我的情况下它不是期望的,我认为它与打开端口期间设置的选项之一有关:

struct termios       options;
struct serial_struct sStruct;

*fd= open(serialParams->port, O_RDWR|O_NOCTTY);// | O_NDELAY);
if (*fd == -1) return OAPC_ERROR_DEVICE;
fcntl(*fd, F_SETFL,FNDELAY);

tcgetattr(*fd, &options);

options.c_cflag |= (CLOCAL | CREAD);

options.c_cflag &= ~CSIZE; // Mask the character size bits
options.c_cflag |= CS8;
options.c_cflag &= ~(PARENB|PARODD);

options.c_iflag &= ~(INPCK | ISTRIP);
options.c_iflag |=IGNPAR;

options.c_cflag&=~CSTOPB;

options.c_iflag |= (IXON | IXOFF | IXANY);
options.c_cflag &= ~CRTSCTS;

options.c_lflag &= ~(ICANON | ECHO | ECHOE |ECHOK|ISIG|IEXTEN|ECHONL);
options.c_iflag&=~(IGNCR|IUTF8);
options.c_oflag&=~(ONLCR|OCRNL);

ioctl(*fd, TIOCGSERIAL, &sStruct);
sStruct.flags &= ~ASYNC_SPD_MASK;
ioctl(*fd, TIOCSSERIAL, &sStruct);

int speed;

speed=1000000;

ioctl(*fd, TIOCGSERIAL, &sStruct);
sStruct.flags = (sStruct.flags & ~ASYNC_SPD_MASK) | ASYNC_SPD_CUST;
sStruct.custom_divisor = (sStruct.baud_base + (speed / 2)) / speed;
ioctl(*fd, TIOCSSERIAL, &sStruct);

cfsetispeed(&options, B38400);
cfsetospeed(&options, B38400);

if (tcsetattr(*fd, TCSANOW, &options)!=0) return OAPC_ERROR_DEVICE;

知道这些选项中的哪一个会在接收期间导致此数据转换吗?

最佳答案

您重置了 ONLCR/OCRNL 标志以禁用输出处理,但您似乎没有重置输入的反向标志 (INLCR/ICRNL)。

关于c++ - 串行通信 : 0x0D is replaced by 0x0A during transmission,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22872194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com