linux 串口 循环读取数据库,Linux串口编程一次读取全部输入的数据(输入数据不定长)...

编程背景:板子是linux 2.6.39系统,人机交互接口是板子上的一个串口。输入命令时,当长度大于8时,发现read读取到的数据是分多次得到的(串口用非阻塞模式读取数据),比如输入的字符长度为25(循环读取,下面贴代码):第一次读取8个,并发生串口中断(发生中断后中间会有一小会读不到数据,实测),然后又读取8个、8个、1个(‘\0’不占位),查了下原因,好多网友也遇到了这个问题,看了几个帖子都没直接说出解决办法。原来这个和串口设备的缓冲有关,常见的缓冲大小是8bytes,既然能收到数据,那就自己撸代码来一次一次的接收,然后放到缓存里面去,直到接收满足预定的为止

编程目的:串口接收输入任意长度的字符串(有上限),放入缓存字符数组中

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "GPRS.h"

#define DATA_LEN 0xFF

#define BUFSIZE 512

char read_buf[256] = {'\0'};

char read_nBytes[10] = {0};

int openSerial_GPRS(char *cSerialName, unsigned int Ba

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux C编程中,接收不定数据串口通信可以通过以下的步骤实现: 1. 打开串口:使用open系统调用打开串口设备文件,例如"/dev/ttyS0"。确保正确设置串口的baud rate、数据位、校验位和停止位等参数。 2. 配置串口:通过ioctl系统调用设置串口的属性,例如禁用规范模式,并设置输入输出波特率、数据位、校验位和停止位等参数。 3. 接收数据:使用read系统调用从串口读取数据。由于数据不定,可以考虑一次读取一个字节,并将其存储在一个缓冲区中。 4. 处理数据:根据接收的数据进行处理。可以通过循环读取,直到接收到特定的结束标志或达到预定的数据度。也可以通过超时机制或读取的字节数判断数据接收完成。 5. 关闭串口:使用close系统调用关闭串口设备文件。 需要注意的是,在接收不定数据时,可能会遇到以下一些问题: 1. 数据的结束标志:如果数据中没有特定的结束标志,在处理数据时可能需要使用自定义的结束标志或者通过计数器判断数据度。 2. 超时处理:如果数据的接收时间较,可以通过设置串口的超时时间,当一定时间内没有数据到达时,进行超时处理。 3. 数据缓冲区大小:由于数据度不确定,需要考虑缓冲区的大小,确保足够存储接收的数据。 总之,在Linux C中接收不定数据串口通信,需要打开和配置串口循环读取数据并进行处理,最后关闭串口。通过合适的结束标志、超时处理和缓冲区管理等技术,可以实现稳定、可靠地接收不定数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值