Linux串口特殊字符处理问题

本文介绍了在嵌入式Linux系统中,通过串口通信时遇到特殊字符如0x03, 0x00导致数据截断的原因及解决方案。问题可能源于struct termios结构体配置不当或应用层数据拷贝时遇到结束符。解决方法包括正确配置串口选项,如禁用特定标志,并在应用层使用深度拷贝确保完整传递数据长度。
AI助手已提取文章相关产品:

一、问题描述

       在嵌入式linux系统中通过串口收发数据,特殊字符如0x03,0x00等导致接收数据截断等现象。

二、原因分析

       1、在对串口进行配置的时候 struct termios 结构体参数设置问题,特殊字符在串口驱动内部做了处理,导致应用层接收不到数据

       2、或则是在应用层接收数据后,数据拷贝出现的问题,如果使用C++语言,通过赋值拷贝遇到结束符(0x00)结束拷贝,导致数据截断

三、解决方法

1、修改文件描述符fd相关的结构体struct termios配置,如:c_iflag,c_oflag,如下:

	options.c_iflag &= ~(BRKINT | ICRNL | ISTRIP | IXON);
    options.c_lflag  &= ~(ICANON | ECHO | ECHOE | ISIG);  /*Input*/
    options.c_oflag  &= ~OPOST;   /*Output*/
    tcflush( g_uartfd[uart_num], TCIFLUSH );
    options.c_cc[VTIME] = 128;
    options.c_cc[VMIN] = 1;

2、在数据传递到应用层后,数据如果是hex码的,最好通过深度拷贝方式,传递需要拷贝数据的长度,如:std::string assign(buf, length)

 

Note:详细的串口结构体参数说明请参考linux kernel Maunal page

 

 

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值