linux串口为何不是一次性接收,解决linux串口只能一次性接收8个字节的问题

开发过程中,用到了的linux串口,发现一次性只能接收8个字节,相信很多人都遇到过,在此记录解决问题的过程。只需要缓存接收到的大于8个字节的数据即可,直到小于8便结束。废话不多,贴出代码:

接受代码

int SerialRecv(int fd, char *rcv_buf, int data_len)

{

static int count=0;

int len, fs_sel;

char rcv_data[100];

fd_set fs_read;

struct timeval time;

FD_ZERO(&fs_read);

FD_SET(fd, &fs_read);

time.tv_sec = 10;

time.tv_usec = 0;

//使用select实现串口的多路通信

fs_sel = select(fd + 1, &fs_read, NULL, NULL, &time);

if (fs_sel)

{

len = read(fd, rcv_data, data_len);

}

else

{

return FALSE;

}

if(len==8)

{

strncpy(rcv_buf+count,rcv_data,8);

count+=8;

}

if(len>0&&len<8)

{

strncpy(rcv_buf+count,rcv_data,len);

count+=len;

printf("count=%d\n",count);

len=count;

count=0;

return len;

}

return 0;

}

调用代码:

#include #include #include #include #include #include #include "serial.h"

int fd;

int main(void)

{

int len;

int rt = -1;

char send_buf[20] = "hello world";

char rcv_buf[100];

memset(rcv_buf, 0, sizeof(rcv_buf));

fd = SerialInit(2, 9600, 8, 0, 0);

SerialSend(fd, send_buf, 10);

// read_datas_tty(fd,rcv_buf,1,10);

while (1) //循环读取数据

{

len = SerialRecv(fd, rcv_buf, sizeof(rcv_buf));

if (len >0)

{

rcv_buf[len] = '\0';

printf("len: %d ,receive data : %s\n", len,rcv_buf);

SerialSend(fd, rcv_buf, len);

}

else

{

}

}

return 0;

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值