用串口调试助手发送数据 0x01 0x02 0x0d 0x0a,read函数只能取到0x01 0x02 0x0a,0x0d丢失
打开句柄后,将句柄配置成原始模式解决该问题
#include <termios.h>
struct termios options = {0};
tcgetattr(fd, &options);//取属性(termios结构)
//将终端设置为原始模式,该模式下所有的输入数据以字节为单位被处理
cfmakeraw(&options);
if(0 != tcsetattr(fd, TCSANOW, &options))//设置属性(termios结构)
{
return -1;
}
回车(CR)与换行(LF) - 知乎 (zhihu.com)
0x0d丢失的原因可能和windows、linux换行的定义不同有关,上面的链接有相关内容
Linux/Unix系统里,每行结尾只有"<换行>",即"\n" 0x0a
Windows系统里面,每行结尾是"<回车><换行>",即"\r\n" 0x0d 0x0a;
Mac系统里,每行结尾是"<回车>",即"\r";(现在已改成跟Unix/Linux一样的"\n")