当前位置: 技术问答>linux和unix
我的串口程序为什么总收到多余的字符?
来源: 互联网 发布时间:2016-06-27
本文导语: 我的写了个程序来接收串口的消息。但是收到的信息中间多了很多无用的“f” 例如: len 25 7e450ffffffffffffffff00c0ffffff93001bfffffff9100000000f4e7e len是收到的字符串的长度,由程序给出,没有算那些f。也就是程序知道那些f...
我的写了个程序来接收串口的消息。但是收到的信息中间多了很多无用的“f”
例如:
len 25
7e450ffffffffffffffff00c0ffffff93001bfffffff9100000000f4e7e
len是收到的字符串的长度,由程序给出,没有算那些f。也就是程序知道那些f不是收到的信息。如果没有了那些f,结果就是正确的。
而且很多时候一条信息分开了两次接收。
例如:
Len 10
7e450ffffffffffffffff00c0ffffff93
Len 15
001bfffffff7100000000783d7e
Len 16
7e450ffffffffffffffff00c0ffffff93001bfffffffa100
Len 9
0000004b637e
这是为什么呢?我每条信息都是固定的25个bytes的
发送端应该没问题。因为用别的软件接收一切正常。
例如:
len 25
7e450ffffffffffffffff00c0ffffff93001bfffffff9100000000f4e7e
len是收到的字符串的长度,由程序给出,没有算那些f。也就是程序知道那些f不是收到的信息。如果没有了那些f,结果就是正确的。
而且很多时候一条信息分开了两次接收。
例如:
Len 10
7e450ffffffffffffffff00c0ffffff93
Len 15
001bfffffff7100000000783d7e
Len 16
7e450ffffffffffffffff00c0ffffff93001bfffffffa100
Len 9
0000004b637e
这是为什么呢?我每条信息都是固定的25个bytes的
发送端应该没问题。因为用别的软件接收一切正常。
|
输出中的f是因为printf("%x"...)缺省打印整数,字符(char)就带符号扩展为整数(int)
当buff[i]的最高位为1比如'x83'扩展为整数就是0xffffff83了。
请改为:
printf("%02hhx ", (unsigned char)buff[i]);
因为"%x"中的x表示需要无符号参数。
opt.c_iflag |= IGNBRK; //忽略回车符
有点问题吧,为何忽略回车???
opt.c_iflag &= ~INPCK;
opt.c_iflag |= IGNBRK; //忽略回车符
/* 改为 */
opt.c_iflag &= ~(INPCK | ISTRIP); /* 由于c_cflag &= ~PARENB; 无奇偶校验, 此处相应设置 */
opt.c_iflag &= ~(IXON | IXOFF | IXANY); /* 不要软件流控, 如果发送程序用软件流控,改为 */
/*
opt.c_iflag |= (IXON | IXOFF | IXANY);
*/
|
while(1)
{
//清空buff
memset(buff,0,512);
while((nread = read(fd, buff, 511)) >0) //把512改为511
{
printf("nLen %dn",nread);
buff[nread+1] = '';
for(i=0; i 0) {
if ( (nread = read(fd, ptr, nleft)) = 0 */
}
/* end readn */